From dbaf1a5fd2d8c82d6f36597f047f5c9e320a6dd3 Mon Sep 17 00:00:00 2001 From: sergosm Date: Fri, 11 Sep 2020 12:22:20 +0300 Subject: [PATCH 001/198] Point_menu --- OsmAnd/res/layout/custom_radio_buttons.xml | 3 +- ...etweenPointsBottomSheetDialogFragment.java | 69 +++++++++++++++++-- ...electedPointBottomSheetDialogFragment.java | 2 - 3 files changed, 67 insertions(+), 7 deletions(-) diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index a5ec943f6a..d768e58004 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -4,7 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/custom_radio_buttons" android:layout_width="match_parent" - android:layout_height="@dimen/dialog_button_height" + android:minHeight="@dimen/dialog_button_height" + android:layout_height="wrap_content" android:layout_marginStart="@dimen/content_padding" android:layout_marginEnd="@dimen/content_padding" android:background="?attr/btn_bg_border_inactive" diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java index f57cbd4e04..ebe9bfeb9c 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java @@ -2,6 +2,7 @@ package net.osmand.plus.measurementtool; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.util.Pair; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -13,25 +14,84 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import net.osmand.GPXUtilities; import net.osmand.PlatformUtil; +import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.util.MapUtils; import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.List; +import java.util.Map; import static net.osmand.plus.UiUtilities.CustomRadioButtonType.LEFT; import static net.osmand.plus.UiUtilities.CustomRadioButtonType.RIGHT; import static net.osmand.plus.measurementtool.MeasurementEditingContext.DEFAULT_APP_MODE; + + public class RouteBetweenPointsBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { + @NonNull + private String getDescription(boolean before, boolean single) { + MapActivity mapActivity = (MapActivity) getActivity(); + if (mapActivity == null) { + return ""; + } + + MeasurementEditingContext editingCtx = mapActivity.getMapLayers().getMeasurementToolLayer().getEditingCtx(); + int pos = editingCtx.getSelectedPointPosition(); + List points = editingCtx.getPoints(); + + int startIdx; + int endIdx; + if (before) { + startIdx = 1; + endIdx = pos; + } else { + startIdx = pos + 1; + endIdx = points.size() - 1; + } + + float dist = !single ? getDistForAllSegments(points, startIdx, endIdx) : getDistForSingleSegment(editingCtx, points, startIdx, endIdx); + + return OsmAndFormatter.getFormattedDistance(dist, mapActivity.getMyApplication()); + } + + private float getDistForAllSegments(List points, int startIdx, int endIdx) { + float dist = 0; + for (int i = startIdx; i <= endIdx; i++) { + GPXUtilities.WptPt first = points.get(i - 1); + GPXUtilities.WptPt second = points.get(i); + dist += MapUtils.getDistance(first.lat, first.lon, second.lat, second.lon); + } + return dist; + } + + private float getDistForSingleSegment(MeasurementEditingContext editingCtx, List points, int startIdx, int endIdx) { + float dist = 0; + Map, MeasurementEditingContext.RoadSegmentData> roadSegmentDataMap = editingCtx.getRoadSegmentData(); + if (startIdx <= endIdx) { + Pair pair = new Pair<>(points.get(startIdx), points.get(startIdx - 1)); + MeasurementEditingContext.RoadSegmentData data = roadSegmentDataMap.get(pair); + if (data == null) { + dist += MapUtils.getDistance(pair.first.getLatitude(), pair.first.getLongitude(), + pair.second.getLatitude(), pair.second.getLongitude()); + } else { + dist += data.getDistance(); + } + } + return dist; + } + private static final Log LOG = PlatformUtil.getLog(RouteBetweenPointsBottomSheetDialogFragment.class); public static final String TAG = RouteBetweenPointsBottomSheetDialogFragment.class.getSimpleName(); public static final int STRAIGHT_LINE_TAG = -1; @@ -71,23 +131,24 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends MenuBottomSheet case NEXT_ROUTE_CALCULATION: switch (dialogMode) { case SINGLE: - return getString(R.string.next_segment); + return getString(R.string.next_segment) + " " + getDescription(false, true); case ALL: - return getString(R.string.all_next_segments); + return getString(R.string.all_next_segments) + " " + getDescription(false, false); } break; case PREV_ROUTE_CALCULATION: switch (dialogMode) { case SINGLE: - return getString(R.string.previous_segment); + return getString(R.string.previous_segment) + " " + getDescription(true, true); case ALL: - return getString(R.string.all_previous_segments); + return getString(R.string.all_previous_segments) + " " + getDescription(true, false); } break; } return ""; } + private String getButtonDescr(RouteBetweenPointsDialogMode dialogMode) { switch (dialogType) { case WHOLE_ROUTE_CALCULATION: diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java index 9fac103fc5..f3dde5d561 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java @@ -158,7 +158,6 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(new OptionsDividerItem(getContext())); BaseBottomSheetItem changeRouteTypeBefore = new BottomSheetItemWithDescription.Builder() - .setDescription(getDescription(true)) .setIcon(getRouteTypeIcon(true)) .setTitle(getString(R.string.plan_route_change_route_type_before)) .setLayoutId(R.layout.bottom_sheet_item_with_descr_pad_32dp) @@ -177,7 +176,6 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(changeRouteTypeBefore); BaseBottomSheetItem changeRouteTypeAfter = new BottomSheetItemWithDescription.Builder() - .setDescription(getDescription(false)) .setIcon(getRouteTypeIcon(false)) .setTitle(getString(R.string.plan_route_change_route_type_after)) .setLayoutId(R.layout.bottom_sheet_item_with_descr_pad_32dp) From 058c7414f57c5c684a7117082be03adc48815ea7 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 16 Nov 2020 08:25:49 +0200 Subject: [PATCH 002/198] Export UI first screen initial commit --- OsmAnd/res/layout/fragment_import.xml | 66 ++- .../layout/profile_data_list_item_group.xml | 8 +- OsmAnd/res/values/strings.xml | 4 + OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java | 2 +- .../backend/ExportSettingsCategory.java | 22 + .../settings/backend/ExportSettingsType.java | 77 ++- .../backend/backup/SettingsHelper.java | 260 ++++++---- .../fragments/ConfigureProfileFragment.java | 11 +- .../settings/fragments/ExportDataObject.java | 24 + .../ExportImportSettingsAdapter.java | 488 +++++++----------- .../fragments/ExportProfileBottomSheet.java | 429 --------------- .../fragments/ExportSettingsFragment.java | 405 +++++++++++++++ .../fragments/ImportSettingsFragment.java | 102 ++-- .../fragments/MainSettingsFragment.java | 2 +- .../settings/fragments/ReloadIndexesTack.java | 37 ++ 15 files changed, 996 insertions(+), 941 deletions(-) create mode 100644 OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsCategory.java create mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java delete mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ExportProfileBottomSheet.java create mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java create mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java diff --git a/OsmAnd/res/layout/fragment_import.xml b/OsmAnd/res/layout/fragment_import.xml index 31237e535e..e9852ea58d 100644 --- a/OsmAnd/res/layout/fragment_import.xml +++ b/OsmAnd/res/layout/fragment_import.xml @@ -32,34 +32,46 @@ + android:orientation="horizontal"> - + android:layout_weight="1" + android:orientation="vertical" + android:paddingLeft="@dimen/content_padding" + android:paddingTop="@dimen/bottom_sheet_title_padding_bottom" + android:paddingRight="@dimen/content_padding" + android:paddingBottom="@dimen/bottom_sheet_title_padding_bottom"> + osmand:typeface="@string/font_roboto_regular" + tools:text="567 MB" /> - + + + @@ -79,8 +95,6 @@ android:ellipsize="end" android:gravity="center" android:maxLines="1" - android:paddingLeft="@dimen/content_padding_small" - android:paddingRight="@dimen/content_padding_small" android:text="@string/shared_string_continue" android:textColor="?attr/dlg_btn_primary_text" android:textSize="@dimen/default_desc_text_size" @@ -95,8 +109,8 @@ + osmand:title="@string/shared_string_import" + osmand:titleMarginEnd="0dp" + osmand:titleMarginStart="0dp"> @@ -132,8 +146,8 @@ style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="5dp" - android:visibility="gone" android:indeterminate="true" + android:visibility="gone" osmand:mpb_progressStyle="horizontal" osmand:mpb_setBothDrawables="true" osmand:mpb_useIntrinsicPadding="false" diff --git a/OsmAnd/res/layout/profile_data_list_item_group.xml b/OsmAnd/res/layout/profile_data_list_item_group.xml index e10b9eecd0..6cf421ff8a 100644 --- a/OsmAnd/res/layout/profile_data_list_item_group.xml +++ b/OsmAnd/res/layout/profile_data_list_item_group.xml @@ -1,6 +1,6 @@ + android:layout_marginRight="@dimen/text_margin_small"> + Needed for import + Select the data to be exported to the file. + Approximate file size + Resources I already have an account Create new account Photos are provided by open data project OpenPlaceReviews.org. In order to upload your photos you need to sign up on website. diff --git a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java index de3f073bdc..f319a878be 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java @@ -2312,7 +2312,7 @@ public class OsmandAidlApi { File exportDir = app.getSettings().getExternalStorageDirectory(); String fileName = appMode.toHumanString(); SettingsHelper settingsHelper = app.getSettingsHelper(); - settingsItems.addAll(settingsHelper.getFilteredSettingsItems(settingsHelper.getAdditionalData(false), settingsTypes)); + settingsItems.addAll(settingsHelper.getFilteredSettingsItems(settingsTypes, false)); settingsHelper.exportSettings(exportDir, fileName, null, settingsItems, true); return true; } diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsCategory.java b/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsCategory.java new file mode 100644 index 0000000000..931068ea31 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsCategory.java @@ -0,0 +1,22 @@ +package net.osmand.plus.settings.backend; + +import androidx.annotation.StringRes; + +import net.osmand.plus.R; + +public enum ExportSettingsCategory { + SETTINGS(R.string.shared_string_settings), + MY_PLACES(R.string.shared_string_my_places), + RESOURCES(R.string.shared_string_resources); + + @StringRes + private final int titleId; + + ExportSettingsCategory(@StringRes int titleId) { + this.titleId = titleId; + } + + public int getTitleId() { + return titleId; + } +} diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java b/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java index 3dcb680b06..10e392d0cc 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java @@ -1,22 +1,61 @@ package net.osmand.plus.settings.backend; +import androidx.annotation.DrawableRes; +import androidx.annotation.StringRes; + +import net.osmand.plus.R; + public enum ExportSettingsType { - PROFILE, - QUICK_ACTIONS, - POI_TYPES, - MAP_SOURCES, - CUSTOM_RENDER_STYLE, - CUSTOM_ROUTING, - AVOID_ROADS, - TRACKS, - MULTIMEDIA_NOTES, - GLOBAL, - OSM_NOTES, - OSM_EDITS, - OFFLINE_MAPS, - FAVORITES, - TTS_VOICE, - VOICE, - ACTIVE_MARKERS, - HISTORY_MARKERS -} + PROFILE(R.string.shared_string_profiles, R.drawable.ic_action_manage_profiles), + QUICK_ACTIONS(R.string.configure_screen_quick_action, R.drawable.ic_quick_action), + POI_TYPES(R.string.poi_dialog_poi_type, R.drawable.ic_action_info_dark), + MAP_SOURCES(R.string.quick_action_map_source_title, R.drawable.ic_map), + CUSTOM_RENDER_STYLE(R.string.shared_string_rendering_style, R.drawable.ic_action_map_style), + CUSTOM_ROUTING(R.string.shared_string_routing, R.drawable.ic_action_route_distance), + AVOID_ROADS(R.string.avoid_road, R.drawable.ic_action_alert), + TRACKS(R.string.shared_string_tracks, R.drawable.ic_action_route_distance), + MULTIMEDIA_NOTES(R.string.audionotes_plugin_name, R.drawable.ic_action_photo_dark), + GLOBAL(R.string.general_settings_2, R.drawable.ic_action_settings), + OSM_NOTES(R.string.osm_notes, R.drawable.ic_action_openstreetmap_logo), + OSM_EDITS(R.string.osm_edits, R.drawable.ic_action_openstreetmap_logo), + OFFLINE_MAPS(R.string.shared_string_maps, R.drawable.ic_map), + FAVORITES(R.string.shared_string_favorites, R.drawable.ic_action_favorite), + TTS_VOICE(R.string.local_indexes_cat_tts, R.drawable.ic_action_volume_up), + VOICE(R.string.local_indexes_cat_voice, R.drawable.ic_action_volume_up), + ACTIVE_MARKERS(R.string.map_markers, R.drawable.ic_action_flag), + HISTORY_MARKERS(R.string.markers_history, R.drawable.ic_action_flag); + + @StringRes + private final int titleId; + @DrawableRes + private final int drawableRes; + + ExportSettingsType(@StringRes int titleId, @DrawableRes int drawableRes) { + this.titleId = titleId; + this.drawableRes = drawableRes; + } + + @StringRes + public int getTitleId() { + return titleId; + } + + @DrawableRes + public int getIconRes() { + return drawableRes; + } + + public boolean isSettingsCategory() { + return this == PROFILE || this == GLOBAL || this == QUICK_ACTIONS || this == POI_TYPES; + } + + public boolean isMyPlacesCategory() { + return this == FAVORITES || this == TRACKS || this == OSM_EDITS || this == OSM_NOTES + || this == MULTIMEDIA_NOTES || this == ACTIVE_MARKERS || this == HISTORY_MARKERS; + } + + public boolean isResourcesCategory() { + return this == CUSTOM_RENDER_STYLE || this == CUSTOM_ROUTING || this == MAP_SOURCES + || this == OFFLINE_MAPS || this == VOICE || this == TTS_VOICE; + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index c974e72686..3a0cbe8a61 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -39,7 +39,9 @@ import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.quickaction.QuickActionRegistry; import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; +import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; +import net.osmand.plus.settings.fragments.ExportDataObject; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -52,6 +54,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -465,6 +468,17 @@ public class SettingsHelper { exportSettings(fileDir, fileName, listener, new ArrayList<>(Arrays.asList(items)), exportItemsFiles); } + public List getFilteredSettingsItems(List settingsTypes, boolean globalExport) { + Map> dataList = getAdditionalData(globalExport); + Map> typesMap = new HashMap<>(); + for (List objects : dataList.values()) { + for (ExportDataObject exportObject : objects) { + typesMap.put(exportObject.getType(), exportObject.getItems()); + } + } + return getFilteredSettingsItems(typesMap, settingsTypes); + } + public List getFilteredSettingsItems(Map> additionalData, List settingsTypes) { List settingsItems = new ArrayList<>(); @@ -482,20 +496,129 @@ public class SettingsHelper { return settingsItems; } - public Map> getAdditionalData(boolean globalExport) { - Map> dataList = new HashMap<>(); + public Map> getAdditionalData(boolean globalExport) { + Map> dataList = new LinkedHashMap<>(); + + List settingsItems = getSettingsItems(globalExport); + List myPlacesItems = getMyPlacesItems(); + List resourcesItems = getResourcesItems(); + + if (!settingsItems.isEmpty()) { + dataList.put(ExportSettingsCategory.SETTINGS, settingsItems); + } + if (!myPlacesItems.isEmpty()) { + dataList.put(ExportSettingsCategory.MY_PLACES, myPlacesItems); + } + if (!resourcesItems.isEmpty()) { + dataList.put(ExportSettingsCategory.RESOURCES, resourcesItems); + } + + return dataList; + } + + private List getSettingsItems(boolean globalExport) { + List settingsItems = new ArrayList<>(); + + if (globalExport) { + List appModeBeans = new ArrayList<>(); + for (ApplicationMode mode : ApplicationMode.allPossibleValues()) { + appModeBeans.add(mode.toModeBean()); + } + settingsItems.add(new ExportDataObject(ExportSettingsType.PROFILE, appModeBeans)); + } + settingsItems.add(new ExportDataObject(ExportSettingsType.GLOBAL, Collections.singletonList(new GlobalSettingsItem(app.getSettings())))); QuickActionRegistry registry = app.getQuickActionRegistry(); List actionsList = registry.getQuickActions(); if (!actionsList.isEmpty()) { - dataList.put(ExportSettingsType.QUICK_ACTIONS, actionsList); + settingsItems.add(new ExportDataObject(ExportSettingsType.QUICK_ACTIONS, actionsList)); } - List poiList = app.getPoiFilters().getUserDefinedPoiFilters(false); if (!poiList.isEmpty()) { - dataList.put(ExportSettingsType.POI_TYPES, poiList); + settingsItems.add(new ExportDataObject(ExportSettingsType.POI_TYPES, poiList)); } + return settingsItems; + } + + private List getMyPlacesItems() { + List myPlacesItems = new ArrayList<>(); + + List favoriteGroups = app.getFavorites().getFavoriteGroups(); + if (!favoriteGroups.isEmpty()) { + myPlacesItems.add(new ExportDataObject(ExportSettingsType.FAVORITES, favoriteGroups)); + } + File gpxDir = app.getAppPath(IndexConstants.GPX_INDEX_DIR); + List gpxInfoList = GpxUiHelper.getSortedGPXFilesInfo(gpxDir, null, true); + if (!gpxInfoList.isEmpty()) { + List files = new ArrayList<>(); + for (GPXInfo gpxInfo : gpxInfoList) { + File file = new File(gpxInfo.getFileName()); + if (file.exists()) { + files.add(file); + } + } + if (!files.isEmpty()) { + myPlacesItems.add(new ExportDataObject(ExportSettingsType.TRACKS, files)); + } + } + OsmEditingPlugin osmEditingPlugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class); + if (osmEditingPlugin != null) { + List notesPointList = osmEditingPlugin.getDBBug().getOsmbugsPoints(); + if (!notesPointList.isEmpty()) { + myPlacesItems.add(new ExportDataObject(ExportSettingsType.OSM_NOTES, notesPointList)); + } + List editsPointList = osmEditingPlugin.getDBPOI().getOpenstreetmapPoints(); + if (!editsPointList.isEmpty()) { + myPlacesItems.add(new ExportDataObject(ExportSettingsType.OSM_EDITS, editsPointList)); + } + } + AudioVideoNotesPlugin plugin = OsmandPlugin.getPlugin(AudioVideoNotesPlugin.class); + if (plugin != null) { + List files = new ArrayList<>(); + for (Recording rec : plugin.getAllRecordings()) { + File file = rec.getFile(); + if (file != null && file.exists()) { + files.add(file); + } + } + if (!files.isEmpty()) { + myPlacesItems.add(new ExportDataObject(ExportSettingsType.MULTIMEDIA_NOTES, files)); + } + } + List mapMarkers = app.getMapMarkersHelper().getMapMarkersFromDefaultGroups(false); + if (!mapMarkers.isEmpty()) { + String name = app.getString(R.string.map_markers); + String groupId = ExportSettingsType.ACTIVE_MARKERS.name(); + MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE); + markersGroup.setMarkers(mapMarkers); + myPlacesItems.add(new ExportDataObject(ExportSettingsType.ACTIVE_MARKERS, Collections.singletonList(markersGroup))); + } + List markersHistory = app.getMapMarkersHelper().getMapMarkersFromDefaultGroups(true); + if (!markersHistory.isEmpty()) { + String name = app.getString(R.string.shared_string_history); + String groupId = ExportSettingsType.HISTORY_MARKERS.name(); + MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE); + markersGroup.setMarkers(markersHistory); + myPlacesItems.add(new ExportDataObject(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup))); + } + return myPlacesItems; + } + + private List getResourcesItems() { + List resourcesItems = new ArrayList<>(); + + Map externalRenderers = app.getRendererRegistry().getExternalRenderers(); + if (!externalRenderers.isEmpty()) { + resourcesItems.add(new ExportDataObject(ExportSettingsType.CUSTOM_RENDER_STYLE, new ArrayList<>(externalRenderers.values()))); + } + File routingProfilesFolder = app.getAppPath(IndexConstants.ROUTING_PROFILES_DIR); + if (routingProfilesFolder.exists() && routingProfilesFolder.isDirectory()) { + File[] fl = routingProfilesFolder.listFiles(); + if (fl != null && fl.length > 0) { + resourcesItems.add(new ExportDataObject(ExportSettingsType.CUSTOM_ROUTING, Arrays.asList(fl))); + } + } List iTileSources = new ArrayList<>(); Set tileSourceNames = app.getSettings().getTileSourceEntries(true).keySet(); for (String name : tileSourceNames) { @@ -513,107 +636,29 @@ public class SettingsHelper { } } if (!iTileSources.isEmpty()) { - dataList.put(ExportSettingsType.MAP_SOURCES, iTileSources); - } - - Map externalRenderers = app.getRendererRegistry().getExternalRenderers(); - if (!externalRenderers.isEmpty()) { - dataList.put(ExportSettingsType.CUSTOM_RENDER_STYLE, new ArrayList<>(externalRenderers.values())); - } - - File routingProfilesFolder = app.getAppPath(IndexConstants.ROUTING_PROFILES_DIR); - if (routingProfilesFolder.exists() && routingProfilesFolder.isDirectory()) { - File[] fl = routingProfilesFolder.listFiles(); - if (fl != null && fl.length > 0) { - dataList.put(ExportSettingsType.CUSTOM_ROUTING, Arrays.asList(fl)); - } - } - - Map impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads(); - if (!impassableRoads.isEmpty()) { - dataList.put(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values())); - } - AudioVideoNotesPlugin plugin = OsmandPlugin.getPlugin(AudioVideoNotesPlugin.class); - if (plugin != null) { - List files = new ArrayList<>(); - for (Recording rec : plugin.getAllRecordings()) { - File file = rec.getFile(); - if (file != null && file.exists()) { - files.add(file); - } - } - if (!files.isEmpty()) { - dataList.put(ExportSettingsType.MULTIMEDIA_NOTES, files); - } - } - File gpxDir = app.getAppPath(IndexConstants.GPX_INDEX_DIR); - List gpxInfoList = GpxUiHelper.getSortedGPXFilesInfo(gpxDir, null, true); - if (!gpxInfoList.isEmpty()) { - List files = new ArrayList<>(); - for (GPXInfo gpxInfo : gpxInfoList) { - File file = new File(gpxInfo.getFileName()); - if (file.exists()) { - files.add(file); - } - } - if (!files.isEmpty()) { - dataList.put(ExportSettingsType.TRACKS, files); - } - } - if (globalExport) { - List appModeBeans = new ArrayList<>(); - for (ApplicationMode mode : ApplicationMode.allPossibleValues()) { - appModeBeans.add(mode.toModeBean()); - } - dataList.put(ExportSettingsType.PROFILE, appModeBeans); - } - OsmEditingPlugin osmEditingPlugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class); - if (osmEditingPlugin != null) { - List notesPointList = osmEditingPlugin.getDBBug().getOsmbugsPoints(); - if (!notesPointList.isEmpty()) { - dataList.put(ExportSettingsType.OSM_NOTES, notesPointList); - } - List editsPointList = osmEditingPlugin.getDBPOI().getOpenstreetmapPoints(); - if (!editsPointList.isEmpty()) { - dataList.put(ExportSettingsType.OSM_EDITS, editsPointList); - } - } - List favoriteGroups = app.getFavorites().getFavoriteGroups(); - if (!favoriteGroups.isEmpty()) { - dataList.put(ExportSettingsType.FAVORITES, favoriteGroups); + resourcesItems.add(new ExportDataObject(ExportSettingsType.MAP_SOURCES, iTileSources)); } List localIndexInfoList = getLocalIndexData(); List files = getFilesByType(localIndexInfoList, LocalIndexType.MAP_DATA, LocalIndexType.TILES_DATA, LocalIndexType.SRTM_DATA, LocalIndexType.WIKI_DATA); if (!files.isEmpty()) { sortLocalFiles(files); - dataList.put(ExportSettingsType.OFFLINE_MAPS, files); + resourcesItems.add(new ExportDataObject(ExportSettingsType.OFFLINE_MAPS, files)); } files = getFilesByType(localIndexInfoList, LocalIndexType.TTS_VOICE_DATA); if (!files.isEmpty()) { - dataList.put(ExportSettingsType.TTS_VOICE, files); + resourcesItems.add(new ExportDataObject(ExportSettingsType.TTS_VOICE, files)); } files = getFilesByType(localIndexInfoList, LocalIndexType.VOICE_DATA); if (!files.isEmpty()) { - dataList.put(ExportSettingsType.VOICE, files); + resourcesItems.add(new ExportDataObject(ExportSettingsType.VOICE, files)); } - List mapMarkers = app.getMapMarkersHelper().getMapMarkersFromDefaultGroups(false); - if (!mapMarkers.isEmpty()) { - String name = app.getString(R.string.map_markers); - String groupId = ExportSettingsType.ACTIVE_MARKERS.name(); - MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE); - markersGroup.setMarkers(mapMarkers); - dataList.put(ExportSettingsType.ACTIVE_MARKERS, Collections.singletonList(markersGroup)); + Map impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads(); + if (!impassableRoads.isEmpty()) { + resourcesItems.add(new ExportDataObject(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values()))); } - List markersHistory = app.getMapMarkersHelper().getMapMarkersFromDefaultGroups(true); - if (!markersHistory.isEmpty()) { - String name = app.getString(R.string.shared_string_history); - String groupId = ExportSettingsType.HISTORY_MARKERS.name(); - MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE); - markersGroup.setMarkers(markersHistory); - dataList.put(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup)); - } - return dataList; + + return resourcesItems; } private List getLocalIndexData() { @@ -733,6 +778,37 @@ public class SettingsHelper { return settingsItems; } + public static Map> getSettingsToOperateByCategory(List items, boolean importComplete) { + Map> exportMap = new LinkedHashMap<>(); + Map> settingsToOperate = getSettingsToOperate(items, importComplete); + + List settingsItems = new ArrayList<>(); + List myPlacesItems = new ArrayList<>(); + List resourcesItems = new ArrayList<>(); + + for (Map.Entry> entry : settingsToOperate.entrySet()) { + ExportSettingsType type = entry.getKey(); + if (type.isSettingsCategory()) { + settingsItems.add(new ExportDataObject(type, entry.getValue())); + } else if (type.isMyPlacesCategory()) { + myPlacesItems.add(new ExportDataObject(type, entry.getValue())); + } else if (type.isResourcesCategory()) { + resourcesItems.add(new ExportDataObject(type, entry.getValue())); + } + } + if (!settingsItems.isEmpty()) { + exportMap.put(ExportSettingsCategory.SETTINGS, settingsItems); + } + if (!myPlacesItems.isEmpty()) { + exportMap.put(ExportSettingsCategory.MY_PLACES, myPlacesItems); + } + if (!resourcesItems.isEmpty()) { + exportMap.put(ExportSettingsCategory.RESOURCES, resourcesItems); + } + + return exportMap; + } + public static Map> getSettingsToOperate(List settingsItems, boolean importComplete) { Map> settingsToOperate = new HashMap<>(); List profiles = new ArrayList<>(); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ConfigureProfileFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ConfigureProfileFragment.java index 672229d953..ae1b2eba36 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ConfigureProfileFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ConfigureProfileFragment.java @@ -31,12 +31,9 @@ import androidx.recyclerview.widget.RecyclerView; import net.osmand.AndroidUtils; import net.osmand.IndexConstants; import net.osmand.PlatformUtil; -import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; -import net.osmand.plus.settings.backend.backup.SettingsHelper; -import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsCollectListener; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.AndroidUiHelper; @@ -44,6 +41,9 @@ import net.osmand.plus.helpers.FontCache; import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin; import net.osmand.plus.profiles.SelectCopyAppModeBottomSheet; import net.osmand.plus.profiles.SelectCopyAppModeBottomSheet.CopyAppModePrefsListener; +import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.backup.SettingsHelper; +import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsCollectListener; import net.osmand.plus.settings.backend.backup.SettingsItem; import net.osmand.plus.settings.bottomsheets.ResetProfilePrefsBottomSheet; import net.osmand.plus.settings.bottomsheets.ResetProfilePrefsBottomSheet.ResetAppModePrefsListener; @@ -433,10 +433,7 @@ public class ConfigureProfileFragment extends BaseSettingsFragment implements Co } else if (EXPORT_PROFILE.equals(prefId)) { FragmentManager fragmentManager = getFragmentManager(); if (fragmentManager != null) { - ExportProfileBottomSheet.showInstance( - fragmentManager, - this, - getSelectedAppMode(), false); + ExportSettingsFragment.showInstance(fragmentManager, getSelectedAppMode(), false); } } else if (DELETE_PROFILE.equals(prefId)) { onDeleteProfileClick(); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java new file mode 100644 index 0000000000..11cb9a79b6 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java @@ -0,0 +1,24 @@ +package net.osmand.plus.settings.fragments; + +import net.osmand.plus.settings.backend.ExportSettingsType; + +import java.util.List; + +public class ExportDataObject { + + private ExportSettingsType type; + private List items; + + public ExportDataObject(ExportSettingsType type, List items) { + this.type = type; + this.items = items; + } + + public ExportSettingsType getType() { + return type; + } + + public List getItems() { + return items; + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java index 8002a49270..24df2f294f 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java @@ -4,8 +4,6 @@ import android.content.res.ColorStateList; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; @@ -13,32 +11,16 @@ import androidx.core.content.ContextCompat; import androidx.core.widget.CompoundButtonCompat; import net.osmand.AndroidUtils; -import net.osmand.IndexConstants; import net.osmand.PlatformUtil; -import net.osmand.map.ITileSource; -import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.OsmandBaseExpandableListAdapter; -import net.osmand.plus.audionotes.AudioVideoNotesPlugin; -import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; -import net.osmand.plus.helpers.FileNameTranslationHelper; -import net.osmand.plus.helpers.GpxUiHelper; -import net.osmand.plus.osmedit.OpenstreetmapPoint; -import net.osmand.plus.osmedit.OsmEditingPlugin; -import net.osmand.plus.osmedit.OsmNotesPoint; -import net.osmand.plus.poi.PoiUIFilter; -import net.osmand.plus.profiles.ProfileIconColors; -import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources; -import net.osmand.plus.quickaction.QuickAction; -import net.osmand.plus.render.RenderingIcons; -import net.osmand.plus.settings.backend.ApplicationMode; -import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; +import net.osmand.plus.helpers.AndroidUiHelper; +import net.osmand.plus.helpers.FontCache; +import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.FileSettingsItem; -import net.osmand.plus.settings.backend.backup.GlobalSettingsItem; -import net.osmand.util.Algorithms; import net.osmand.view.ThreeStateCheckbox; import org.apache.commons.logging.Log; @@ -47,11 +29,10 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static net.osmand.plus.settings.backend.ExportSettingsType.OFFLINE_MAPS; -import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype; import static net.osmand.view.ThreeStateCheckbox.State.CHECKED; import static net.osmand.view.ThreeStateCheckbox.State.MISC; import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; @@ -59,91 +40,94 @@ import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { private static final Log LOG = PlatformUtil.getLog(ExportImportSettingsAdapter.class.getName()); - private OsmandApplication app; - private UiUtilities uiUtilities; - private List data; - private Map> itemsMap; - private List itemsTypes; - private boolean nightMode; - private boolean importState; - private int activeColorRes; - private int secondaryColorRes; - ExportImportSettingsAdapter(OsmandApplication app, boolean nightMode, boolean importState) { + private final OsmandApplication app; + private final UiUtilities uiUtilities; + + private List itemsTypes = new ArrayList<>(); + private Map> selectedItemsMap = new HashMap<>(); + private Map> itemsMap = new LinkedHashMap<>(); + + private final OnItemSelectedListener listener; + + private final LayoutInflater themedInflater; + + private final boolean nightMode; + private final int activeColorRes; + private final int secondaryColorRes; + + ExportImportSettingsAdapter(OsmandApplication app, OnItemSelectedListener listener, boolean nightMode) { this.app = app; + this.listener = listener; this.nightMode = nightMode; - this.importState = importState; - this.itemsMap = new HashMap<>(); - this.itemsTypes = new ArrayList<>(); - this.data = new ArrayList<>(); uiUtilities = app.getUIUtilities(); - activeColorRes = nightMode - ? R.color.icon_color_active_dark - : R.color.icon_color_active_light; - secondaryColorRes = nightMode - ? R.color.icon_color_secondary_dark - : R.color.icon_color_secondary_light; + themedInflater = UiUtilities.getInflater(app, nightMode); + activeColorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light; + secondaryColorRes = nightMode ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View group = convertView; if (group == null) { - LayoutInflater inflater = UiUtilities.getInflater(app, nightMode); - group = inflater.inflate(R.layout.profile_data_list_item_group, parent, false); + group = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); } + final ExportSettingsCategory category = itemsTypes.get(groupPosition); + final List items = itemsMap.get(category); - boolean isLastGroup = groupPosition == getGroupCount() - 1; - final ExportSettingsType type = itemsTypes.get(groupPosition); - + String title = app.getString(category.getTitleId()); TextView titleTv = group.findViewById(R.id.title_tv); + titleTv.setText(UiUtilities.createCustomFontSpannable(FontCache.getRobotoMedium(app), title, title)); + TextView subTextTv = group.findViewById(R.id.sub_text_tv); - final ThreeStateCheckbox checkBox = group.findViewById(R.id.check_box); - FrameLayout checkBoxContainer = group.findViewById(R.id.check_box_container); - ImageView expandIv = group.findViewById(R.id.explist_indicator); - View lineDivider = group.findViewById(R.id.divider); - View cardTopDivider = group.findViewById(R.id.card_top_divider); - View cardBottomDivider = group.findViewById(R.id.card_bottom_divider); + subTextTv.setText(getCategoryDescr(category)); - titleTv.setText(getGroupTitle(type)); - lineDivider.setVisibility(importState || isExpanded || isLastGroup ? View.GONE : View.VISIBLE); - cardTopDivider.setVisibility(importState ? View.VISIBLE : View.GONE); - cardBottomDivider.setVisibility(importState && !isExpanded ? View.VISIBLE : View.GONE); - - final List listItems = itemsMap.get(type); - subTextTv.setText(getSelectedItemsAmount(listItems, type)); - - if (data.containsAll(listItems)) { - checkBox.setState(CHECKED); - } else { - boolean contains = false; - for (Object object : listItems) { - if (data.contains(object)) { - contains = true; - break; - } + int selectedTypes = 0; + for (int i = 0; i < items.size(); i++) { + ExportDataObject object = items.get(i); + if (selectedItemsMap.containsKey(object.getType())) { + selectedTypes++; } - checkBox.setState(contains ? MISC : UNCHECKED); + } + final ThreeStateCheckbox checkBox = group.findViewById(R.id.check_box); + if (selectedTypes == 0) { + checkBox.setState(UNCHECKED); + } else { + checkBox.setState(selectedTypes == items.size() ? CHECKED : MISC); } int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); - checkBoxContainer.setOnClickListener(new View.OnClickListener() { + + group.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkBox.performClick(); - if (checkBox.getState() == CHECKED) { - for (Object object : listItems) { - if (!data.contains(object)) { - data.add(object); + boolean selected = checkBox.getState() == CHECKED; + if (selected) { + for (ExportDataObject object : items) { + if (!selectedItemsMap.containsKey(object.getType())) { + selectedItemsMap.put(object.getType(), (List) object.getItems()); } } + } else { - data.removeAll(listItems); + for (ExportDataObject object : items) { + selectedItemsMap.remove(object.getType()); + } + } + if (listener != null) { + listener.onCategorySelected(category, selected); } notifyDataSetChanged(); } }); + adjustIndicator(app, groupPosition, isExpanded, group, nightMode); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.divider), isExpanded); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_top_divider), true); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.vertical_divider), false); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_bottom_divider), !isExpanded); + return group; } @@ -151,168 +135,57 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View child = convertView; if (child == null) { - LayoutInflater inflater = UiUtilities.getInflater(app, nightMode); - child = inflater.inflate(R.layout.profile_data_list_item_child, parent, false); + child = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); } - final Object currentItem = itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); + final ExportDataObject currentItem = itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); + List selectedItems = selectedItemsMap.get(currentItem.getType()); - boolean isLastGroup = groupPosition == getGroupCount() - 1; - boolean itemSelected = data.contains(currentItem); - final ExportSettingsType type = itemsTypes.get(groupPosition); + TextView titleTv = child.findViewById(R.id.title_tv); + titleTv.setText(currentItem.getType().getTitleId()); - TextView title = child.findViewById(R.id.title_tv); - TextView subText = child.findViewById(R.id.sub_title_tv); - subText.setVisibility(View.GONE); - final CheckBox checkBox = child.findViewById(R.id.check_box); - ImageView icon = child.findViewById(R.id.icon); - View lineDivider = child.findViewById(R.id.divider); - View cardBottomDivider = child.findViewById(R.id.card_bottom_divider); + TextView subTextTv = child.findViewById(R.id.sub_text_tv); + subTextTv.setText(getSelectedTypeDescr(currentItem)); - lineDivider.setVisibility(!importState && isLastChild && !isLastGroup ? View.VISIBLE : View.GONE); - cardBottomDivider.setVisibility(importState && isLastChild ? View.VISIBLE : View.GONE); - int checkBoxColor = itemSelected ? activeColorRes : secondaryColorRes; + ImageView icon = child.findViewById(R.id.explist_indicator); + setupIcon(icon, currentItem.getType().getIconRes(), selectedItems != null); + + final ThreeStateCheckbox checkBox = child.findViewById(R.id.check_box); + if (selectedItems == null) { + checkBox.setState(UNCHECKED); + } else if (selectedItems.containsAll(currentItem.getItems())) { + checkBox.setState(CHECKED); + } else { + boolean contains = false; + for (Object object : currentItem.getItems()) { + if (selectedItems.contains(object)) { + contains = true; + break; + } + } + checkBox.setState(contains ? MISC : UNCHECKED); + } + + int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); - - checkBox.setChecked(itemSelected); - checkBox.setClickable(false); - child.setOnClickListener(new View.OnClickListener() { + child.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if (data.contains(currentItem)) { - data.remove(currentItem); + checkBox.performClick(); + boolean selected = checkBox.getState() == CHECKED; + if (selected) { + selectedItemsMap.put(currentItem.getType(), (List) currentItem.getItems()); } else { - data.add(currentItem); + selectedItemsMap.remove(currentItem.getType()); + } + if (listener != null) { + listener.onTypeSelected(currentItem.getType(), selected); } notifyDataSetChanged(); } }); - switch (type) { - case PROFILE: - ApplicationModeBean modeBean = (ApplicationModeBean) currentItem; - String profileName = modeBean.userProfileName; - if (Algorithms.isEmpty(profileName)) { - ApplicationMode appMode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null); - profileName = app.getString(appMode.getNameKeyResource()); - } - title.setText(profileName); - String routingProfile = ""; - String routingProfileValue = modeBean.routingProfile; - if (!routingProfileValue.isEmpty()) { - try { - routingProfile = app.getString(RoutingProfilesResources.valueOf(routingProfileValue.toUpperCase()).getStringRes()); - routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfile); - } catch (IllegalArgumentException e) { - routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfileValue); - LOG.error("Error trying to get routing resource for " + routingProfileValue + "\n" + e); - } - } - if (!Algorithms.isEmpty(routingProfile)) { - subText.setText(String.format( - app.getString(R.string.ltr_or_rtl_combine_via_colon), - app.getString(R.string.nav_type_hint), - routingProfile)); - subText.setVisibility(View.VISIBLE); - } - int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName); - ProfileIconColors iconColor = modeBean.iconColor; - icon.setImageDrawable(uiUtilities.getIcon(profileIconRes, iconColor.getColor(nightMode))); - break; - case QUICK_ACTIONS: - title.setText(((QuickAction) currentItem).getName(app.getApplicationContext())); - setupIcon(icon, ((QuickAction) currentItem).getIconRes(), itemSelected); - break; - case POI_TYPES: - title.setText(((PoiUIFilter) currentItem).getName()); - int iconRes = RenderingIcons.getBigIconResourceId(((PoiUIFilter) currentItem).getIconId()); - setupIcon(icon, iconRes != 0 ? iconRes : R.drawable.ic_action_user, itemSelected); - break; - case MAP_SOURCES: - title.setText(((ITileSource) currentItem).getName()); - setupIcon(icon, R.drawable.ic_map, itemSelected); - break; - case CUSTOM_RENDER_STYLE: - String renderName = ((File) currentItem).getName(); - renderName = renderName.replace('_', ' ').replaceAll(IndexConstants.RENDERER_INDEX_EXT, ""); - title.setText(renderName); - setupIcon(icon, R.drawable.ic_action_map_style, itemSelected); - break; - case CUSTOM_ROUTING: - String routingName = ((File) currentItem).getName(); - routingName = routingName.replace('_', ' ').replaceAll(".xml", ""); - title.setText(routingName); - setupIcon(icon, R.drawable.ic_action_route_distance, itemSelected); - break; - case AVOID_ROADS: - AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) currentItem; - title.setText(avoidRoadInfo.name); - setupIcon(icon, R.drawable.ic_action_alert, itemSelected); - break; - case MULTIMEDIA_NOTES: - File file = (File) currentItem; - title.setText(file.getName()); - int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file); - if (iconId == -1) { - iconId = R.drawable.ic_action_photo_dark; - } - setupIcon(icon, iconId, itemSelected); - break; - case TRACKS: - String fileName = ((File) currentItem).getName(); - title.setText(GpxUiHelper.getGpxTitle(fileName)); - setupIcon(icon, R.drawable.ic_action_route_distance, itemSelected); - break; - case GLOBAL: - String name = ((GlobalSettingsItem) currentItem).getPublicName(app); - title.setText(name); - setupIcon(icon, R.drawable.ic_action_settings, itemSelected); - break; - case OSM_NOTES: - title.setText(((OsmNotesPoint) currentItem).getText()); - setupIcon(icon, R.drawable.ic_action_osm_note_add, itemSelected); - break; - case OSM_EDITS: - title.setText(OsmEditingPlugin.getTitle((OpenstreetmapPoint) currentItem, app)); - setupIcon(icon, R.drawable.ic_action_info_dark, itemSelected); - break; - case OFFLINE_MAPS: - long size; - if (currentItem instanceof FileSettingsItem) { - FileSettingsItem currentFileItem = (FileSettingsItem) currentItem; - file = currentFileItem.getFile(); - size = currentFileItem.getSize(); - } else { - file = (File) currentItem; - size = file.length(); - } - title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName())); - FileSubtype subtype = FileSubtype.getSubtypeByPath(app, file.getPath()); - setupIcon(icon, subtype.getIconId(), itemSelected); - subText.setText(AndroidUtils.formatSize(app, size)); - subText.setVisibility(View.VISIBLE); - break; - case FAVORITES: - FavoriteGroup favoriteGroup = (FavoriteGroup) currentItem; - title.setText(favoriteGroup.getDisplayName(app)); - setupIcon(icon, R.drawable.ic_action_favorite, itemSelected); - break; - case TTS_VOICE: - case VOICE: - file = (File) currentItem; - title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName())); - setupIcon(icon, R.drawable.ic_action_volume_up, itemSelected); - break; - case ACTIVE_MARKERS: - title.setText(R.string.map_markers); - setupIcon(icon, R.drawable.ic_action_flag, itemSelected); - break; - case HISTORY_MARKERS: - title.setText(R.string.markers_history); - setupIcon(icon, R.drawable.ic_action_flag, itemSelected); - break; - default: - return child; - } + AndroidUiHelper.updateVisibility(child.findViewById(R.id.card_bottom_divider), isLastChild); + return child; } @@ -356,78 +229,16 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { return true; } - private String getSelectedItemsAmount(List listItems, ExportSettingsType type) { - int amount = 0; - long amountSize = 0; - for (Object item : listItems) { - if (data.contains(item)) { - amount++; - if (type == OFFLINE_MAPS) { - if (item instanceof FileSettingsItem) { - amountSize += ((FileSettingsItem) item).getSize(); - } else { - amountSize += ((File) item).length(); - } - } - } - } - String itemsOf = app.getString(R.string.n_items_of_z, String.valueOf(amount), String.valueOf(listItems.size())); - return amountSize == 0 ? itemsOf : app.getString(R.string.ltr_or_rtl_combine_via_bold_point, itemsOf, - AndroidUtils.formatSize(app, amountSize)); - } - - private int getGroupTitle(ExportSettingsType type) { - switch (type) { - case PROFILE: - return R.string.shared_string_profiles; - case QUICK_ACTIONS: - return R.string.configure_screen_quick_action; - case POI_TYPES: - return R.string.poi_dialog_poi_type; - case MAP_SOURCES: - return R.string.quick_action_map_source_title; - case CUSTOM_RENDER_STYLE: - return R.string.shared_string_rendering_style; - case CUSTOM_ROUTING: - return R.string.shared_string_routing; - case AVOID_ROADS: - return R.string.avoid_road; - case TRACKS: - return R.string.shared_string_tracks; - case MULTIMEDIA_NOTES: - return R.string.audionotes_plugin_name; - case GLOBAL: - return R.string.general_settings_2; - case OSM_NOTES: - return R.string.osm_notes; - case OSM_EDITS: - return R.string.osm_edits; - case OFFLINE_MAPS: - return R.string.shared_string_maps; - case FAVORITES: - return R.string.shared_string_favorites; - case TTS_VOICE: - return R.string.local_indexes_cat_tts; - case VOICE: - return R.string.local_indexes_cat_voice; - case ACTIVE_MARKERS: - return R.string.map_markers; - case HISTORY_MARKERS: - return R.string.markers_history; - default: - return R.string.access_empty_list; - } - } - private void setupIcon(ImageView icon, int iconRes, boolean itemSelected) { if (itemSelected) { - icon.setImageDrawable(uiUtilities.getIcon(iconRes, activeColorRes)); + int colorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_osmand_light; + icon.setImageDrawable(uiUtilities.getIcon(iconRes, colorRes)); } else { - icon.setImageDrawable(uiUtilities.getIcon(iconRes, nightMode)); + icon.setImageDrawable(uiUtilities.getIcon(iconRes, secondaryColorRes)); } } - public void updateSettingsList(Map> itemsMap) { + public void updateSettingsList(Map> itemsMap) { this.itemsMap = itemsMap; this.itemsTypes = new ArrayList<>(itemsMap.keySet()); Collections.sort(itemsTypes); @@ -440,17 +251,90 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { notifyDataSetChanged(); } - public void selectAll(boolean selectAll) { - data.clear(); - if (selectAll) { - for (List values : itemsMap.values()) { - data.addAll(values); - } + public List getData() { + List selectedItems = new ArrayList<>(); + for (List items : selectedItemsMap.values()) { + selectedItems.addAll(items); } - notifyDataSetChanged(); + return selectedItems; } - List getData() { - return this.data; + private String getCategoryDescr(ExportSettingsCategory category) { + long itemsSize = 0; + int selectedTypes = 0; + List items = itemsMap.get(category); + for (int i = 0; i < items.size(); i++) { + ExportDataObject object = items.get(i); + if (selectedItemsMap.containsKey(object.getType())) { + selectedTypes++; + itemsSize += calculateItemsSize(object.getItems()); + } + } + + String description; + if (selectedTypes == 0) { + description = app.getString(R.string.shared_string_none); + } else if (selectedTypes == items.size()) { + description = app.getString(R.string.shared_string_all); + } else { + description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); + } + String formattedSize = AndroidUtils.formatSize(app, itemsSize); + return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); + } + + public static long calculateItemsSize(List items) { + long itemsSize = 0; + for (Object item : items) { + if (item instanceof FileSettingsItem) { + itemsSize += ((FileSettingsItem) item).getSize(); + } else if (item instanceof File) { + itemsSize += ((File) item).length(); + } + } + return itemsSize; + } + + private String getSelectedTypeDescr(ExportDataObject dataObject) { + long itemsSize = 0; + int selectedTypes = 0; + + List items = dataObject.getItems(); + List selectedItems = selectedItemsMap.get(dataObject.getType()); + if (selectedItems != null) { + for (int i = 0; i < items.size(); i++) { + Object object = items.get(i); + if (selectedItems.contains(object)) { + selectedTypes++; + if (object instanceof FileSettingsItem) { + itemsSize += ((FileSettingsItem) object).getSize(); + } else if (object instanceof File) { + itemsSize += ((File) object).length(); + } + } + } + } + + String description; + if (selectedTypes == 0) { + description = app.getString(R.string.shared_string_none); + } else if (selectedTypes == items.size()) { + description = app.getString(R.string.shared_string_all); + if (itemsSize == 0) { + description = app.getString(R.string.ltr_or_rtl_combine_via_comma, description, String.valueOf(items.size())); + } + } else { + description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); + } + String formattedSize = AndroidUtils.formatSize(app, itemsSize); + return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); + } + + interface OnItemSelectedListener { + + void onCategorySelected(ExportSettingsCategory type, boolean selected); + + void onTypeSelected(ExportSettingsType type, boolean selected); + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportProfileBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportProfileBottomSheet.java deleted file mode 100644 index 8d5b484dfb..0000000000 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportProfileBottomSheet.java +++ /dev/null @@ -1,429 +0,0 @@ -package net.osmand.plus.settings.fragments; - -import android.app.ProgressDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.res.ColorStateList; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ExpandableListView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.widget.SwitchCompat; -import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; - -import net.osmand.AndroidUtils; -import net.osmand.FileUtils; -import net.osmand.IndexConstants; -import net.osmand.PlatformUtil; -import net.osmand.plus.OsmandApplication; -import net.osmand.plus.R; -import net.osmand.plus.UiUtilities; -import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; -import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton; -import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; -import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; -import net.osmand.plus.settings.backend.ApplicationMode; -import net.osmand.plus.settings.backend.ExportSettingsType; -import net.osmand.plus.settings.backend.backup.FileSettingsItem; -import net.osmand.plus.settings.backend.backup.GlobalSettingsItem; -import net.osmand.plus.settings.backend.backup.ProfileSettingsItem; -import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsExportListener; -import net.osmand.plus.settings.backend.backup.SettingsItem; -import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet; - -import org.apache.commons.logging.Log; - -import java.io.File; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -public class ExportProfileBottomSheet extends BasePreferenceBottomSheet { - - public static final String TAG = ExportProfileBottomSheet.class.getSimpleName(); - - private static final Log LOG = PlatformUtil.getLog(ExportProfileBottomSheet.class); - - private static final String GLOBAL_EXPORT_KEY = "global_export_key"; - private static final String EXPORT_START_TIME_KEY = "export_start_time_key"; - private static final String EXPORTING_PROFILE_KEY = "exporting_profile_key"; - private static final String INCLUDE_ADDITIONAL_DATA_KEY = "include_additional_data_key"; - private static final String INCLUDE_GLOBAL_SETTINGS_KEY = "include_global_settings_key"; - private static final String PROGRESS_MAX_KEY = "progress_max_key"; - private static final String PROGRESS_VALUE_KEY = "progress_value_key"; - - private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yy", Locale.US); - - private OsmandApplication app; - private Map> dataList = new HashMap<>(); - private ExportImportSettingsAdapter adapter; - - private SettingsExportListener exportListener; - private ProgressDialog progress; - private int progressMax; - private int progressValue; - - private long exportStartTime; - - private boolean globalExport = false; - private boolean exportingProfile = false; - private boolean includeAdditionalData = false; - private boolean includeGlobalSettings = false; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - app = requiredMyApplication(); - if (savedInstanceState != null) { - globalExport = savedInstanceState.getBoolean(GLOBAL_EXPORT_KEY); - exportingProfile = savedInstanceState.getBoolean(EXPORTING_PROFILE_KEY); - includeAdditionalData = savedInstanceState.getBoolean(INCLUDE_ADDITIONAL_DATA_KEY); - includeGlobalSettings = savedInstanceState.getBoolean(INCLUDE_GLOBAL_SETTINGS_KEY); - exportStartTime = savedInstanceState.getLong(EXPORT_START_TIME_KEY); - progressMax = savedInstanceState.getInt(PROGRESS_MAX_KEY); - progressValue = savedInstanceState.getInt(PROGRESS_VALUE_KEY); - } - dataList = app.getSettingsHelper().getAdditionalData(globalExport); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putBoolean(GLOBAL_EXPORT_KEY, globalExport); - outState.putBoolean(EXPORTING_PROFILE_KEY, exportingProfile); - outState.putBoolean(INCLUDE_ADDITIONAL_DATA_KEY, includeAdditionalData); - outState.putBoolean(INCLUDE_GLOBAL_SETTINGS_KEY, includeGlobalSettings); - outState.putLong(EXPORT_START_TIME_KEY, exportStartTime); - outState.putInt(PROGRESS_MAX_KEY, progress.getMax()); - outState.putInt(PROGRESS_VALUE_KEY, progress.getProgress()); - } - - @Override - public void createMenuItems(Bundle savedInstanceState) { - final Context context = getContext(); - if (context == null) { - return; - } - if (globalExport) { - items.add(new TitleItem(getString(R.string.shared_string_export))); - - final BottomSheetItemWithCompoundButton[] globalSettingsItem = new BottomSheetItemWithCompoundButton[1]; - globalSettingsItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() - .setChecked(includeGlobalSettings) - .setTitle(getString(R.string.general_settings_2)) - .setLayoutId(R.layout.bottom_sheet_item_with_switch_no_icon) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - boolean checked = !globalSettingsItem[0].isChecked(); - globalSettingsItem[0].setChecked(checked); - includeGlobalSettings = checked; - } - }) - .create(); - items.add(globalSettingsItem[0]); - } else { - items.add(new TitleItem(getString(R.string.export_profile))); - ApplicationMode profile = getAppMode(); - int profileColor = profile.getIconColorInfo().getColor(nightMode); - int colorNoAlpha = ContextCompat.getColor(context, profileColor); - - Drawable backgroundIcon = UiUtilities.getColoredSelectableDrawable(context, colorNoAlpha, 0.3f); - Drawable[] layers = {new ColorDrawable(UiUtilities.getColorWithAlpha(colorNoAlpha, 0.10f)), backgroundIcon}; - - BaseBottomSheetItem profileItem = new BottomSheetItemWithCompoundButton.Builder() - .setChecked(true) - .setCompoundButtonColorId(profileColor) - .setButtonTintList(ColorStateList.valueOf(getResolvedColor(profileColor))) - .setDescription(BaseSettingsFragment.getAppModeDescription(context, profile)) - .setIcon(getIcon(profile.getIconRes(), profileColor)) - .setTitle(profile.toHumanString()) - .setBackground(new LayerDrawable(layers)) - .setLayoutId(R.layout.preference_profile_item_with_radio_btn) - .create(); - items.add(profileItem); - } - setupAdditionalItems(); - } - - private void setupAdditionalItems() { - if (!dataList.isEmpty()) { - LayoutInflater inflater = UiUtilities.getInflater(app, nightMode); - View additionalDataView = inflater.inflate(R.layout.bottom_sheet_item_additional_data, null); - ExpandableListView listView = additionalDataView.findViewById(R.id.list); - adapter = new ExportImportSettingsAdapter(app, nightMode, false); - - View listHeader = inflater.inflate(R.layout.item_header_export_expand_list, null); - final View topSwitchDivider = listHeader.findViewById(R.id.topSwitchDivider); - final View bottomSwitchDivider = listHeader.findViewById(R.id.bottomSwitchDivider); - final SwitchCompat switchItem = listHeader.findViewById(R.id.switchItem); - switchItem.setTextColor(getResources().getColor(nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light)); - switchItem.setChecked(includeAdditionalData); - switchItem.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - includeAdditionalData = !includeAdditionalData; - topSwitchDivider.setVisibility(includeAdditionalData ? View.VISIBLE : View.GONE); - bottomSwitchDivider.setVisibility(includeAdditionalData ? View.VISIBLE : View.GONE); - if (includeAdditionalData) { - adapter.updateSettingsList(app.getSettingsHelper().getAdditionalData(globalExport)); - adapter.selectAll(true); - } else { - adapter.selectAll(false); - adapter.clearSettingsList(); - } - updateSwitch(switchItem); - setupHeightAndBackground(getView()); - } - }); - listView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { - @Override - public void onGroupExpand(int i) { - setupHeightAndBackground(getView()); - } - }); - - updateSwitch(switchItem); - listView.addHeaderView(listHeader); - listView.setAdapter(adapter); - final SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder() - .setCustomView(additionalDataView) - .create(); - items.add(titleItem); - } - } - - private void updateSwitch(View view) { - if (includeAdditionalData) { - UiUtilities.setMargins(view, 0, 0, 0, 0); - view.setPadding(AndroidUtils.dpToPx(app, 32), 0, AndroidUtils.dpToPx(app, 32), 0); - } else { - UiUtilities.setMargins(view, AndroidUtils.dpToPx(app, 16), 0, AndroidUtils.dpToPx(app, 16), 0); - view.setPadding(AndroidUtils.dpToPx(app, 16), 0, AndroidUtils.dpToPx(app, 16), 0); - } - } - - @Override - protected int getRightBottomButtonTextId() { - return R.string.shared_string_export; - } - - @Override - protected void onRightBottomButtonClick() { - prepareFile(); - } - - @Override - protected int getDismissButtonTextId() { - return R.string.shared_string_cancel; - } - - @Override - protected boolean useScrollableItemsContainer() { - return false; - } - - @Override - protected boolean useExpandableList() { - return true; - } - - @Override - public void onResume() { - super.onResume(); - checkExportingFile(); - } - - @Override - public void onPause() { - super.onPause(); - if (exportingProfile) { - File file = getExportFile(); - app.getSettingsHelper().updateExportListener(file, null); - } - } - - private void setGlobalExport(boolean globalExport) { - this.globalExport = globalExport; - } - - private List prepareSettingsItemsForExport() { - List settingsItems = new ArrayList<>(); - if (!globalExport) { - settingsItems.add(new ProfileSettingsItem(app, getAppMode())); - } - if (includeGlobalSettings) { - settingsItems.add(new GlobalSettingsItem(app.getSettings())); - } - if (includeAdditionalData) { - settingsItems.addAll(app.getSettingsHelper().prepareAdditionalSettingsItems(adapter.getData())); - } - return settingsItems; - } - - private void prepareFile() { - if (app != null) { - exportingProfile = true; - exportStartTime = System.currentTimeMillis(); - showExportProgressDialog(); - File tempDir = FileUtils.getTempDir(app); - String fileName = getFileName(); - List items = prepareSettingsItemsForExport(); - progress.setMax(getMaxProgress(items)); - app.getSettingsHelper().exportSettings(tempDir, fileName, getSettingsExportListener(), items, true); - } - } - - private int getMaxProgress(List items) { - long maxProgress = 0; - for (SettingsItem item : items) { - if (item instanceof FileSettingsItem) { - maxProgress += ((FileSettingsItem) item).getSize(); - } - } - return (int) maxProgress / (1 << 20); - } - - private String getFileName() { - if (globalExport) { - if (exportStartTime == 0) { - exportStartTime = System.currentTimeMillis(); - } - return "Export_" + DATE_FORMAT.format(new Date(exportStartTime)); - } else { - return getAppMode().toHumanString(); - } - } - - private void showExportProgressDialog() { - Context context = getContext(); - if (context == null) { - return; - } - if (progress != null) { - progress.dismiss(); - } - progress = new ProgressDialog(context); - progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progress.setCancelable(true); - progress.setTitle(app.getString(R.string.shared_string_export)); - progress.setMessage(app.getString(R.string.shared_string_preparing)); - progress.setButton(DialogInterface.BUTTON_NEGATIVE, app.getString(R.string.shared_string_cancel), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - cancelExport(); - } - }); - progress.setOnCancelListener(new DialogInterface.OnCancelListener() { - @Override - public void onCancel(DialogInterface dialog) { - cancelExport(); - } - }); - progress.show(); - } - - private void cancelExport() { - app.getSettingsHelper().cancelExportForFile(getExportFile()); - progress.dismiss(); - dismiss(); - } - - private SettingsExportListener getSettingsExportListener() { - if (exportListener == null) { - exportListener = new SettingsExportListener() { - - @Override - public void onSettingsExportFinished(@NonNull File file, boolean succeed) { - dismissExportProgressDialog(); - exportingProfile = false; - if (succeed) { - shareProfile(file); - } else { - app.showToastMessage(R.string.export_profile_failed); - } - } - - @Override - public void onSettingsExportProgressUpdate(int value) { - progress.setProgress(value); - } - }; - } - return exportListener; - } - - private void checkExportingFile() { - if (exportingProfile) { - File file = getExportFile(); - boolean fileExporting = app.getSettingsHelper().isFileExporting(file); - if (fileExporting) { - showExportProgressDialog(); - progress.setMax(progressMax); - progress.setProgress(progressValue); - app.getSettingsHelper().updateExportListener(file, getSettingsExportListener()); - } else if (file.exists()) { - dismissExportProgressDialog(); - shareProfile(file); - } - } - } - - private void dismissExportProgressDialog() { - FragmentActivity activity = getActivity(); - if (progress != null && activity != null && AndroidUtils.isActivityNotDestroyed(activity)) { - progress.dismiss(); - } - } - - private File getExportFile() { - File tempDir = FileUtils.getTempDir(app); - String fileName = getFileName(); - return new File(tempDir, fileName + IndexConstants.OSMAND_SETTINGS_FILE_EXT); - } - - private void shareProfile(@NonNull File file) { - try { - final Intent sendIntent = new Intent(); - sendIntent.setAction(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_SUBJECT, file.getName()); - sendIntent.putExtra(Intent.EXTRA_STREAM, AndroidUtils.getUriForFile(getMyApplication(), file)); - sendIntent.setType("*/*"); - sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - startActivity(sendIntent); - dismiss(); - } catch (Exception e) { - Toast.makeText(requireContext(), R.string.export_profile_failed, Toast.LENGTH_SHORT).show(); - LOG.error("Share profile error", e); - } - } - - public static boolean showInstance(@NonNull FragmentManager fragmentManager, - Fragment target, @NonNull ApplicationMode appMode, - boolean globalExport) { - try { - ExportProfileBottomSheet fragment = new ExportProfileBottomSheet(); - fragment.setAppMode(appMode); - fragment.setGlobalExport(globalExport); - fragment.setTargetFragment(target, 0); - fragment.show(fragmentManager, TAG); - return true; - } catch (RuntimeException e) { - return false; - } - } -} diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java new file mode 100644 index 0000000000..79f7159909 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -0,0 +1,405 @@ +package net.osmand.plus.settings.fragments; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ExpandableListView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.Toolbar; +import androidx.core.content.ContextCompat; +import androidx.core.view.ViewCompat; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; + +import com.google.android.material.appbar.CollapsingToolbarLayout; + +import net.osmand.AndroidUtils; +import net.osmand.FileUtils; +import net.osmand.IndexConstants; +import net.osmand.PlatformUtil; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; +import net.osmand.plus.base.BaseOsmAndFragment; +import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.ExportSettingsCategory; +import net.osmand.plus.settings.backend.ExportSettingsType; +import net.osmand.plus.settings.backend.backup.FileSettingsItem; +import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsExportListener; +import net.osmand.plus.settings.backend.backup.SettingsItem; +import net.osmand.plus.settings.fragments.ExportImportSettingsAdapter.OnItemSelectedListener; +import net.osmand.plus.widgets.TextViewEx; + +import org.apache.commons.logging.Log; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static net.osmand.plus.settings.fragments.BaseSettingsFragment.APP_MODE_KEY; + +public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItemSelectedListener { + + public static final String TAG = ImportSettingsFragment.class.getSimpleName(); + public static final Log LOG = PlatformUtil.getLog(ImportSettingsFragment.class.getSimpleName()); + + private static final String EXPORT_SETTINGS_TAG = "import_settings_tag"; + private static final String GLOBAL_EXPORT_KEY = "global_export_key"; + private static final String EXPORT_START_TIME_KEY = "export_start_time_key"; + private static final String EXPORTING_STARTED_KEY = "exporting_started_key"; + private static final String INCLUDE_ADDITIONAL_DATA_KEY = "include_additional_data_key"; + private static final String INCLUDE_GLOBAL_SETTINGS_KEY = "include_global_settings_key"; + private static final String PROGRESS_MAX_KEY = "progress_max_key"; + private static final String PROGRESS_VALUE_KEY = "progress_value_key"; + + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yy", Locale.US); + + private OsmandApplication app; + private Map> dataList; + + private ProgressDialog progress; + private ApplicationMode appMode; + private SettingsExportListener exportListener; + + private TextViewEx fileSize; + private LinearLayout buttonsContainer; + private ExpandableListView expandableList; + private ExportImportSettingsAdapter adapter; + + private int progressMax; + private int progressValue; + + private long exportStartTime; + + private boolean nightMode; + private boolean globalExport; + private boolean exportingStarted; + + @Override + public int getStatusBarColorId() { + return nightMode ? R.color.status_bar_color_dark : R.color.status_bar_color_light; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + app = requireMyApplication(); + nightMode = !app.getSettings().isLightContent(); + if (savedInstanceState != null) { + appMode = ApplicationMode.valueOfStringKey(savedInstanceState.getString(APP_MODE_KEY), null); + globalExport = savedInstanceState.getBoolean(GLOBAL_EXPORT_KEY); + exportingStarted = savedInstanceState.getBoolean(EXPORTING_STARTED_KEY); + exportStartTime = savedInstanceState.getLong(EXPORT_START_TIME_KEY); + progressMax = savedInstanceState.getInt(PROGRESS_MAX_KEY); + progressValue = savedInstanceState.getInt(PROGRESS_VALUE_KEY); + } + dataList = app.getSettingsHelper().getAdditionalData(globalExport); + + requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { + @Override + public void handleOnBackPressed() { + showExitDialog(); + } + }); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + LayoutInflater themedInflater = UiUtilities.getInflater(app, nightMode); + View root = themedInflater.inflate(R.layout.fragment_import, container, false); + AndroidUtils.addStatusBarPadding21v(app, root); + + fileSize = root.findViewById(R.id.file_size); + expandableList = root.findViewById(R.id.list); + buttonsContainer = root.findViewById(R.id.buttons_container); + + Toolbar toolbar = root.findViewById(R.id.toolbar); + setupToolbar(toolbar); + ViewCompat.setNestedScrollingEnabled(expandableList, true); + View header = themedInflater.inflate(R.layout.list_item_description_header, null); + expandableList.addHeaderView(header); + + TextViewEx continueBtn = root.findViewById(R.id.continue_button); + continueBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + prepareFile(); + } + }); + ViewTreeObserver treeObserver = buttonsContainer.getViewTreeObserver(); + treeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (buttonsContainer != null) { + ViewTreeObserver vts = buttonsContainer.getViewTreeObserver(); + int height = buttonsContainer.getMeasuredHeight(); + expandableList.setPadding(0, 0, 0, height); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + vts.removeOnGlobalLayoutListener(this); + } else { + vts.removeGlobalOnLayoutListener(this); + } + } + } + }); + + adapter = new ExportImportSettingsAdapter(app, this, nightMode); + adapter.updateSettingsList(dataList); + expandableList.setAdapter(adapter); + + CollapsingToolbarLayout toolbarLayout = root.findViewById(R.id.toolbar_layout); + toolbarLayout.setTitle(getString(R.string.shared_string_export)); + TextView description = header.findViewById(R.id.description); + description.setText(R.string.select_data_to_export); + + return root; + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(GLOBAL_EXPORT_KEY, globalExport); + outState.putBoolean(EXPORTING_STARTED_KEY, exportingStarted); + outState.putLong(EXPORT_START_TIME_KEY, exportStartTime); + outState.putString(APP_MODE_KEY, appMode.getStringKey()); + if (progress != null) { + outState.putInt(PROGRESS_MAX_KEY, progress.getMax()); + outState.putInt(PROGRESS_VALUE_KEY, progress.getProgress()); + } + } + + @Override + public void onResume() { + super.onResume(); + checkExportingFile(); + } + + @Override + public void onPause() { + super.onPause(); + if (exportingStarted) { + File file = getExportFile(); + app.getSettingsHelper().updateExportListener(file, null); + } + } + + private void dismissFragment() { + FragmentManager fm = getFragmentManager(); + if (fm != null && !fm.isStateSaved()) { + getFragmentManager().popBackStack(EXPORT_SETTINGS_TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE); + } + } + + public void showExitDialog() { + Context themedContext = UiUtilities.getThemedContext(getActivity(), nightMode); + AlertDialog.Builder dismissDialog = new AlertDialog.Builder(themedContext); + dismissDialog.setTitle(getString(R.string.shared_string_dismiss)); + dismissDialog.setMessage(getString(R.string.exit_without_saving)); + dismissDialog.setNegativeButton(R.string.shared_string_cancel, null); + dismissDialog.setPositiveButton(R.string.shared_string_exit, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dismissFragment(); + } + }); + dismissDialog.show(); + } + + private void setupToolbar(Toolbar toolbar) { + int color = ContextCompat.getColor(app, nightMode ? R.color.active_buttons_and_links_text_dark : R.color.active_buttons_and_links_text_light); + toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_action_close, color)); + toolbar.setNavigationContentDescription(R.string.shared_string_close); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showExitDialog(); + } + }); + } + + private void updateFileSize() { + long itemsSize = ExportImportSettingsAdapter.calculateItemsSize(adapter.getData()); + String size = itemsSize != 0 ? AndroidUtils.formatSize(app, itemsSize) : ""; + fileSize.setText(size); + } + + @Override + public void onCategorySelected(ExportSettingsCategory type, boolean selected) { + updateFileSize(); + } + + @Override + public void onTypeSelected(ExportSettingsType type, boolean selected) { + updateFileSize(); + } + + private void prepareFile() { + if (app != null) { + exportingStarted = true; + exportStartTime = System.currentTimeMillis(); + showExportProgressDialog(); + File tempDir = FileUtils.getTempDir(app); + String fileName = getFileName(); + List items = app.getSettingsHelper().prepareAdditionalSettingsItems(adapter.getData()); + progress.setMax(getMaxProgress(items)); + app.getSettingsHelper().exportSettings(tempDir, fileName, getSettingsExportListener(), items, true); + } + } + + private int getMaxProgress(List items) { + long maxProgress = 0; + for (SettingsItem item : items) { + if (item instanceof FileSettingsItem) { + maxProgress += ((FileSettingsItem) item).getSize(); + } + } + return (int) maxProgress / (1 << 20); + } + + private String getFileName() { + if (globalExport) { + if (exportStartTime == 0) { + exportStartTime = System.currentTimeMillis(); + } + return "Export_" + DATE_FORMAT.format(new Date(exportStartTime)); + } else { + return appMode.toHumanString(); + } + } + + private void showExportProgressDialog() { + Context context = getContext(); + if (context == null) { + return; + } + if (progress != null) { + progress.dismiss(); + } + progress = new ProgressDialog(context); + progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progress.setCancelable(true); + progress.setTitle(app.getString(R.string.shared_string_export)); + progress.setMessage(app.getString(R.string.shared_string_preparing)); + progress.setButton(DialogInterface.BUTTON_NEGATIVE, app.getString(R.string.shared_string_cancel), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + cancelExport(); + } + }); + progress.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + cancelExport(); + } + }); + progress.show(); + } + + private void cancelExport() { + app.getSettingsHelper().cancelExportForFile(getExportFile()); + progress.dismiss(); + dismissFragment(); + } + + private SettingsExportListener getSettingsExportListener() { + if (exportListener == null) { + exportListener = new SettingsExportListener() { + + @Override + public void onSettingsExportFinished(@NonNull File file, boolean succeed) { + dismissExportProgressDialog(); + exportingStarted = false; + if (succeed) { + shareProfile(file); + } else { + app.showToastMessage(R.string.export_profile_failed); + } + } + + @Override + public void onSettingsExportProgressUpdate(int value) { + progress.setProgress(value); + } + }; + } + return exportListener; + } + + private void checkExportingFile() { + if (exportingStarted) { + File file = getExportFile(); + boolean fileExporting = app.getSettingsHelper().isFileExporting(file); + if (fileExporting) { + showExportProgressDialog(); + progress.setMax(progressMax); + progress.setProgress(progressValue); + app.getSettingsHelper().updateExportListener(file, getSettingsExportListener()); + } else if (file.exists()) { + dismissExportProgressDialog(); + shareProfile(file); + } + } + } + + private void dismissExportProgressDialog() { + FragmentActivity activity = getActivity(); + if (progress != null && activity != null && AndroidUtils.isActivityNotDestroyed(activity)) { + progress.dismiss(); + } + } + + private File getExportFile() { + File tempDir = FileUtils.getTempDir(app); + String fileName = getFileName(); + return new File(tempDir, fileName + IndexConstants.OSMAND_SETTINGS_FILE_EXT); + } + + private void shareProfile(@NonNull File file) { + try { + final Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_SUBJECT, file.getName()); + sendIntent.putExtra(Intent.EXTRA_STREAM, AndroidUtils.getUriForFile(getMyApplication(), file)); + sendIntent.setType("*/*"); + sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + startActivity(sendIntent); + dismissFragment(); + } catch (Exception e) { + Toast.makeText(requireContext(), R.string.export_profile_failed, Toast.LENGTH_SHORT).show(); + LOG.error("Share profile error", e); + } + } + + public static boolean showInstance(@NonNull FragmentManager fragmentManager, @NonNull ApplicationMode appMode, boolean globalExport) { + try { + ExportSettingsFragment fragment = new ExportSettingsFragment(); + fragment.appMode = appMode; + fragment.globalExport = globalExport; + fragmentManager.beginTransaction(). + replace(R.id.fragmentContainer, fragment, TAG) + .addToBackStack(EXPORT_SETTINGS_TAG) + .commitAllowingStateLoss(); + return true; + } catch (RuntimeException e) { + return false; + } + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java index 443cd583f0..84c1b295a2 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java @@ -22,13 +22,13 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; +import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; import androidx.fragment.app.FragmentManager; import com.google.android.material.appbar.CollapsingToolbarLayout; import net.osmand.AndroidUtils; -import net.osmand.IProgress; import net.osmand.PlatformUtil; import net.osmand.map.ITileSource; import net.osmand.map.TileSourceManager.TileSourceTemplate; @@ -48,6 +48,7 @@ import net.osmand.plus.osmedit.OsmNotesPoint; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; +import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem; import net.osmand.plus.settings.backend.backup.FavoritesSettingsItem; @@ -66,38 +67,44 @@ import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask; import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType; import net.osmand.plus.settings.backend.backup.SettingsItem; import net.osmand.plus.settings.backend.backup.SettingsItemType; +import net.osmand.plus.settings.fragments.ExportImportSettingsAdapter.OnItemSelectedListener; import net.osmand.plus.widgets.TextViewEx; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; import java.io.File; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -public class ImportSettingsFragment extends BaseOsmAndFragment { +public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItemSelectedListener { public static final String TAG = ImportSettingsFragment.class.getSimpleName(); public static final Log LOG = PlatformUtil.getLog(ImportSettingsFragment.class.getSimpleName()); + + protected static final String IMPORT_SETTINGS_TAG = "import_settings_tag"; private static final String DUPLICATES_START_TIME_KEY = "duplicates_start_time"; private static final long MIN_DELAY_TIME_MS = 500; - static final String IMPORT_SETTINGS_TAG = "import_settings_tag"; + private OsmandApplication app; + + private File file; + private SettingsHelper settingsHelper; + private List settingsItems; + private Map> dataList; + private ExportImportSettingsAdapter adapter; private ExpandableListView expandableList; - private TextViewEx selectBtn; private TextView description; - private List settingsItems; - private File file; - private boolean allSelected; - private boolean nightMode; private LinearLayout buttonsContainer; private ProgressBar progressBar; + private TextViewEx fileSize; + private TextViewEx fileSizeDescr; private CollapsingToolbarLayout toolbarLayout; - private SettingsHelper settingsHelper; + + private boolean nightMode; private long duplicateStartTime; public static void showInstance(@NonNull FragmentManager fm, @NonNull List settingsItems, @NonNull File file) { @@ -134,11 +141,13 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { View root = inflater.inflate(R.layout.fragment_import, container, false); Toolbar toolbar = root.findViewById(R.id.toolbar); TextViewEx continueBtn = root.findViewById(R.id.continue_button); + fileSize = root.findViewById(R.id.file_size); toolbarLayout = root.findViewById(R.id.toolbar_layout); - selectBtn = root.findViewById(R.id.select_button); expandableList = root.findViewById(R.id.list); buttonsContainer = root.findViewById(R.id.buttons_container); progressBar = root.findViewById(R.id.progress_bar); + fileSizeDescr = root.findViewById(R.id.file_size_descr); + fileSizeDescr.setText(R.string.file_size_needed_for_import); setupToolbar(toolbar); ViewCompat.setNestedScrollingEnabled(expandableList, true); View header = inflater.inflate(R.layout.list_item_description_header, null); @@ -155,14 +164,6 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } } }); - selectBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - allSelected = !allSelected; - selectBtn.setText(allSelected ? R.string.shared_string_deselect_all : R.string.shared_string_select_all); - adapter.selectAll(allSelected); - } - }); if (Build.VERSION.SDK_INT >= 21) { AndroidUtils.addStatusBarPadding21v(app, root); } @@ -207,10 +208,10 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } } - adapter = new ExportImportSettingsAdapter(app, nightMode, true); - Map> itemsMap = new HashMap<>(); + adapter = new ExportImportSettingsAdapter(app, this, nightMode); + Map> itemsMap = new HashMap<>(); if (settingsItems != null) { - itemsMap = SettingsHelper.getSettingsToOperate(settingsItems, false); + itemsMap = SettingsHelper.getSettingsToOperateByCategory(settingsItems, false); adapter.updateSettingsList(itemsMap); } expandableList.setAdapter(adapter); @@ -224,7 +225,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } else { toolbarLayout.setTitle(getString(R.string.shared_string_import)); } - if (itemsMap.size() == 1 && itemsMap.containsKey(ExportSettingsType.PROFILE)) { + if (itemsMap.size() == 1 && itemsMap.containsKey(ExportSettingsCategory.SETTINGS)) { expandableList.expandGroup(0); } } @@ -235,15 +236,6 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { outState.putLong(DUPLICATES_START_TIME_KEY, duplicateStartTime); } - @Override - public void onResume() { - super.onResume(); - Activity activity = getActivity(); - if (activity instanceof MapActivity) { - ((MapActivity) activity).closeDrawer(); - } - } - private void updateUi(int toolbarTitleRes, int descriptionRes) { if (file != null) { String fileName = file.getName(); @@ -296,31 +288,6 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } } - private static class ReloadIndexesTack extends AsyncTask { - - private final WeakReference mapActivityRef; - private final OsmandApplication app; - - ReloadIndexesTack(@NonNull MapActivity mapActivity) { - this.mapActivityRef = new WeakReference<>(mapActivity); - this.app = mapActivity.getMyApplication(); - } - - @Override - protected Void doInBackground(Void[] params) { - app.getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, new ArrayList()); - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - MapActivity mapActivity = mapActivityRef.get(); - if (mapActivity != null) { - mapActivity.refreshMap(); - } - } - } - private SettingsHelper.CheckDuplicatesListener getDuplicatesListener() { return new SettingsHelper.CheckDuplicatesListener() { @Override @@ -544,9 +511,8 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } private void setupToolbar(Toolbar toolbar) { - toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_action_close, nightMode - ? getResources().getColor(R.color.active_buttons_and_links_text_dark) - : getResources().getColor(R.color.active_buttons_and_links_text_light))); + int color = ContextCompat.getColor(app, nightMode ? R.color.active_buttons_and_links_text_dark : R.color.active_buttons_and_links_text_light); + toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_action_close, color)); toolbar.setNavigationContentDescription(R.string.shared_string_close); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override @@ -559,4 +525,20 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { public void setFile(File file) { this.file = file; } + + private void updateFileSize() { + long itemsSize = ExportImportSettingsAdapter.calculateItemsSize(adapter.getData()); + String size = itemsSize != 0 ? AndroidUtils.formatSize(app, itemsSize) : ""; + fileSize.setText(size); + } + + @Override + public void onCategorySelected(ExportSettingsCategory type, boolean selected) { + updateFileSize(); + } + + @Override + public void onTypeSelected(ExportSettingsType type, boolean selected) { + updateFileSize(); + } } diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java index d7e1f65288..05a2b94d2f 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/MainSettingsFragment.java @@ -153,7 +153,7 @@ public class MainSettingsFragment extends BaseSettingsFragment { if (mapActivity != null) { ApplicationMode mode = getSelectedAppMode(); FragmentManager fragmentManager = mapActivity.getSupportFragmentManager(); - ExportProfileBottomSheet.showInstance(fragmentManager, this, mode, true); + ExportSettingsFragment.showInstance(fragmentManager, mode, true); } } return super.onPreferenceClick(preference); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java new file mode 100644 index 0000000000..d5776a7f45 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java @@ -0,0 +1,37 @@ +package net.osmand.plus.settings.fragments; + +import android.os.AsyncTask; + +import androidx.annotation.NonNull; + +import net.osmand.IProgress; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.activities.MapActivity; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; + +class ReloadIndexesTack extends AsyncTask { + + private final WeakReference mapActivityRef; + private final OsmandApplication app; + + ReloadIndexesTack(@NonNull MapActivity mapActivity) { + this.mapActivityRef = new WeakReference<>(mapActivity); + this.app = mapActivity.getMyApplication(); + } + + @Override + protected Void doInBackground(Void[] params) { + app.getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, new ArrayList()); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + MapActivity mapActivity = mapActivityRef.get(); + if (mapActivity != null) { + mapActivity.refreshMap(); + } + } +} From 9c85def8e46158fea2976233be8f000bc780b609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Mon, 16 Nov 2020 08:55:06 +0000 Subject: [PATCH 003/198] Spelling: Filename --- OsmAnd/res/values/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 07a55e3d92..3c37d893d0 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -105,7 +105,7 @@ Will pause track logging when the app is killed (via recent apps). (OsmAnd background indication disappears from the Android notification bar.) REC %s track files selected - File name + Filename Only the route line will be saved, the waypoints will be deleted. Simplified track Change route type after @@ -558,7 +558,7 @@ Clear %1$s? Revert Track saved - File name is empty + Empty filename Estimates arrival time for unknown road types, and limits speed for all roads (may affect routing) White Swap %1$s and %2$s @@ -1332,7 +1332,7 @@ Save the points either as route points or as a line. Select navigation profile Please add at least one point. - GPX file name: + GPX filename: Show on map after saving Browse the map and add points Measure distance @@ -3823,7 +3823,7 @@ Number of contributors Number of edits Report for - File name contains illegal character + Iillegal character in filename Quick action Action %d Screen %d From 9d64f22231dafc439e9b6c4e497e3c40da384d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Mon, 16 Nov 2020 08:55:41 +0000 Subject: [PATCH 004/198] Typo --- OsmAnd/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 3c37d893d0..0ac16d5e35 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -3823,7 +3823,7 @@ Number of contributors Number of edits Report for - Iillegal character in filename + Illegal character in filename Quick action Action %d Screen %d From 637df1cbfc8a6802924f80f8af3a0cebc8682640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Mon, 16 Nov 2020 09:05:01 +0000 Subject: [PATCH 005/198] Consistent (non-)use of slashes in strings --- OsmAnd/res/values/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 07a55e3d92..ec1d7e7f6f 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -75,13 +75,13 @@ Payment will be charged to your AppGallery account at the confirmation of purchase.\n\nSubscription automatically renews unless it is canceled before the renewal date. Your account will be charged for renewal period (month/three month/year) only on the renewal date.\n\nYou can manage and cancel your subscriptions by going to your AppGallery settings. Subscription charged per selected period. Cancel it on AppGallery at any time. Thank you for purchasing \'Contour lines\' - Start/finish icons + Start and finish icons Name: A – Z Name: Z – A Last modified • Updated "Plan a route" function: allows using different navigation types per segment and the inclusion of tracks\n\n - • New "Appearance" menu for tracks: select color, thickness, display direction arrows, start/finish icons\n\n + • New "Appearance" menu for tracks: select color, thickness, display direction arrows, start and finish icons\n\n • Improved visibility of bicycle nodes.\n\n • Tracks are now tappable, have context menu with basic info.\n\n • Improved "Search" algorithms\n\n @@ -267,11 +267,11 @@ The action button switches between selected profiles. Back to editing Restore default items order - Add / Edit Favorite + Add or edit favorite Parking positions - Create / Edit POI + Create or edit POI Button showing or hiding public transport on the map. - Show/hide public transport + Show or hide public transport Show public transport Hide public transport @@ -373,7 +373,7 @@ A button to show or hide terrain layer on the map. Show terrain Hide terrain - Show / hide terrain + Show or hide terrain Slopes %1$s of %2$s The route will be recalculated if the distance from the route to the current location is more than selected value. @@ -1170,7 +1170,7 @@ Adds initial stop Move destination up, and create it Show closed notes - Show/hide OSM notes on the map. + Show or hide OSM notes on the map. GPX - suitable for export to JOSM or other OSM editors. OSC - suitable for export to OSM. GPX file @@ -3945,9 +3945,9 @@ No cobblestone or sett Avoids cobblestone and sett Add at least one item to the list in the \'Quick action\' settings - Alpine/downhill ski + Alpine and downhill skiing Slopes for alpine or downhill skiing and access to ski lifts. - Cross country/nordic ski + Cross country and nordic skiing Trails for nordic or cross-country skiing. Ski touring Routes for ski touring. From fac3add4e7f5f9b6b0f37b5801c47df95246afa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Mon, 16 Nov 2020 09:39:28 +0000 Subject: [PATCH 006/198] Login strings reworked --- OsmAnd/res/values/strings.xml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 07a55e3d92..3a3bb2916c 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -14,10 +14,10 @@ Search history I already have an account Create new account - Photos are provided by open data project OpenPlaceReviews.org. In order to upload your photos you need to sign up on website. + Log in on the open data project website OpenPlaceReviews.org to upload even more photos. Register on\nOpenPlaceReviews.org Add photo - You can log in using the safe OAuth method or use your login and password. + Log in using the safe OAuth method or use your username and password. Comment OSM Note Close OSM Note Trackable means that the trace will not show up in any public listings but trackpoints from it will still be available through the public GPS API with timestamps. Other users will only be able to download processed trackpoints from your trace which can\'t be associated with you directly. @@ -32,15 +32,15 @@ OsmAnd Live subscription has been expired There is a problem with your subscription. Click the button to go to the Google Play subscription settings to fix your payment method. Manage subscription - Login + Username Password Account - Use login and password - You need to login to upload new or modified changes. \n\nYou can log in using the safe OAuth method or use your login and password. + Log in with username and password + Log in to upload new or modified changes,\n\neither with OAuth or using your username and password. You can view all your not yet uploaded edits or OSM bugs in %1$s. Uploaded points don’t show in OsmAnd. - Sign in with OpenStreetMap - Login to OpenStreetMap.org - Login to OpenStreetMap + Log in with OpenStreetMap + Login for OpenStreetMap.org + Login for OpenStreetMap These plugin setting are global, and apply to all profiles You need to add at least two points Travel @@ -59,10 +59,10 @@ Graph Use 2-phase A* routing algorithm File is already imported in OsmAnd - Logout successful + Logged out Clear OpenStreetMap OAuth token Log in via OAuth - Perform an OAuth Login to use osmedit features + Log in with OAuth to use osmedit features Switch to Java (safe) Public Transport routing calculation Native Public Transport development Recalculates only the initial part of the route. Can be used for long trips. From 77a7b03144743b1468803e134d7bc5300604e060 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 16 Nov 2020 16:55:06 +0200 Subject: [PATCH 007/198] Fix crash on taping "Upload" in My places. --- .../SendOsmNoteBottomSheetFragment.java | 15 ++++++++-- .../dialogs/SendPoiBottomSheetFragment.java | 28 ++++++++++++------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java index 407e8c0b5f..8cd61909e4 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java @@ -1,5 +1,6 @@ package net.osmand.plus.osmedit.dialogs; +import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.ContextThemeWrapper; @@ -24,6 +25,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; +import net.osmand.plus.dialogs.ProgressDialogFragment; import net.osmand.plus.osmedit.OsmNotesPoint; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter; @@ -171,9 +173,16 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen @Override protected void onRightBottomButtonClick() { - ProgressDialogPoiUploader progressDialogPoiUploader; - progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) getActivity()); - progressDialogPoiUploader.showProgressDialog(poi, false, uploadAnonymously.isChecked()); + ProgressDialogPoiUploader progressDialogPoiUploader = null; + Activity activity = getActivity(); + if (activity instanceof MapActivity) { + progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) activity); + } else if (getParentFragment() instanceof ProgressDialogFragment) { + progressDialogPoiUploader = (ProgressDialogPoiUploader) getParentFragment(); + } + if (progressDialogPoiUploader != null) { + progressDialogPoiUploader.showProgressDialog(poi, false, uploadAnonymously.isChecked()); + } dismiss(); } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index 7755568e43..dd862d0608 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -1,5 +1,6 @@ package net.osmand.plus.osmedit.dialogs; +import android.app.Activity; import android.os.Bundle; import android.view.ContextThemeWrapper; import android.view.View; @@ -20,6 +21,7 @@ import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; +import net.osmand.plus.dialogs.ProgressDialogFragment; import net.osmand.plus.osmedit.OpenstreetmapPoint; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.settings.backend.OsmandSettings; @@ -109,19 +111,25 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { @Override protected void onRightBottomButtonClick() { - final ProgressDialogPoiUploader progressDialogPoiUploader; - progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) getActivity()); - - String comment = messageEditText.getText().toString(); - if (comment.length() > 0) { - for (OsmPoint osmPoint : poi) { - if (osmPoint.getGroup() == OsmPoint.Group.POI) { - ((OpenstreetmapPoint) osmPoint).setComment(comment); - break; + ProgressDialogPoiUploader progressDialogPoiUploader = null; + Activity activity = getActivity(); + if (activity instanceof MapActivity) { + progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) activity); + } else if (getParentFragment() instanceof ProgressDialogFragment) { + progressDialogPoiUploader = (ProgressDialogPoiUploader) getParentFragment(); + } + if (progressDialogPoiUploader != null) { + String comment = messageEditText.getText().toString(); + if (comment.length() > 0) { + for (OsmPoint osmPoint : poi) { + if (osmPoint.getGroup() == OsmPoint.Group.POI) { + ((OpenstreetmapPoint) osmPoint).setComment(comment); + break; + } } } + progressDialogPoiUploader.showProgressDialog(poi, closeChangeSet.isChecked(), false); } - progressDialogPoiUploader.showProgressDialog(poi, closeChangeSet.isChecked(), false); dismiss(); } From 02da17f726d93fb3340d2a4a12e6be8333d7fed7 Mon Sep 17 00:00:00 2001 From: nazar-kutz Date: Mon, 16 Nov 2020 17:25:02 +0200 Subject: [PATCH 008/198] Small refactoring of icon receiving and setup shareIcon to white color in all themes --- .../plus/search/QuickSearchDialogFragment.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java index 3c55261668..9badea394e 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java @@ -259,6 +259,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final MapActivity mapActivity = getMapActivity(); + final UiUtilities iconsCache = app.getUIUtilities(); final View view = inflater.inflate(R.layout.search_dialog_fragment, container, false); toolbarController = new QuickSearchToolbarController(); @@ -325,9 +326,9 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC buttonToolbarView = view.findViewById(R.id.button_toolbar_layout); buttonToolbarImage = (ImageView) view.findViewById(R.id.buttonToolbarImage); - buttonToolbarImage.setImageDrawable(app.getUIUtilities().getThemedIcon(R.drawable.ic_action_marker_dark)); + buttonToolbarImage.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_marker_dark)); buttonToolbarFilter = (ImageButton) view.findViewById(R.id.filterButton); - buttonToolbarFilter.setImageDrawable(app.getUIUtilities().getThemedIcon(R.drawable.ic_action_filter)); + buttonToolbarFilter.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_filter)); buttonToolbarFilter.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -474,7 +475,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC if (!app.getSettings().isLightContent()) { toolbar.setBackgroundColor(ContextCompat.getColor(mapActivity, R.color.app_bar_color_dark)); } - Drawable icBack = app.getUIUtilities().getThemedIcon(AndroidUtils.getNavigationIconResId(app)); + Drawable icBack = iconsCache.getThemedIcon(AndroidUtils.getNavigationIconResId(app)); toolbar.setNavigationIcon(icBack); toolbar.setNavigationContentDescription(R.string.access_shared_string_navigate_up); toolbar.setNavigationOnClickListener( @@ -489,7 +490,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC ); toolbarEdit = (Toolbar) view.findViewById(R.id.toolbar_edit); - toolbarEdit.setNavigationIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_remove_dark)); + toolbarEdit.setNavigationIcon(iconsCache.getIcon(R.drawable.ic_action_remove_dark)); toolbarEdit.setNavigationContentDescription(R.string.shared_string_cancel); toolbarEdit.setNavigationOnClickListener( new OnClickListener() { @@ -501,8 +502,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC ); titleEdit = (TextView) view.findViewById(R.id.titleEdit); - Drawable shareIcon = app.getUIUtilities().getIcon(R.drawable.ic_action_gshare_dark, - nightMode ? R.color.text_color_secondary_dark : R.color.text_color_secondary_light); + Drawable shareIcon = iconsCache.getIcon(R.drawable.ic_action_gshare_dark, R.color.color_white); shareIcon = AndroidUtils.getDrawableForDirection(app, shareIcon); ImageView shareButton = (ImageView) view.findViewById(R.id.shareButton); shareButton.setImageDrawable(shareIcon); @@ -644,7 +644,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC progressBar = (ProgressBar) view.findViewById(R.id.searchProgressBar); clearButton = (ImageButton) view.findViewById(R.id.clearButton); - clearButton.setImageDrawable(app.getUIUtilities().getThemedIcon(R.drawable.ic_action_remove_dark)); + clearButton.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_remove_dark)); clearButton.setOnClickListener( new OnClickListener() { @Override From f86b54db2c2687f937d2e016109e17cda0dc870b Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 16 Nov 2020 18:44:11 +0200 Subject: [PATCH 009/198] Added icon for Upload photo --- .../res/drawable/ic_action_photo_upload.xml | 24 ++++++++++++++ .../ic_action_photo_upload_colored.xml | 32 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 OsmAnd/res/drawable/ic_action_photo_upload.xml create mode 100644 OsmAnd/res/drawable/ic_action_photo_upload_colored.xml diff --git a/OsmAnd/res/drawable/ic_action_photo_upload.xml b/OsmAnd/res/drawable/ic_action_photo_upload.xml new file mode 100644 index 0000000000..30d7e17280 --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_photo_upload.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/OsmAnd/res/drawable/ic_action_photo_upload_colored.xml b/OsmAnd/res/drawable/ic_action_photo_upload_colored.xml new file mode 100644 index 0000000000..b932165336 --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_photo_upload_colored.xml @@ -0,0 +1,32 @@ + + + + + + + + + From 330c870320036956e19bcaa64c7eb7d69d09428a Mon Sep 17 00:00:00 2001 From: josep constanti Date: Sun, 15 Nov 2020 10:10:28 +0000 Subject: [PATCH 010/198] Translated using Weblate (Catalan) Currently translated at 96.5% (3431 of 3552 strings) --- OsmAnd/res/values-ca/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index 364f03abaf..a8b5d32da2 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -2764,12 +2764,12 @@ Abasta l\'àrea: %1$s x %2$s Baixa-ho tot Amaga la descripció completa Mostra la descripció completa - "Per a navegació nàutica. Compta amb boies, fars, rutes fluvials, rutes i referències marítimes, ports, serveis de navegació assistida i isòbates." + Per a navegació nàutica. Compta amb boies, fars, rutes fluvials, rutes i referències marítimes, ports, serveis de navegació assistida i isòbates. Per a esquiar. Compta amb pistes, remuntadors, rutes d\'esquí de fons, etc. Atenúa objectes de mapes secundaris. - "Estil senzill i contrastat per navegació amb el cotxe. En mode nocturn té cura de la vista. Principals característiques: corbes de nivell, vies contrastades d\'estil ataronjat, menys objectes secundaris al mapa que puguin distreure." + Estil senzill de conducció. Mode nocturn ergonòmic, corbes de nivell, vies contrastades d\'estil ataronjat, filtrat d\'objectes secundaris del mapa. Buscant el corresponent article a la wiki Adreça d\'interès - Dissenyat per un ús alternatiu en conducció. Pensat per posar imatges de satèl·lit com un mapa de fons. Principals característiques: gruix reduit de les carreteres principals, augment del gruix de pistes, camins, vies ciclistes i altres vies. Basat en l\'estil Topo. + Per conducció fora d\'asfalt és un tipus d\'estil topogràfic que posa imatges de satèl·lit de fons. Gruix petit de les carreteres principals, major gruix de les pistes, camins, vies ciclistes i altres vies. Per senderisme, excursionisme i ciclisme de natura. Pensat per il·luminació d\'exteriors. Contrast de vies i objectes naturals, diferents tipus de rutes, configuració avançada de corbes de nivell, detalls addicionals. Ajustant la integritat de superfície es distingeix el tipus de superfície de la via. No hi ha mode nocturn. Antic estil per defecte de \'Mapnik\'. Colors semblants als de \'Mapnik\'. Estil molt detallat per fer turisme. Inclou totes les opcions de configuració de l\'estil per defecte, afegint: Pantalles amb el màxim detall, en particular totes les carreteres, camins, i altres maneres de viatjar. Distinció visual clara entre tots els tipus diferents de via, semblant al de molts atles de viatge. Paleta de colors d\'alt contrast per utilitzar a l\'exterior, mode diürn i nocturn. @@ -3108,7 +3108,7 @@ Abasta l\'àrea: %1$s x %2$s Pantalles visitades Mostra el regle de brúixola Amaga el regle de brúixola - "Comenceu el vostre perfil personalitzat des d\'un perfil predeterminat de l\'aplicació,que defineixi la configuració bàsica com visibilitat predeterminada, extensions i unitats de velocitat i distància. Aquests són els perfils d\'aplicació predeterminats, junt amb exemples de personalització que es poden anar ampliant:" + Comenceu el vostre perfil personalitzat des d\'un perfil predeterminat de l\'aplicació,que defineixi la configuració bàsica com visibilitat predeterminada, extensions i unitats de velocitat i distància. Aquests són els perfils d\'aplicació predeterminats, junt amb exemples de personalització que es poden anar ampliant: Vaixell, rem, vela Avió, vol planat Geocodificació @@ -3442,7 +3442,7 @@ Abasta l\'àrea: %1$s x %2$s Recàlcul de la ruta Anunci Nom d\'usuari i contrasenya - Aquest paràmetre de connectors és global i afecta tots els perfils. + Aquest paràmetre de connectors és global i afecta tots els perfils Edició OSM Consulteu les vostres edicions o errors OSM encara no pujats a %1$s. Els punts enviats ja no es veuran més. La icona es mostra mentre navegueu o us mogueu. @@ -3528,7 +3528,7 @@ Abasta l\'àrea: %1$s x %2$s Reemplaça-ho tot Manté tots dos Els elements importats s\'afegiran amb prefix - Els noms dels elements importats ja s\'utilitzen a OsmAnd. + Hi ha elements importats amb els mateixos noms que altres d\'OsmAnd. \n \nSeleccioneu una opció. Alguns elements ja existeixen From 506ab320b7da2f0bdfb7f09bf1fae5a8d42cdaac Mon Sep 17 00:00:00 2001 From: ssantos Date: Sun, 15 Nov 2020 18:27:56 +0000 Subject: [PATCH 011/198] Translated using Weblate (Portuguese) Currently translated at 100.0% (3552 of 3552 strings) --- OsmAnd/res/values-pt/strings.xml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index 59774e171b..0c7ff7cbac 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -485,7 +485,7 @@ Sobreposições Fluorescentes Usar cores fluorescentes para mostrar trajetos e rotas. Edição offline - Usar sempre a edição offline. + Se a edição offline estiver ativada, as alterações serão primeiro gravadas localmente e enviadas por pedido, caso contrário, as alterações serão enviadas imediatamente. As alterações de POI dentro da app não afetam os ficheiros de mapas descarregados; essas alterações são guardadas num ficheiro separado no seu aparelho. A enviar… {0} POI/anotações enviados @@ -3446,7 +3446,7 @@ OsmAnd verifica %1$s para duplicatas com itens existentes na app. \n \nPode demorar algum tempo. - Importando + A importar Importando dados de %1$s Tem certeza de que deseja limpar os dados gravados\? Não foi possível fazer o backup do perfil. @@ -3469,7 +3469,7 @@ Ações rápidas Nada selecionado Tipos de POI - Preparando + A preparar Ângulo mínimo entre minha localização e rota Segmento reto adicional entre minha localização e a rota calculada será exibida até que a rota seja recalculada Ângulo @@ -3566,7 +3566,7 @@ Verifique e compartilhe registos detalhados da app Ícone mostrado em repouso. Ícone mostrado ao navegar ou mover. - Pode ver todas as suas edições descarregadas ou bugs OSM em %1$s. Pontos enviados não aparecem no OsmAnd. + Pode ver todas as suas edições ainda não enviadas ou bugs OSM em %1$s. Os pontos enviados não aparecem no OsmAnd. Edição OSM Estas configurações de extensão são globais e aplicam-se a todos os perfis Utilizador e palavra-passe @@ -3971,4 +3971,13 @@ Privado significa que o rastreamento não aparecerá em nenhuma listagem pública, mas os pontos de rastreamento dele ainda estarão disponíveis através da API pública do GPS sem carimbos de tempo, mas não serão ordenados cronologicamente. Identificável significa que o rastreamento será mostrado publicamente nos Seus traços de GPS e em listas públicas de rastreamento de GPS, ou seja, outros utilizadores serão capazes de descarregar o rastreamento bruto e associá-lo ao seu nome de utilizador. Os dados servidos através da API dos pontos de rastreamento referenciarão à sua página de rastreamento original. As marcas de tempo dos pontos de rastreamento estão disponíveis através da API pública do GPS. Rastreável significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de rastreamento a partir dele ainda estarão disponíveis através da API pública do GPS com carimbos de tempo. Outros utilizadores só poderão descarregar pontos de rastreamento processados do seu rastreamento que não podem ser associados diretamente a si. - + Fechar nota do OSM + Comentário de nota do OSM + Pode entrar a usar o método seguro OAuth ou usar o seu login e palavra-passe. + Adicionar fotos + Cadastre-se em +\nOpenPlaceReviews.org + As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site. + Criar uma conta + Já tenho uma conta + \ No newline at end of file From 895f307c2f8cdf2c46e7ef127762d7472648e883 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sat, 14 Nov 2020 22:02:26 +0000 Subject: [PATCH 012/198] Translated using Weblate (French) Currently translated at 99.8% (3546 of 3552 strings) --- OsmAnd/res/values-fr/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 80aa90d88a..b5428bb4d2 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3948,4 +3948,9 @@ \nOpenPlaceReviews.org Créer un nouveau compte J\'ai déjà un compte + Vous devez vous connecter pour envoyer vos modifications. +\n +\nVous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. + Vous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. + Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web. \ No newline at end of file From f6b3b96fe1c17f35a9070e7f82edb4693a47443a Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 14 Nov 2020 18:20:53 +0000 Subject: [PATCH 013/198] Translated using Weblate (German) Currently translated at 99.9% (3551 of 3552 strings) --- OsmAnd/res/values-de/strings.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index e06fe65fc8..a17e9b39de 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -246,7 +246,7 @@ Fluoreszierende Overlays Fluoreszierende Anzeige von Tracks und Routen. Offline-Bearbeitung - Immer Offline-Bearbeitung verwenden. + Wenn die Offline-Bearbeitung aktiviert ist, werden Änderungen zunächst lokal gespeichert und auf Anforderung hochgeladen, andernfalls werden Änderungen sofort hochgeladen. Das Bearbeiten von POIs innerhalb von OsmAnd beeinflusst nicht die heruntergeladenen Offline-Karten, sondern wird in einer Datei auf Ihrem Gerät gespeichert. Hochladen … {0} POI/Notizen wurden hochgeladen @@ -3973,4 +3973,13 @@ Identifizierbar bedeutet, dass der Track in Ihren GPS-Tracks und in öffentlichen GPS-Track Verzeichnissen angezeigt wird. Andere Benutzer können den Rohtrack herunterladen und mit Ihrem Benutzernamen verknüpfen. Daten, die über die Trackpunkte-API geliefert werden, verweisen auf Ihre ursprüngliche Track-Seite. Die Zeitstempel der Trackpunkte sind über die öffentliche GPS-API verfügbar. Privat bedeutet, dass der Track nicht in öffentlichen Verzeichnissen auftaucht. Punkte des Tracks werden weiterhin über die öffentliche GPS-API ohne Zeitstempel verfügbar sein, aber nicht chronologisch geordnet. Verfolgbar bedeutet, dass der Track in keiner öffentlichen Auflistung auftaucht, aber Trackpunkte weiterhin über die öffentliche GPS API mit Zeitstempel verfügbar sein werden. Andere Benutzer werden nur verarbeitete Trackpunkte Ihres Tracks herunterladen können, die nicht direkt mit Ihnen in Verbindung gebracht werden können. + OSM Notiz schließen + OSM Notiz kommentieren + Sie können sich mit der sicheren OAuth-Methode anmelden oder Ihren Benutzernamen und Passwort verwenden. + Foto hinzufügen + Registrieren bei +\nOpenPlaceReviews.org + Fotos werden vom offenen Datenprojekt OpenPlaceReviews.org zur Verfügung gestellt. Um Ihre Fotos hochladen zu können, müssen Sie sich auf der Website anmelden. + Neues Konto erstellen + Ich habe bereits ein Konto \ No newline at end of file From d7823aefec58c3ffa75d1a46f824763f9ee09389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Babos=20G=C3=A1bor?= Date: Sat, 14 Nov 2020 17:27:03 +0000 Subject: [PATCH 014/198] Translated using Weblate (Hungarian) Currently translated at 99.9% (3551 of 3552 strings) --- OsmAnd/res/values-hu/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index fce095276d..16c481d562 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -3422,7 +3422,7 @@ Felhasználónév és jelszó Ezek a bővítménybeállítások globálisak, és minden profilra vonatkoznak OSM-szerkesztés - Az összes még fel nem töltött szerkesztés vagy OSM-hiba megtalálható a %1$s helyen. A már feltöltött pontok nem láthatók az OsmAndban. + Az összes még fel nem töltött szerkesztés vagy OSM-hiba megtekinthető itt: %1$s. A már feltöltött pontok nem láthatók az OsmAndban. OSM Navigáció vagy haladás közben megjelenő ikon. Álló helyzetben megjelenő ikon. From 24d45d602f32ed4ca56bfecb48645922e9dbc91c Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Sat, 14 Nov 2020 22:44:44 +0000 Subject: [PATCH 015/198] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3552 of 3552 strings) --- OsmAnd/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index c29a153368..4abd682cde 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3427,7 +3427,7 @@ Ім\'я користувача і пароль Ці налаштування втулка стосуються всіх профілів OSM-правлення - Ви можете переглянути всі вивантажені зміни або вади OSM у %1$s. Вивантажені точки не показано в OsmAnd. + Ви можете переглянути всі ще не вивантажені зміни або вади OSM у %1$s. Вивантажені точки не показано в OsmAnd. OSM Значок відображається під час навігації чи переміщення. Значок показано в спокої. From 41909c3fbcf1b0ab7ad488a11f34f327f3f3f10d Mon Sep 17 00:00:00 2001 From: ace shadow Date: Sat, 14 Nov 2020 23:52:06 +0000 Subject: [PATCH 016/198] Translated using Weblate (Slovak) Currently translated at 99.8% (3548 of 3552 strings) --- OsmAnd/res/values-sk/strings.xml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 1f9391e735..2f0404d1dc 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3427,7 +3427,7 @@ Prihlasovacie meno a heslo Tieto nastavenia sú globálne a platia pre všetky profily OSM upravovanie - Môžete zobraziť vaše neodoslané zmeny alebo chyby v OSM cez %1$s. Odoslané body sa už v OsmAnd nezobrazujú. + Môžete zobraziť vaše ešte neodoslané zmeny alebo chyby v OSM cez %1$s. Odoslané body sa už v OsmAnd nezobrazujú. OSM Ikona zobrazená pri navigácii alebo pohybe. Ikona zobrazená v pokoji. @@ -3953,4 +3953,25 @@ Predplatné OsmAnd Live skončilo Predplatné OsmAnd Live je pozastavené Predplatné OsmAnd Live je zablokované + Prihlásiť sa do OpenStreetMap + Prihlásiť sa do OpenStreetMap.org + Zaregistrovať sa do OpenStreetMap + Musíte sa prihlásiť pre odoslanie nových alebo zmenených údajov. +\n +\nMôžete sa prihlásiť pomocou bezpečnej metódy OAuth alebo pomocou mena a hesla. + Použiť meno a heslo + Účet + Prihlasovacie meno + História značiek + Odoslať súbor GPX do OpenStreetMap + Zadajte značky oddelené čiarkou. + Zatvoriť OSM poznámku + Komentovať OSM poznámku + Môžete sa prihlásiť bezpečnou metódou OAuth alebo použite meno a heslo. + Pridať foto + Zaregistrovať na +\nOpenPlaceReviews.org + Fotografie sú poskytované projektom OpenPlaceReviews.org s otvorenými dátami. Na odoslanie vašich fotiek sa musíte zaregistrovať na webovej stránke. + Vytvoriť nový účet + Už mám účet \ No newline at end of file From 00928c1aa5c1fc09c5523b0f7413249bf83d72bc Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Sat, 14 Nov 2020 22:14:12 +0000 Subject: [PATCH 017/198] Translated using Weblate (Hebrew) Currently translated at 99.8% (3548 of 3552 strings) --- OsmAnd/res/values-iw/strings.xml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index c436894c67..4f9776cbf0 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -254,7 +254,7 @@ שכבות מוארות ניתן להשתמש בצבעים מוארים כדי להציג דרכים ומסלולים. עריכה בלתי מקוונת - תמיד להשתמש בעריכה בלתי מקוונת. + אם עריכה בלתי מקוונת פעילה, השינויים יחולו מקומית תחילה ויועלו לפי דרישה, אחרת השינויים יועלו אוטומטית. שינויי הנ״ע בתוך היישום אינם משפיעים על קובצי המפה שהתקבלו, השינויים נשמרים לקובץ על ההתקן שלך במקום. מתבצעת שליחה… {0} נ״ע/הערות נשלחו @@ -3561,7 +3561,7 @@ מעויני ריבועי מזערי - ניתן לצפות בכל העריכות או את התקלות ב־OSM שטרם הועלו תחת %1$s. נקודות שהועלו לא מופיעות ב־OsmAnd. + ניתן לצפות בכל העריכות או בתקלות ב־OSM שטרם הועלו תחת %1$s. נקודות שהועלו לא מופיעות ב־OsmAnd. מפת הצללה עם צבעי הצללה כהים כדי להדגיש מדרונות, פסגות ועמקים. מתומן הערות ה־OSM שלך הן תחת %1$s. @@ -3969,4 +3969,14 @@ היסטוריית סמנים שליחת קובץ GPX ל־OpenStreetMap נא למלא תגיות מופרדות בפסיקים. - + ניתן למעקב משמעו שהמסלול לא יופיע ברישומים ציבוריים אך נקודות המעקב ממנו עדיין תהיינה זמינות דרך API ציבורי ל־GPS עם חותמות זמן. משתמשים אחרים יוכלו להוריד את נקודות המעקב המעובדות מהמסלול שלך שלא ניתן לשייך אותו ישירות אליך. + סגירת הערת OSM + להגיב על הערת OSM + ניתן להיכנס באמצעות שיטת האימות המאובטחת OAuth או להיכנס עם שם הכניסה והססמה שלך. + הוספת תמונה + יש להירשם בכתובת +\nOpenPlaceReviews.org + תמונות מסופקות על ידי מיזם הנתונים הפתוחים OpenPlaceReviews.org. כדי להעלות את התמונות שלך עליך להירשם לאתר. + יצירת חשבון חדש + כבר יש לי חשבון + \ No newline at end of file From 2d7f5f273d6eb7414f28b43bb577d92da2b2f10b Mon Sep 17 00:00:00 2001 From: Michal L Date: Sun, 15 Nov 2020 16:33:59 +0000 Subject: [PATCH 018/198] Translated using Weblate (Polish) Currently translated at 99.6% (3540 of 3552 strings) --- OsmAnd/res/values-pl/strings.xml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index f428e327f3..3fe358ee55 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -561,7 +561,7 @@ Wtyczki Aktywuje zaawansowane ustawienia i dodatkową funkcjonalność. Wtyczki - Wnieś wkład w OSM, taki jak tworzenie lub modyfikowanie obiektów OSM POI, otwieranie lub komentowanie notatek OSM i tworzenie nagranych plików GPX w OsmAnd podając swoją nazwę użytkownika i hasło. OpenStreetMap.org jest projektem mapowania globalnej domeny publicznej opartej na społeczności. + Wnieś wkład w OSM, taki jak tworzenie lub modyfikowanie obiektów OSM POI, otwieranie lub komentowanie uwag OSM i tworzenie nagranych plików GPX w OsmAnd podając swoją nazwę użytkownika i hasło. OpenStreetMap.org jest projektem mapowania globalnej domeny publicznej opartej na społeczności. Mapy wektorowe mogą wyświetlać się szybciej. Może nie działać dobrze na niektórych urządzeniach. Wybierz głos i przetestuj, odtwarzając komunikaty: Rozwój OsmAnd @@ -1769,7 +1769,7 @@ Proszę podać właściwy typ POI lub go pominąć. Zmodyfikowane użyteczne miejsce OSM Usunięto użyteczne miejce OSM - Otwarto ponownie notatkę OSM + Otwarto ponownie uwagę OSM Skomentowano uwagę OSM Utworzono uwagę OSM Utwórz uwagę @@ -2292,7 +2292,7 @@ Zainstaluj wtyczkę \'Poziomice\', aby pokazać stopniowane obszary pionowe. Pobierz mapę \"Cieniowanie Rzeźby Terenu\", by wyświetlić cieniowanie pionowe. Kup i zainstaluj wtyczkę \'Poziomice\', aby pokazać stopniowane obszary pionowe. - Pokaż lub ukryj notatki OSM + Pokaż lub ukryj uwagi OSM Pokaż uwagi OSM Ukryj uwagi OSM Przybliżony zasięg i jakość mapy: @@ -2310,7 +2310,7 @@ \n Od Afganistanu po Zimbabwe, przez Australię po USA. Argentyna, Brazylia, Kanada, Francja, Niemcy, Polska, Meksyk, Wielka Brytania, Hiszpania, … \n Posortowane wg odległości - Przycisk do wyświetlania lub ukrywania notatek OSM na mapie. + Przycisk do wyświetlania lub ukrywania uwag OSM na mapie. Rozpocznij ponownie wyszukiwanie Zwiększ promień wyszukiwania Nic nie odnaleziono @@ -2533,7 +2533,7 @@ Plik OSC Wybierz typ pliku Wszystkie dane - Notatki OSM + Uwagi OSM Plik GPX ze współrzędnymi i danymi wybranych notatek. Plik GPX ze współrzędnymi i danymi wszystkich notatek. Zmień wyszukiwanie. @@ -2573,7 +2573,7 @@ Najpierw najbliższe zamknięte Eksportuj jako uwagi OSM, POI lub oba. - Twórz lub modyfikuj OSM POI, otwórz lub skomentuj notatki OSM, oraz udostępniaj nagrane pliki GPX. + Twórz lub modyfikuj OSM POI, otwórz lub skomentuj uwagi OSM, oraz udostępniaj nagrane pliki GPX. Importuj ulubione grupy lub punkty trasy jako znaczniki. Sporty spływowe Usunięto grupę @@ -3842,7 +3842,7 @@ Czy na pewno chcesz odrzucić wszystkie zmiany w zaplanowanej trasie, zamykając ją\? W przypadku odwrotnego kierunku Przejdź z mojej lokalizacji na trasę - Wózek inwalidzki naprzód + Sportowy wózek inwalidzki Ślady Podążanie za śladem Wybierz plik śladu do śledzenia lub zaimportuj go z urządzenia. @@ -3967,4 +3967,6 @@ \nMożesz zalogować się za pomocą bezpiecznej metody autoryzacji OAuth lub użyć swojego loginu i hasła. Użyj loginu i hasła Konto + Zamknij uwagę OSM + Skomentuj uwagę OSM \ No newline at end of file From 8bf7c4e04b209a020626ed48e46ed84c8a0a17ee Mon Sep 17 00:00:00 2001 From: WaldiS Date: Sat, 14 Nov 2020 15:55:38 +0000 Subject: [PATCH 019/198] Translated using Weblate (Polish) Currently translated at 99.6% (3540 of 3552 strings) --- OsmAnd/res/values-pl/strings.xml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 3fe358ee55..5a3ad96826 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -630,7 +630,7 @@ Odblaskowe nakładki Użyj kolorów fluorescencyjnych, aby wyświetlić ścieżki i trasy. Edycja w trybie offline - Zawsze wprowadza modyfikacje w trybie offline. + Jeśli edycja offline jest włączona, to zmiany zostaną najpierw zapisane lokalnie i przesłane na żądanie, w przeciwnym razie zmiany zostaną przesłane natychmiast. Wysyłanie… Wysłano {0} użytecznych miejsc/uwag Wyślij wszystkie @@ -3549,7 +3549,7 @@ Szybka czynność Zatrzymaj oba Styl renderowania - Możesz zobaczyć wszystkie nieopublikowane edycje lub błędy OSM w %1$s. Przesłane punkty nie są wyświetlane w OsmAnd. + Możesz wyświetlić wszystkie swoje jeszcze nie przesłane edycje lub błędy OSM w %1$s. Przesłane punkty nie są wyświetlane w OsmAnd. Importowanie pliku renderowania Przywrócić wszystkie ustawienia profilu\? Zapisywanie nowego profilu @@ -3876,7 +3876,7 @@ Zapisana zostanie tylko linia trasy, punkty trasy zostaną usunięte. Nazwa pliku %s wybrane pliki ścieżki - Określ interwał rejestrowania dla ogólnego rejestrowania śladu (włączany za pomocą widżetu Rejestrowanie podróży na mapie). + Wybierz tempo rejestrowania śladu (włączanego za pomocą widżetu rejestrowania podróży na mapie). Wstrzymaj nagrywanie podróży Wznowienie rejestracji podróży Domyślny systemu @@ -3941,7 +3941,7 @@ Poczekaj na ponowne obliczenie trasy. \nWykres będzie dostępny po ponownym obliczeniu. Mapy lokalne - Luka + Przerwa Udogodnienie Specjalny Transport @@ -3969,4 +3969,15 @@ Konto Zamknij uwagę OSM Skomentuj uwagę OSM + Historia znaczników + Wyślij plik GPX do OpenStreetMap + Wpisz tagi oddzielone przecinkami. + Możliwość śledzenia oznacza, że ślad nie pojawi się na żadnej publicznej liście, ale punkty śledzenia będą nadal dostępne za pośrednictwem publicznego API GPS ze znacznikami czasu. Inni użytkownicy będą mogli pobrać tylko te przetworzone punkty śledzenia z Twojego śladu, których nie można powiązać bezpośrednio z Tobą. + Możesz zalogować się przy użyciu bezpiecznej metody OAuth lub użyć swojego loginu i hasła. + Dodaj zdjęcie + Zarejestruj się w +\nOpenPlaceReviews.org + Zdjęcia są dostarczane przez projekt OpenPlaceReviews.org. Aby przesłać swoje zdjęcia należy zarejestrować się na stronie. + Utwórz nowe konto + Mam już konto \ No newline at end of file From 8e82de867cab19c5b31ed901952ae4d6208cb871 Mon Sep 17 00:00:00 2001 From: Guntis Ozols Date: Mon, 16 Nov 2020 12:12:22 +0000 Subject: [PATCH 020/198] Translated using Weblate (Latvian) Currently translated at 62.5% (2220 of 3552 strings) --- OsmAnd/res/values-lv/strings.xml | 40 +++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-lv/strings.xml b/OsmAnd/res/values-lv/strings.xml index 437c20e592..e505fe8b91 100644 --- a/OsmAnd/res/values-lv/strings.xml +++ b/OsmAnd/res/values-lv/strings.xml @@ -124,7 +124,7 @@ Globālie lietotnes iestatījumi OSM lietotāja vārds Nepieciešams, lai veiktu augšupielādes openstreetmap.org - Jūsu OSM parole + Parole Fona režīms OsmAnd darbosies fonā, kad ekrāns būs izslēgts Nepietiek brīvās vietas, lai lejupielādētu %1$s MB (brīvi: %2$s). @@ -2551,8 +2551,8 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Pievienots Marķieris %s ir aktivizēts. Ceļojumu gids - Ceļojumu gidi - Ceļojumu gidi + Ceļojumu gids + Ceļojumu gids Divi Viens Spiežot darbības pogu, tiks pārslēgts dienas un nakts režīms @@ -2889,7 +2889,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Ilgs vai ātrs pieskāriens uz \"Vietas\", tad pieskarties marķiera izveides karodziņam. Importēt grupas Importēt izlases grupas vai ceļapunktus kā marķierus. - Marķieri, kas atzīmēti kā izieti, parādīsies šeit. + Marķieri, kas atzīmēti kā izbraukti, parādīsies šeit. Izskats uz kartes Vēl Meklē trekus ar ceļapunktiem @@ -3014,7 +3014,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Lejupielādēt failu Brīvais pasaules ceļojumu gids, ko ikviens var papildināt. Ceļojumu gidi dotajā brīdī ir bāzēti uz Vikiceļojumiem. Baudiet visas iespējas beta testēšanas periodā par brīvu. Vēlāk ceļojumu gidi būs pieejami OsmAnd Unlimited abonomentiem un OsmAnd+ lietotājiem. - Jūs varat papildināt jebkuru Vikiceļojuma rakstu. Mēs ļoti iesakām dalīties ar savu pieredzi, zināšanām un spējām rakstu veidošanā + Jūs varat papildināt jebkuru Vikiceļojuma rakstu. Mēs ļoti iesakām dalīties ar savu pieredzi, zināšanām un spējām rakstu veidošanā. Sākt rakstīt Saņemiet neierobežotu piekļuvi Sveicināti atvērtajā beta testēšanā @@ -3059,7 +3059,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Uzlabots kontrasts kājāmgājēju un velosipēdu celiņiem. Izmanto vecākas Mapnik krāsas. GPX fails Treku ceļapunkti - Interesantāko vietu gidi uz planētas, OsmAnd lietotnē, bez pieslēguma internetam. + Interesantāko vietu apraksti uz planētas OsmAnd lietotnē bez pieslēguma internetam. Palielināt meklēšanas rādiusu līdz %1$s Spiediet uz pogas un klausieties atbilstošo balss uzvedni, lai noteiktu trūkstošās vai kļūdainās uzvednes. Melns @@ -3275,4 +3275,32 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl OsmAnd pamata profilus nevar izdzēst, bet atspējot (uz iepriekšējā ekrāna) vai pārkārtot uz leju. Izvēlētais profils Nekas nav izvēlēts + Ārkārtas + Ceļošana + Nepieciešams pievienot vismaz divus punktus + Ieiet OpenStreetMap + Ieiet OpenStreetMap.org + Pierakstīties ar OpenStreetMap + Lai sūtītu labojumus vai jaunus datus, ir nepieciešams pierakstīties. +\n +\nJūs varat pierakstīties, lietojot drošo OAuth metodi vai ar savu lietotāja vārdu un paroli. + Lietot pierakstīšanās datus + Konts + Lietotājs + Pārvaldīt abonomentu + Problēma ar abonomenta maksājumu. Noklikšķiniet uz pogas, lai ietu uz Google Play abonomenta iestatījumiem un labotu maksājuma metodi. + OsmAnd Live abonoments ir beidzies + OsmAnd Live abonoments ir nopauzēts + OsmAnd Live abonoments ir apturēts + Marķieru vēsture + Sūtīt GPX failu uz OpenStreetMap + Ievadiet tagus, atdalītus ar komatu. + Aizvērt OSM Note + Komentēt OSM Note + Jūs varat ielogoties lietojot drošo OAuth metodi vai savu lietotāja vārdu un paroli. + Pievienot foto + Reģistrēties +\nOpenPlaceReviews.org + Fotogrāfijas tiek piegādātas no atvērtā koda projekta OpenPlaceReviews.org. Lai pievienotu savas fotogrāfijas, nepieciešams reģistrēties šajā interneta vietnē. + Izveidot jaunu kontu \ No newline at end of file From c785a91e97393c6070b638dd63e7187006b71dfe Mon Sep 17 00:00:00 2001 From: Softmap Date: Sat, 14 Nov 2020 22:13:46 +0000 Subject: [PATCH 021/198] Translated using Weblate (Arabic) Currently translated at 100.0% (3552 of 3552 strings) --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 56a115ed5b..1164b64728 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3419,7 +3419,7 @@ اعراض جانبية: سيفقد المسار الخاص بك جميع الأقسام التي لم يتحقق فيها معيار الحد الأدنى للسرعة (على سبيل المثال ، حيث تدفع دراجتك أعلى تل شديد الانحدار). أيضا ، لن تكون هناك معلومات حول فترات الراحة ، مثل الاستراحات. هذا له تأثيرات على أي تحليل أو مرحلة ما بعد المعالجة ، مثل عند محاولة تحديد المدة الإجمالية لرحلتك ، أو وقت الحركة ، أو متوسط سرعتك. المسارات المسجلة الخاصة بك هي في %1$s، أو مجلد أوسماند. ملاحظات OSM موجودة في%1$s. - عرض تعديلاتك أو أخطاء OSM التي لم يتم تحميلها بعد في%1$s. لن يتم عرض النقاط التي تم تحميلها بعد الآن. + يمكنك عرض جميع التعديلات التي لم يتم رفعها بعد أو أخطاء OSM في %1$s. النقاط التي تم رفعها لا تظهر في OsmAnd. مرشح قطع سرعة منخفضة لعدم تسجيل نقاط أقل من سرعة معينة. وهذا قد يجعل المسارات المسجلة تبدو أكثر سلاسة عند عرضها على الخريطة. التوصية: حاول استخدام كشف الحركة عبر مرشح الحد الأدنى للإزاحة للتسجيل (B) أولاً ، فقد ينتج عنه نتائج أفضل ، ويستهلك بيانات أقل. إذا استمرت المسارات الخاصة بك مزعجة عند السرعات المنخفضة ، فجرب القيم غير الصفرية هنا. يرجى ملاحظة أن بعض القياسات قد لا تبلغ عن أي قيمة سرعة على الإطلاق (بعض الطرق المستندة إلى الشبكة) ، وفي هذه الحالة لن تسجل أي شيء. ملاحظة: سرعة > 0 الاختيار: معظم شرائح GPS تبلغ عن قيمة السرعة فقط إذا كانت الخوارزمية تحدد الحركة أوالسكون. وبالتالي باستخدام إعدادات> 0 في هذا المرشح يتم كشف عن الحركة من شرائح GPS. ولكن حتى لو لم تتم تصفيتها هنا في وقت التسجيل ، فإننا لا نزال نستخدم هذه الميزة في تحليل GPX لتحديد المسافة المصححة ، أي أن القيمة المعروضة في هذا الحقل هي المسافة المسجلة أثناء الحركة. From 31054a1a772e6e6f15a60ab04ef2043ead92520f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Mon, 16 Nov 2020 13:34:08 +0000 Subject: [PATCH 022/198] Translated using Weblate (Czech) Currently translated at 86.2% (3062 of 3552 strings) --- OsmAnd/res/values-cs/strings.xml | 214 +++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 28f2745e80..374d0b113a 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -3728,4 +3728,218 @@ Zobrazená oblast: %1$s x %2$s Předplatné OsmAnd Live skončilo Předplatné OsmAnd Live je pozastaveno Předplatné OsmAnd Live je zablokované + Mezera + Freeride a sjezd mimo sjezdovky. Obvykle neupravované a neudržované, bez večerní kontroly. Vstup na vlastní nebezpečí. + Preferovat trasy s touto obtížností, avšak povolit navigaci přes náročnější nebo jednodušší trasy, pokud jsou kratší. + Trasy upravované pouze pro volný styl nebo bruslení na lyžích, ne pro klasické lyžování. + Nepodařilo se rozpoznat geo akci \'%s\'. + Zadejte povolenou šířku vozidla na trase. + Omezení šířky + Seřadit podle kategorie + Automaticky zaznamenávat stopu během navigace + MGRS + Simulovat polohu pomocí zaznamenané stopy GPX. + Co je nového + Tlačítko pro určení středu obrazovky jako výchozího bodu a výpočet trasy do cíle nebo otevření dialogu pro výběr cíle. + Pro jízdu na sněžném vozidle na vyhrazených cestách. + Vlastní profil založte na jednom ze základních profilů. Ten určí základní nastavení jako viditelnost nástrojů, jednotky rychlosti a vzdálenosti. Toto jsou základní profily aplikace a návrhy vlastních profilů, na které mohou být rozšířeny: + Ohodnotit + • Aplikační profily: Vytvořte si vlastní profil pro své potřeby, s vlastní ikonou i barvou +\n +\n• Možnost nastavení zvolené, minimální a maximální rychlosti v profilech +\n +\n• Přidaný widget s aktuálními souřadnicemi +\n +\n• Přidaná možnost zobrazit kompas a kruhové pravítko na mapě +\n +\n• Opravený záznam stopy na pozadí +\n +\n• Vylepšené stahování map na pozadí +\n +\n• Vrácené nastavení \'Zapnout obrazovku\' +\n +\n• Opravený výběr jazyka Wikipedie +\n +\n• Opravené chování tlačítka kompasu během navigace +\n +\n• Opravy dalších chyb +\n +\n + Vzhled mapy + Časový limit obrazovky po probuzení + Zvolený formát bude použitý v celé aplikaci. + Open Location Code + MGRS + OsmAnd používá MGRS, který je podobný formátu UTM NATO. + Zásobník logcat + Výchozí + Neurčený + Běh na lyžích + Sjezd + Lyžařský okruh + Spojnice + Túry + Sáňkování + Saně + Ski park + Vyhnout se některým trasám a typům cest + Lanovka + Terénní čtyřkolka + Ukládat stopy do podsložek podle dní (např. 2018-01-10). + Ukládat stopy do denních složek + Ukládat stopy do složky \'rec + Stopy mohou být ukládány ve složce \'rec\' nebo v měsíčních či denních složkách. + Složka pro ukládání stop + Vrstevnice a stínování svahů + • Vylepšená nastavení aplikace a profilů. Nastavení jsou nyní uspořádána podle typu. Každý profil lze upravovat samostatně. +\n +\n• Nový dialog stahování map, který navrhuje mapy ke stažení během prohlížení +\n +\n• Opravy tmavého vzhledu +\n +\n• Opraveny některé chyby navigace +\n +\n• Aktualizovaná základní mapa s podrobnější sítí cest +\n +\n• Opraveny zaplavené oblasti ve světě +\n +\n• Lyžařská navigace: do detailů trasy byl přidán výškový profil a obtížnost +\n +\n• Opravy dalších chyb +\n +\n + Tuto změnu můžete aplikovat na všechny profily nebo jen na vybraný profil. + Zobrazit/skrýt stínování svahů + Skrýt stínování svahů + Zobrazit stínování svahů + Tlačítko pro zobrazení nebo skrytí stínování svahů na mapě. + Zobrazit/skrýt vrstevnice + Skrýt vrstevnice + Zobrazit vrstevnice + Tlačítko pro zobrazení nebo skrytí vrstevnic na mapě. + Nepodařilo se spustit modul převodu textu na řeč. + Bílá + Spojit úseky + Zobrazit bodovou síť cyklotras + Sítě bodů + Vybraný profil + Upravit seznam profilů + Ikona, barva a název + Vzhled profilu + Ukládat směr v každém bodu záznamu. + Ukládat směr + Osobní + %1$s, %2$s + %1$s • %2$s + \'Typ navigace\' ovlivňuje pravidla pro výpočet trasy. + Upravit profily + Základní profily OsmAnd nelze odstranit, ale mohou být vypnuty (na předchozí obrazovce), nebo přesunuty na konec seznamu. + Stahování %s + Pro pouště a jiné řídce osídlené oblasti. Víc detailů. + Tučné + Zvolte barvu + Hlavní profil + Stisknutím \'Použít\' odstraníte vymazané profily natrvalo. + Ikona polohy v klidu + Ikona polohy při pohybu + Resetovat všechna nastavení profilu\? + Resetovat všechna nastavení profilu do základního stavu. + Stisknutím %1$s zahodíte všechny své změny. + %1$s %2$s + Ikona zobrazená v klidu. + Ikona zobrazená během navigace nebo při pohybu. + OSM + Editace OSM + Přihlašovací jméno a heslo + Oznámení + Přepočítání trasy + Foto-poznámky + Vaše OSM poznámky jsou v %1$s. + Všechny vaše zaznamenané stopy jsou v %1$s, nebo ve složce OsmAnd. + Přesnost záznamu + Sledování online + Umožňuje sdílení aktuální polohy prostřednictvím záznamu cesty. + Zvolte ikonu, barvu a název + Přihlášení, heslo, offline úpravy + Velikost obrázků, kvalita zvuku a videa + Navigace, přesnost záznamu + Importovat profil + Importovat navigační soubor + Import ze souboru + Přihlášení bylo úspěšné + Zvuk spouště fotoaparátu + Použít systémovou aplikaci + Rozdělení záznamu + Resetovat modul do základního nastavení + Minimální posun + Minimální přesnost + Minimální rychlost + Oznámení + Zadejte webovou adresu se syntaxí parametrů: zeměpisná šířka={0}, zeměpisná délka={1}, časové razítko={2}, přesnost={3}, výška={4}, rychlost={5}, směr={6}. + Webová adresa + Interval záznamu + Časový zásobník + Doporučení: Nastavení 5 metrů může fungovat, pokud nepotřebujete zaznamenat detaily jemnější než je tato vzdálenost a zároveň výslovně nechcete zaznamenávat úseky bez pohybu. + Vedlejší účinky: Úseky v klidu nejsou vůbec zaznamenané, nebo každý pouze jedním bodem. Malé skutečné pohyby (například do strany na označení možné odbočky na cestě) mohou být odfiltrované. Váš soubor bude obsahovat méně informací pro následné zpracování a má horší statistiky, protože zjevně nadbytečné body budou během záznamu odfiltrovány, avšak artefakty způsobené špatným příjmem nebo efekty GPS čipu mohou v záznamu zůstat. + Tento filtr nebude zaznamenávat duplicitní body tam, kde se udál příliš malý pohyb. Stopy, které se po záznamu nezpracovávají, budou díky tomu vypadat lépe. + Poznámka: Pokud bylo GPS vypnuté těsně před začátkem záznamu, může mít první změřený bod nižší přesnost, proto bychom v našem programu mohli chvíli počkat před zaznamenáním bodu (nebo zaznamenat nejlepší ze tří po sobě jdoucích bodů), ovšem to ještě není implementováno. + Doporučení: Je těžké předpovědět, co se zaznamená a co ne, proto může být vhodné tento filtr vypnout. + Vedlejší účinek: Kvůli filtrování podle přesnosti mohou zcela chybět body například pod mosty, stromy, mezi vysokými budovami nebo při jistých povětrnostních podmínkách. + Toto zaznamená pouze body změřené se zadanou minimální přesností (v metrech/stopách tak, jak ji hlásí Android pro vaše zařízení). Přesnost udává vzdálenost změřené od skutečné polohy a nesouvisí přímo přesností, která udává rozptyl opakovaných měření. + Poznámka: kontrola na nenulovou rychlost: Většina GPS čipů hlásí hodnotu rychlosti jen v případě, kdy algoritmus vyhodnotí, že se pohybujete, jinak nevrátí nic. Použití nenulového nastavení v tomto filtru tedy vlastně použije detekci pohybu z GPS čipu. Avšak i když rychlost zde nebude filtrovaná během záznamu, použijeme tuto funkci při analýze GPX pro určení opravené vzdálenosti – hodnota zobrazená v tomto poli je vzdálenost zaznamenaná během pohybu. + Doporučení: Zkuste nejprve použít detekci pohybu filtrem minimálního posunu (B), který může dosáhnout lepších výsledků a ztrácet méně dat. Pokud vaše stopy budou obsahovat mnoho šumu při nízkých rychlostech, zkuste zde zadat nenulovou hodnotu. Mějte na paměti, že některá měření nemusí hlásit žádnou rychlost (některé metody založené na síti). V takových případech se nic nezaznamená. + Vedlejší účinek: Vaše stopa nebude obsahovat úseky, v nichž nebyla dosažená minimální rychlost (např. tam, kde jste tlačili kolo do prudkého kopce). Také budou chybět údaje o úsecích bez pohybu, jako třeba přestávkách. To má vliv na následnou analýzu nebo zpracování, například při zjišťování celkové délky cesty, doby pohybu nebo průměrné rychlosti. + Tento filtr nebude zaznamenávat body při nižších rychlostech. Díky tomu může být zaznamenaná stopa hladší při zobrazení na mapě. + Tato nastavení jsou globální a platí pro všechny profily + Přihlásit se do OpenStreetMap + Přihlásit se do OpenStreetMap.org + Zaregistrovat se do OpenStreetMap + Můžete zobrazit své dosud neodeslané změny či chyby v OSM v %1$s. Odeslané body se již v OsmAnd nezobrazují. + Musíte se přihlásit, abyste mohli odesílat nová nebo změněná data. +\n +\nMůžete se přihlásit pomocí bezpečné metody OAuth, nebo pomocí jména a hesla. + Použít jméno a heslo + Účet + Přihlašovací jméno + Historie značek + Veřejná znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras. Data poskytnutá prostřednictvím API nebudou odkazovat na vaši stránku s trasou. Časová razítka bodů trasy nebudou dostupná prostřednictvím veřejného GPS API a body nebudou chronologicky seřazeny. Ostatní uživatelé si ale stále budou moci stáhnout nezpracovanou trasu z veřejného seznamu spolu se všemi časovými razítky, které obsahuje. + Soukromá znamená, že trasa se neobjeví v žádném veřejném seznamu a body trasy budou dostupném prostřednictvím veřejného GPS API bez časových razítek, ale nebudou chronologicky seřazeny. + Odeslat soubor GPX do OpenStreetMap + Zadejte značky oddělené čárkou. + Sledovatelná znamená, že trasa se neobjeví v žádném veřejném seznamu, ale body trasy budou dostupné prostřednictvím veřejného GPS API s časovými razítky. Ostatní uživatelé si budou moci stáhnout zpracované body z vaší trasy, které ale nebude možné přímo spojit s vámi. + Identifikovatelná znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Data poskytnutá prostřednictvím API se budou odkazovat na vaši původní stránku s trasou. Časová razítka bodů trasy budou dostupná prostřednictvím veřejného GPS API. + Zavřít OSM poznámku + Komentovat OSM poznámku + Můžete se přihlásit bezpečnou metodou OAuth nebo použít své přihlašovací jméno a heslo. + Přidat fotku + Zaregistrovat na +\nOpenPlaceReviews.org + Fotografie poskytuje open source projekt OpenPlaceReviews.org. Před odesláním svých fotografií se musíte zaregistrovat na webové stránce. + Vytvořit nový účet + Už mám účet + %1$s: %2$s + Zvolte podporovaný soubor s příponou %1$s. + V \'%1$s\' nejsou žádná pravidla pro navigaci. Zvolte prosím jiný soubor. + Zkontrolovat a sdílet podrobné záznamy aplikace + Pro použití této možnosti je potřeba oprávnění. + Můžete zvolit dodatečná data k exportu spolu s profilem. + Importovaný profil obsahuje dodatečná data. Klikněte na \"Import\" pro importování pouze profilových dat, nebo zvolte dodatečná data. + Zahrnout dodatečná data + Styl vykreslování + Navigace + Východ slunce v %1$s + Západ slunce v %1$s + %1$s/%2$s + Všechna nastavení profilu obnovena do základního nastavení. + Všechna nastavení modulů obnovena do výchozího stavu. + Zobrazit pouze v noci + Přidat vlastní kategorii + Dostupné + Novou kategorii můžete přidat výběrem jedné nebo více existujících kategorií. + Změňte pořadí seznamu, skryjte kategorie. Všechny změny můžete importovat a exportovat pomocí profilů. + Uspořádat kategorie + Režim usnadnění je ve vašem systému Android vypnutý. + Ve výchozím stavu vypnuto: běží-li OsmAnd na popředí, obrazovka se nevypne. +\n +\nJe-li zapnuto, OsmAnd vypne obrazovku podle systémového limitu. \ No newline at end of file From 7652fd047b166283f413f1818794d649f25b2c34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Sun, 15 Nov 2020 04:19:15 +0000 Subject: [PATCH 023/198] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 49.8% (1769 of 3552 strings) --- OsmAnd/res/values-nb/strings.xml | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index a3c944a780..9da1355799 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -2358,7 +2358,7 @@ Dropbox-tillegget lar deg synkronisere spor og lyd/video-notater med din Dropbox-konto. {0} interessepunkter/notater opplastet Lokalt lagrede OSM-interessepunkter/notater - Vis og behandle OSM-interessepunkter/notater i databasen på enheten. + Vis og behandle OSM-interessepunkter/notater i din enhetsdatabase. Ta opp spor ved bruk av GPX-modul eller via \'Turopptak\'-innstillinger. Innebygd bibliotek støttes ikke på denne enheten. Igangsetter innebygget bibliotek… @@ -2453,7 +2453,7 @@ GPX-fil OSC-fil Velg filtype - Velg eksporttypen: OSM-notater, interessepunkt eller begge. + Eksporter som OSM-notater, interessepunkter, eller begge. Alle data OSM-notater Tunnel foran @@ -2531,7 +2531,7 @@ Vis gratisversjonsbanner Vis gratisversjonsbanneret selv i den betalte versjonen. Sjekker inn knutepunkt… - Den siste kjøringen av OsmAnd kræsjet. Loggfilen finnes i {0}. Rapporter hendelsen og legg ved loggfilen. + Den siste kjøringen av OsmAnd krasjet. Loggfilen finnes i {0}. Rapporter hendelsen og legg ved loggfilen. Knutepunktet ble ikke funnet, eller så består fasiliteten av flere knutepunkter som ikke støttes ennå. På Android 4.4 (KitKat) og videre, er den gamle lagringsmappen (%s) ikke mulig. Kopier alle OsmAnd-filer til nytt lagringssted\? \n Merknad 1: Dine gamle filer forblir urørt (men kan slettes manuelt). @@ -3127,8 +3127,8 @@ Endre forvalgte hastighetsinnstillinger Sett min/maks -hastighet Ny profil - Kræsj - OsmAnd kræsjet tidligere. Hjelp til å forbedre OsmAnd ved å dele feilmeldingen. + Krasj + OsmAnd krasjet tidligere. Hjelp til å forbedre OsmAnd ved å dele feilmeldingen. UFO • Programprofiler: Opprett en egendefinert profil for dine egne behov, med egendefinert ikon og farge \n @@ -3887,11 +3887,28 @@ Nødsfall Reise Du må legge til minst to punkter. - + Sporbar betyr at sporet ikke vil vises i offentlige lister, men punkter fra det vil fremdeles ikke være tilgjengelige gjennom det offentlige GPS-API-et med tidsstempel. Andre brukere vil kun ha mulighet til å laste ned behandlede punkter fra ditt spor, noe som ikke kan tilknyttes deg direkte. Logg inn med OpenStreetMap Bruk innlogging og passord Konto Send GPX-fil til OpenStreetMap Fasilitet Markørhistorikk + Pauser spor-logging når programmet drepes (via nylige programmer). (OsmAnd-bakgrunnsindikatoren forsvinner fra Android-merknadsfeltet.) + START + Lukk OSM-notat + Kommenter OSM-notat + Skriv inn etiketter inndelt med komma. + Det har oppstått et problem med abonnementet ditt. Klikk på knappen for å gå til Google Play-abonnementsinnstillingene for å fikse din betalingsmetode. + OsmAnd-Live-abonnement utløpt + OsmAnd-Live-abonnement har blitt satt på vent + OsmAnd-Live-abonnement på vent + Du kan logge inn med den trygge OAuth-metoden, eller bruke ditt innloggingsbrukernavn og passord. + Registrer deg på +\nOpenPlaceReviews.org + Bilder tilbys av det åpne dataprosjektet OpenPlaceReviews.org. For å kunne laste opp bilder må du registrere deg på nettsiden. + Håndter abonnement + Legg til bilde + Opprett ny konto + Jeg har allerede en konto \ No newline at end of file From ea274dc6122e23d0b44e345f18b29b33cd58a6ff Mon Sep 17 00:00:00 2001 From: ovl-1 Date: Sat, 14 Nov 2020 16:35:43 +0000 Subject: [PATCH 024/198] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 49.8% (1769 of 3552 strings) --- OsmAnd/res/values-nb/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index 9da1355799..ec35b00fc7 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -3166,7 +3166,7 @@ Tastatur WunderLINQ Forvalg - % lagret + %s er lagret Dag Dager Dager @@ -3794,13 +3794,13 @@ \n \n%2$s er nivåene de opprinnelige flisene vil være synlige, oppskalering eller nedskalering finner sted utenfor disse verdiene. Rulleskøyter - I noen land og områder, er bruk av fotoboksvarsling forbudt ved lov. + I noen land og områder er bruk av fotoboksvarsling forbudt ved lov. \n \nDu må vurdere dette selv i henhold til lovene i ditt land. \n \nVelg %1$s og du vil motta varsler og advarsler om fotobokser. \n -\nVelg %1$s. All data som har med fotobokser å gjøre, varsler, merknader og interessepunkter vil bli slettet til OsmAnd reinstalleres helt og holdent. +\nVelg %2$s. Alle data som har med fotobokser å gjøre: varsler, meldinger og interessepunkter blir slettet til OsmAnd er fullstendig installert på nytt. Å utføre disse endringene vil tømme hurtiglagret data for denne fliskilden. Hent info om interessepunkter fra Wikipedia. Det er din frakoblede lommeguide - bare skru på Wikipedia-programtillegget og få artikler om objekter rundt deg. Utfylt @@ -3848,9 +3848,9 @@ Unngå gangveier Unngå gangveier Ekstra rett segment mellom min posisjon og utregnet rute vil bli vist til den er regnet ut på ny - OsmAnd sjekker %1$d for duplikater med eksisterende elementer i programmet. + OsmAnd sjekker %1$s for duplikater med eksisterende elementer i programmet. \n -\nDet kan ta sin tid. +\nDet kan ta noe tid. Du kan eksportere eller importere hurtighandlinger med programprofiler. Er du sikker på at du vil slette %d hurtighandlinger for godt\? Skjermtidsavbrudd From 3dcd3d31aa4e7e4b8f5e55aaa4aac6cc45b45b90 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Sat, 14 Nov 2020 15:33:15 +0000 Subject: [PATCH 025/198] Translated using Weblate (Sardinian) Currently translated at 99.7% (3543 of 3552 strings) --- OsmAnd/res/values-sc/strings.xml | 52 +++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 2245af22f2..fd038a717f 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -695,7 +695,7 @@ Imposta s\'ischermu e sas impostatziones comunes pro s\'aplicatzione. Impostatziones globales de s’aplicu Nùmene impreadore in OSM - Crae (password) in OSM + Crae de intrada Manualmente ebbia (carca sa fritza) Torra a repìtere sas istrutziones de navigatzione Impostatziones de sa mitza de sa mapa @@ -786,7 +786,7 @@ Subrapositziones fluorescentes Imprea colores fluorescentes pro visualizzare rastas e àndalas. Modìficas chene lìnia - Imprea semper sa modìfica chene lìnia. + Si sa sa modìfica chene lìnia est abilitada, sas modìficas ant a èssere sarvadas in locale, in antis, e carrigadas si benit pedidu. Si nono, ant a èssere carrigadas immediatamente. Sa modìficas de sos PDI intre s’aplicatzione non tenent efetos in sas mapas iscarrigadas, sunt imbetzes sarvadas in su dispositivu. {0} PDI/notas carrigados/as Càrriga sa modìfica in OSM @@ -911,7 +911,7 @@ Limba de interfache de s\'aplicatzione (impreada a pustis chi as a torrare a allùghere OsmAnd). Limba interfàtzia non cumpridu - Sighi + Imbeniente Antepostu Muda s\'unidade de mèdida pro sa distàntzia. Unidades de longària @@ -3368,7 +3368,7 @@ Puntu de incumintzu Rasta sarvada Su nùmene de su documentu est bòidu - Torra a comente fiat + Riprìstina Unu butone pro pònnere su tzentru de sa mapa comente puntu de tzucada e carculare s\'àndala pro sa destinatzione o abèrrere unu diàlogu pro ischertare sa destinatzione si su marcadore de sa destinatzione no est in sa mapa. Cheres isbodiare %1$s\? Diàlogu de iscarrigamentu de sa mapa @@ -3429,9 +3429,9 @@ Ricàrculu de s\'àndala Annùntzia Nùmene impreadore e crae - Custas impostatziones s\'aplicant a totu sos profilos. + Custas impostatziones de s\'estensione sunt globales, e s\'àplicant a totu sos profilos Modìfica de OSM - Pòmpia sas modìficas o sos errores de osm non carrigados tuos in %1$s. Sos puntos carrigados no ant a èssere ammustrados prus. + Podes pompiare totu sas modìficas o sas sinnalatziones de errores de OSM tuos galu non carrigados in %1$s. Sos puntos carrigados no ant a èssere ammustrados in OsmAnd. OSM Icona ammustrada durante sa navigatzione o su movimentu ebbia. Icona ammustrada in pàusa. @@ -3543,7 +3543,7 @@ OsmAnd tenet giai elementos cun su matessi nùmene de cussos importados. \n \nIscherta un\'atzione. - Carchi elementu esistit giai + Unos cantos elementos esistint giai Ischerta sos datos de importare. Istile de renderizatzione Importa unu documentu de renderizatzione @@ -3826,7 +3826,7 @@ Fùrria s\'àndala Sa rasta intrea at a èssere torrada a carculare impreende su profilu ischertadu. Petzi su segmentu imbeniente at a èssere torradu a carculare impreende su profilu ischertadu. - Ischerta comente connètere sos puntos: cun una lìnia reta o calculende un\'àndala intre issos comente dislindadu inoghe in suta. + Issèbera comente connètere sos puntos: cun una lìnia reta o carculende un\'àndala intre issos comente dislindadu inoghe in suta. Rasta intrea Segmentu imbeniente In su passu chi benit liga sa rasta tua a su caminu permìtidu prus a curtzu cun unu de sos profilos de navigatzione tuos pro impreare custa optzione. @@ -3939,4 +3939,40 @@ Sìmbulos Isport Biàgiu + MGRS + MGRS + OsmAnd impreat su MGRS, chi assimìgiat a su formadu UTM NATO. + Mapas locales + Servìtziu + Depes annànghere a su mancu duos puntos + Intra in OpenStreetMap + Intra in OpenStreetMap.org + Identìfica·ti cun OpenStreetMap + Depes intrare pro pòdere carrigare modìficas noas o mudadas. +\n +\nPodes intrare impreende su mètodu seguru OAuth o cun s\'identificadore (su nùmene de impreadore) tuo e sa crae de intrada tua. + Imprea un\'identificadore e una crae de intrada + Contu + Identificadore + Amministra s\'abbonamentu + B\'at unu problema cun s\'abbonamentu tuo. Incarca su butone pro andare a sas impostatziones de sos abbonamentos de Google Play pro acontzare sa manera de pagamentu tua. + S\'abbonamentu de OsmAnd Live est iscadidu + S\'abbonamentu de OsmAnd Live est istadu postu in pàusa + S\'abbonamentu de OsmAnd Live est in isetu + Cronologia de sos marcadores + Imbia unu documentu GPX a OpenStreetMap + Inserta sas etichetas iscrobadas dae vìrgulas. + Pùblica cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Sos datos frunidos pro mèdiu de s\'API non sunt ligados a sa pàgina de sa rasta tua. Sas datas integradas in sos puntos de rasta no ant a èssere a disponimentu pro mèdiu de s\'API GPS, e sos puntos no ant a èssere ordinados in manera cronològica. Nointames custu sos àteros impreadores ant a pòdere iscarrigare sa rasta su matessi dae sa lista pùblica de sas rastas cun totu sas datas e sas oras integradas. + Privada cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista, ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu chene datas e oras ma no ant a èssere ordinados in manera cronològica. + Identificàbile cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos datos frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua. Sas datas e sas oras de sos puntos ant a èssere a disponimentu pro mèdiu de s\'API GPS pùblicu. + Arrastàbile cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu cun sas datas. Àteros impreadores ant a pòdere iscarrigare petzi puntos de rasta protzessados dae sa rasta tua chi no ant a èssere assotziados diretamente cun tie. + Serra sa nota de OSM + Cummenta sa nota de OSM + Podes intrare impreende su mètodu seguru OAuth o cun su nùmene tuo e sa crae de intrada tua. + Annanghe una fotografia + Registra·ti in +\nOpenPlaceReviews.org + Sas fotografias benint frunidas dae su progetu a datos abertos OpenPlaceReviews.org. Pro pòdere carrigare sas fotografias tuas ti depes registrare in su situ. + Crea unu contu nou + Tèngio giai unu contu \ No newline at end of file From 8b146b437c0821b51a250c097798a17ddda6bdd0 Mon Sep 17 00:00:00 2001 From: Michal L Date: Mon, 16 Nov 2020 13:56:25 +0000 Subject: [PATCH 026/198] Translated using Weblate (Polish) Currently translated at 99.9% (3828 of 3830 strings) --- OsmAnd/res/values-pl/phrases.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index d048d53fdb..0d1fa62cc0 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -2051,7 +2051,7 @@ Benzyna 100-oktanowa ołowiowa LPG samolotowy Paliwo Jet A-1 - Dodatek AdBlue (wodny roztwór mocznika) + AdBlue (wodny roztwór mocznika) Uprawa: pasza do zwierząt Uprawa: malina Uprawa: maniok @@ -3829,7 +3829,7 @@ Tak Wibracja: nie Blok miejski - Gmina + Borough (okręg/część miasta) Give box (wystawka) Stan pompy: brak wiązki Strzałka: nie From 318fe5e14804a1e6eaf68d4c764b802a8b35b3db Mon Sep 17 00:00:00 2001 From: ace shadow Date: Sat, 14 Nov 2020 23:53:51 +0000 Subject: [PATCH 027/198] Translated using Weblate (Slovak) Currently translated at 95.1% (3645 of 3830 strings) --- OsmAnd/res/values-sk/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-sk/phrases.xml b/OsmAnd/res/values-sk/phrases.xml index 7dc2cc7a4c..01634dca7f 100644 --- a/OsmAnd/res/values-sk/phrases.xml +++ b/OsmAnd/res/values-sk/phrases.xml @@ -2490,7 +2490,7 @@ Popis pre slepých Popis pre hluchých Civilizácia: staroveká rímska (753 p. n. l. - 284 n. l.) - Civilizácia: nuragická (18.st. p. n. l. - 2.st. n. l.) + Civilizácia: nuragská (18.st. p. n. l. - 2.st. n. l.) Civilizácia: etruská (12. - 6.st. p. n. l.) Civilizácia: praveká Civilizácia: staroveká grécka From 1700dfb686f739bd96a3e9437371dc172245e64a Mon Sep 17 00:00:00 2001 From: Franco Date: Sat, 14 Nov 2020 14:43:31 +0000 Subject: [PATCH 028/198] Translated using Weblate (Spanish (Argentina)) Currently translated at 99.9% (3551 of 3552 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index d355464b8e..0e048a94db 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -600,7 +600,7 @@ Usar sensor magnético Otra Quedan %1$d archivos - %1$d archivos para descargar + Faltan descargar %1$d archivos Versión completa Descartar ruta Parar navegación @@ -1887,7 +1887,7 @@ Subir nota(s) de OSM Donaciones Número de destinatarios - Ediciones %1$s de %3$s, posición %2$s + Ediciones: %1$s de %3$s, posición: %2$s Clasificación de editores OSM Suscripción de OsmAnd Live Suscribirse @@ -2611,7 +2611,7 @@ \n Archivo GPX con coordenadas y datos de las notas elegidas. Archivo GPX con coordenadas y datos de todas las notas. - \'%1$s ediciones, suman %2$s mBTC\' + Ediciones: %1$s, total: %2$s mBTC Destinatarios de OSM Total de donaciones Aquí hay: @@ -3362,7 +3362,7 @@ Importar perfil Añade un perfil abriendo este archivo con OsmAnd. Error de importación de %1$s: %2$s - %1$s importado(s). + «%1$s» importado(s). Blanco Alternar %1$s y %2$s Punto de partida @@ -3432,7 +3432,7 @@ Nombre de usuario y contraseña Los ajustes de este complemento son globales y se aplican a todos los perfiles Edición de OSM - Puedes ver todas tus ediciones no subidas o errores de OSM en «%1$s». Los puntos subidos no se muestran en OsmAnd. + Puedes ver todas tus ediciones aún no subidas o errores de OSM en «%1$s». Los puntos subidos no se muestran en OsmAnd. OSM El icono se muestra mientras se navega o se mueve. El icono se muestra en reposo. @@ -3810,7 +3810,7 @@ Silla de ruedas (hacia adelante) Definir los días laborales para continuar Ruta entre puntos - Crear una ruta + Planificar ruta Añadir a una traza El punto añadido no será visible en el mapa, ya que el grupo elegido está oculto, se puede encontrar en «%s». Mostrar los iconos de inicio y fin @@ -3935,7 +3935,7 @@ El archivo ya fue importado en OsmAnd Usar el algoritmo de navegación A* bifásica Gráfico - %1$s datos disponibles sólo en los caminos, debes calcular una ruta usando «Ruta entre puntos» para obtenerla. + Hay %1$s datos disponibles sólo en los caminos, debes calcular una ruta usando «Ruta entre puntos» para obtenerla. Espera el recálculo de la ruta. \nEl gráfico estará disponible después del recálculo. %1$s — %2$s @@ -3981,5 +3981,5 @@ \nOpenPlaceReviews.org Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web. Crear nueva cuenta - Ya tengo una cuenta + Ya tengo cuenta \ No newline at end of file From e0a4259d7bdb2e563e42f7d2d9dd789e335aa299 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Sun, 15 Nov 2020 14:59:19 +0000 Subject: [PATCH 029/198] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3552 of 3552 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 38095d60c8..802205f9e0 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -3423,7 +3423,7 @@ Usuário e senha Essas configurações de plug-in são globais e se aplicam a todos os perfis Edição OSM - Você pode ver todas as suas edições descarregadas ou erros do OSM em %1$s. Os pontos carregados não aparecem no OsmAnd. + Você pode ver todas as suas edições ainda não carregadas ou erros de OSM em %1$s. Os pontos carregados não aparecem no OsmAnd. OSM Ícone mostrado ao navegar ou mover. Ícone mostrado em repouso. @@ -3964,4 +3964,13 @@ Privado significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de trilha dele ainda estarão disponíveis por meio da API GPS pública sem carimbos de data/hora, mas não serão ordenados cronologicamente. Identificável significa que o traço será mostrado publicamente em Seus traços de GPS e em listas públicas de traços de GPS, ou seja, outros usuários poderão fazer download do traço bruto e associá-lo ao seu nome de usuário. Os dados fornecidos por meio da API de pontos de trilha farão referência à sua página de rastreamento original. Os carimbos de data/hora dos pontos de rastreamento estão disponíveis por meio da API GPS pública. Rastreável significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de trilha dele ainda estarão disponíveis por meio da API GPS pública com carimbos de data/hora. Outros usuários só poderão baixar pontos de trilha processados de seu trace, que não podem ser associados a você diretamente. + Fechar nota do OSM + Comentário de nota do OSM + Você pode entrar usando o método OAuth seguro ou usar sua entrada e senha. + Adicionar foto + Cadastre-se em +\nOpenPlaceReviews.org + As fotos são fornecidas pelo projeto de dados abertos do OpenPlaceReviews.org. Para carregar suas fotos você precisa se inscrever no site. + Criar nova conta + Eu já tenho uma conta \ No newline at end of file From 90aeea69929e302203a46c6affb73142cf3a5c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Sat, 14 Nov 2020 20:55:33 +0000 Subject: [PATCH 030/198] Translated using Weblate (Estonian) Currently translated at 99.0% (3519 of 3552 strings) --- OsmAnd/res/values-et/strings.xml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-et/strings.xml b/OsmAnd/res/values-et/strings.xml index 5907bb1d8f..3db38e3311 100644 --- a/OsmAnd/res/values-et/strings.xml +++ b/OsmAnd/res/values-et/strings.xml @@ -1901,7 +1901,7 @@ Kui vara soovid kohale jõudmise teavitust\? Helkivad ülekatted Võrguühenduseta muutmine - Kasuta alati võrguühenduseta muutmist. + Kui võrguühenduseta muutmine on kasutusel, siis muudatused salvestatakse esmalt kohalikus nutiseadmes ning laetakse üles eraldi päringuga. Muul juhul laetakse muudatused üles koheselt. Üles laadimine… {0} huvipunkti/märget üles laetud Lae kõik üles @@ -3398,7 +3398,7 @@ Mõned kirjed on juba olemas OsmAndis on juba samade nimedega kirjed kui need, mis imporditud. \n -\nVali toiming. +\nVali tegevus. Imporditud kirjetele lisatakse eesliide Säilita mõlemad Asenda kõik @@ -3812,4 +3812,13 @@ \nSa võid selleks kasutada mõnd turvalust OAuth võimalust või oma kasutajanime ning salasõna. Kasutajakonto Saada GPX fail OpenStreetMappi + Sulge OSM märkus + Kommenteeri OSM märkust + Sa võid sisse logida kasutades mõnda turvalist OAuth\'i meetodit või oma kasutajanime ja salasõna alusel. + Lisa foto + Registreeru +\nOpenPlaceReviews.org saidis + Fotode allikaks on OpenPlaceReviews.org veebisait. Oma fotode üleslaadimiseks peaksid liituma selle veebisaidi kasutajaks. + Loo uus kasutajakonto + Mul juba on kasutajakonto olemas \ No newline at end of file From 64cb66108fadac6ed45f85ae52ff415c89785537 Mon Sep 17 00:00:00 2001 From: Franco Date: Sat, 14 Nov 2020 14:38:00 +0000 Subject: [PATCH 031/198] Translated using Weblate (Spanish (American)) Currently translated at 99.9% (3551 of 3552 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 29 ++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index 4543d260c6..dedb0d0009 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -985,7 +985,7 @@ Usar superpuestos fluorescentes Usa colores fluorescentes para mostrar trazas y rutas. Edición sin conexión - Usa siempre edición sin conexión. + Si se activa la edición sin conexión, los cambios serán guardados localmente primero y serán cargados por solicitud, de lo contrario los cambios serán cargados inmediatamente. Los cambios de PDI dentro de la aplicación no afectan a los archivos de mapa descargados; en su lugar, los cambios se guardan como un archivo en el dispositivo. Subiendo… {0} PDI/notas de OSM subidos @@ -1881,7 +1881,7 @@ \n Se utiliza {3} MB temporalmente, {1} MB constantemente. (De {2} MB.) Donaciones Número de destinatarios - Ediciones %1$s de %3$s, posición %2$s + Ediciones: %1$s de %3$s, posición: %2$s Clasificación de editores OSM Suscripción de OsmAnd Live Suscribirse @@ -2626,7 +2626,7 @@ Archivo GPX con coordenadas y datos de todas las notas. Acciones Marcador - %1$s ediciones, suman %2$s mBTC + Ediciones: %1$s, total: %2$s mBTC Destinatarios de OSM Total de donaciones Sin nombre @@ -3366,7 +3366,7 @@ Alternar %1$s y %2$s Punto de partida Estima el tiempo de llegada para los tipos de caminos desconocidos, y limita la velocidad para todos los caminos (puede afectar a la ruta) - %1$s importado(s). + «%1$s» importado(s). Traza guardada Nombre del archivo vacío Revertir @@ -3432,7 +3432,7 @@ Nombre de usuario y contraseña Los ajustes de este complemento son globales y se aplican a todos los perfiles Edición de OSM - Puedes ver todas tus ediciones no subidas o errores de OSM en «%1$s». Los puntos subidos no se muestran en OsmAnd. + Puedes ver todas tus ediciones aún no subidas o errores de OSM en «%1$s». Los puntos subidos no se muestran en OsmAnd. OSM El icono se muestra mientras se navega o se mueve. El icono se muestra en reposo. @@ -3779,7 +3779,7 @@ \nPulsa en «%2$s», para borrar todos los datos relacionados con los radares de velocidad (alertas, notificaciones y PDI) hasta reinstalar OsmAnd completamente. Mantener Desinstalar - Mostrar/ocultar Mapillary + Mostrar u ocultar Mapillary Ocultar Mapillary Mostrar Mapillary Un botón que alterna la capa de Mapillary en el mapa. @@ -3807,7 +3807,7 @@ Definir los días laborales para continuar Elegir la anchura Ruta entre puntos - Crear una ruta + Planificar ruta Nota de OSM cerrada Marca la opción de división deseada: por tiempo o por distancia. Marca el intervalo en el que se mostrarán las marcas con distancia o tiempo en la traza. @@ -3935,7 +3935,7 @@ MGRS MGRS OsmAnd usa MGRS, similar al formato UTM de la OTAN. - %1$s datos disponibles sólo en los caminos, necesitas calcular una ruta usando «Ruta entre puntos» para obtenerla. + Hay %1$s datos disponibles sólo en los caminos, debes calcular una ruta usando «Ruta entre puntos» para obtenerla. Espera el recálculo de la ruta. \nEl gráfico estará disponible después del recálculo. %1$s — %2$s @@ -3949,14 +3949,14 @@ Comodidad El archivo ya fue importado en OsmAnd Iniciar sesión - Utilice nombre de usuario y contraseña + Usar nombre de usuario y contraseña Hay un problema con la suscripción. Pulsa el botón para ir a los ajustes de la suscripción de Google Play y corregir el método de pago. La suscripción a OsmAnd Live se ha pausado La suscripción a OsmAnd Live está en espera La suscripción a OsmAnd Live ha caducado Ingresar con OpenStreetMap Enviar archivo GPX a OpenStreetMap - Necesitas iniciar sesión para subir cambios nuevos o modificados. + Debes iniciar sesión para subir cambios nuevos o modificados. \n \nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña. Debes añadir al menos dos puntos @@ -3970,4 +3970,13 @@ Privado significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo. Identificable significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Las marcas de tiempo de los puntos de la traza estarán disponibles a través de la API pública de GPS. Ingresa etiquetas separadas por comas. + Añadir foto + Ya tengo cuenta + Crear nueva cuenta + Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web. + Registrarse en +\nOpenPlaceReviews.org + Puedes iniciar sesión con el método seguro de OAuth o usar el nombre de usuario y contraseña. + Comentar nota de OSM + Cerrar nota de OSM \ No newline at end of file From 3eb70d117d07a05e62128f4af88eb37ed154094b Mon Sep 17 00:00:00 2001 From: Verdulo Date: Sat, 14 Nov 2020 15:15:39 +0000 Subject: [PATCH 032/198] Translated using Weblate (Esperanto) Currently translated at 100.0% (3552 of 3552 strings) --- OsmAnd/res/values-eo/strings.xml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 8c8dd3f2c4..ea11a3cdb0 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -1280,8 +1280,8 @@ Mankas memoro por montri elektitan regionon Rebrilaj surtavoloj Uzi rebrilajn kolorojn por montri kursojn kaj vojojn. - Eksterreta redaktado - Ĉiam uzi eksterretan redaktadon. + Malkonekta redaktado + Se malkonekta redaktado estas ŝaltita, ŝanĝoj estos unua konservitaj loke kaj alŝutitaj al OSM je peto; alie ŝanĝoj estos alŝutitaj tuj. Redakto de interesejo en aplikaĵo ne kaŭzas ŝanĝon en elŝutitaj map-dosieroj, ŝanĝoj estas konservitaj en dosieron en via aparato. Alŝutado… Alŝutis {0} interesejojn/notojn @@ -3426,7 +3426,7 @@ Uzantnomo kaj pasvorto Tiuj ĉi agordoj pri kromprogramoj aplikos al ĉiuj profiloj OSM‑redaktilo - Vi povas vidigi ĉiujn viajn nepublikigitajn redaktojn aŭ rimarkojn ĉe %1$s. Punktoj alŝutitaj al OSM ne estos videblaj en OsmAnd. + Vi povas vidigi ĉiujn viajn jam nepublikigitajn redaktojn aŭ rimarkojn ĉe %1$s. Punktoj alŝutitaj al OSM ne estos videblaj en OsmAnd. OSM Emblemo montrata dum navigi aŭ moviĝi. Montri emblemon dum restado. @@ -3968,4 +3968,13 @@ “Privata” signifas, ke la GPX‑spuro montriĝos en neniu publika listo, sed ĝiaj punktoj plue estos akireblaj per la publika API GPS sen tempindikoj, sed tiuj punktoj estos ordigitaj laŭtempe. “Identigebla” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj), aliaj uzantoj povos elŝuti vian nepritraktitan spuron kaj ligi ĝin al via uzantnomo. Datumoj liveritaj per la API de spuroj ligos al originala paĝo de via spuro. Tempindikoj de la spuro estos akireblaj per la publika API GPS. “Spurebla” signifas, ke la GPX‑spuro ne estos montrata en publikaj listoj, sed punktoj el ĝi plue estos akireblaj per la publika API GPS kune kun tempindikoj. Aliaj uzantoj povos elŝuti nur pritraktitajn punktojn el via spuro, kiuj ne povos esti senpere ligitaj al vi. + Fermi OSM-rimarkon + Komenti OSM-rimarkon + Vi povas ensaluti per l sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. + Aldoni foton + Registri ĉe +\nOpenPlaceReviews.org + Fotoj estas liverataj de la malferm‑datuma projekto OpenPlaceReviews.org. Por alŝuti viajn fotojn, vi devas registri ĉe la retejo. + Krei novan konton + Mi jam havas konton \ No newline at end of file From 7fd7ab9ff60b185de87edb1e33d2dce4cad9884f Mon Sep 17 00:00:00 2001 From: abdullah abdulrhman Date: Mon, 16 Nov 2020 17:41:10 +0000 Subject: [PATCH 033/198] Translated using Weblate (Arabic) Currently translated at 73.9% (2834 of 3830 strings) --- OsmAnd/res/values-ar/phrases.xml | 779 +++++++++++++++++++++++++++++-- 1 file changed, 736 insertions(+), 43 deletions(-) diff --git a/OsmAnd/res/values-ar/phrases.xml b/OsmAnd/res/values-ar/phrases.xml index 69a258fa89..7a6b10d26f 100644 --- a/OsmAnd/res/values-ar/phrases.xml +++ b/OsmAnd/res/values-ar/phrases.xml @@ -55,7 +55,7 @@ البعثة الدائمة القنصلية العامة القنصلية - الحد الأدنى للسن + الحد الإدنى للعمر تربية الأحياء المائية محطة الضخ عوائق الطريق @@ -64,9 +64,9 @@ متجر المزرعة أماكن الإقامة أوقات الفراغ - تربية الأحياء المائية: بلح البحر + تربية الأحياء المائية: بلح البحر/محار تربية الأحياء المائية: الأسماك - تربية الأحياء المائية: الجمبري + تربية الأحياء المائية: الروبيان مسارات المشي الخلوي متجر شاي متجر الحلويات @@ -130,7 +130,7 @@ الاسم البلدي الاسم القديم الاسم البديل - الإسم الرسمي + الاسم الرسمي قرية مدينة صغيرة موقع إنترنت @@ -188,7 +188,7 @@ سلع رياضية متجر هاي فاي متجر أدوات التنزه والرحلات - طول + الطول خزان ماء قنصلية شرفية متجر تقنيات الراديو @@ -286,8 +286,8 @@ مكتب عسكري قاعدة بحرية عسكرية عسكر - نقطة مراقبة عسكرية - عسكرية + نقطة تفتيش عسكرية + عسكري رمال/نفود رمل منطقة سكنية @@ -361,22 +361,22 @@ ملعب مركز رياضي ملاحظة - مكان سقي - مصعد للحيوان - نوع المصعد لـ: كلب - نوع المصعد لـ: قط - نوع المصعد لـ: كلب، قط - نوع المصعد لـ: حصان + منطقة ري + رعاية الحيوانات + نوع الرعاية: كلب + نوع الرعاية: قطط + نوع الرعاية: كلاب، قطط + نوع الرعاية: خيول طائرات تاريخية متجر عسل بالمصعد بدون مصعد مكتب التخييم مكتب توجيه - مكتب استشارة - مكتب تعاونية + مكتب استشاري + مكتب تعاوني مكتب الغابات - مكتب السوقيات + مكتب اللوجستيات مكتب رعية الكنيسة مكتب النشر الوصول إلى المراحيض بالكراسي المتحركة: نعم @@ -1306,27 +1306,27 @@ جسر ممر مائي وصف للمكفوفين وصف للصم - الدرج + درج مُزيلُ الرَّجَفان مُزيلُ الرَّجَفان : نعم - النوع : كولومباريوم + النوع : جرار النوع : ضريح النوع : تابوت - النوع : هرمي + النوع: هرم الحضارة : عصور ما قبل التاريخ الحضارة : اليونانية القديمة - الحضارة : رومانية + الحضارة الرومانية الحضارة : الميسينية - الحقبة التاريخية : العصر الحجري الحديث - الحقبة التاريخية : النحاسي (الألفية الرابعة إلى الثالثة قبل الميلاد) - المواد : خشب - المواد : معدن - المواد : بلاستيك - المواد : زجاج + العصر التاريخي: العصر الحجري الحديث + العصر التاريخي: العصر الحجري القديم (الألف الرابع والثالث قبل الميلاد) + المادة: خشب + المادة: معدن + المادة: البلاستيك + المادة: زجاج المواد : الألومنيوم مدينة مزرعة تاريخية - محطة سكك حديدية تاريخية + محطة سكة حديد تاريخية فنان نحات درجة الحرارة @@ -1334,8 +1334,8 @@ الاستحمام : لا يوجد الركاب المركبات - دراجات هوائية - حاويات + الدراجات + الحاويات مركز اللياقة البدنية منتدى القراصنة طب العيون @@ -1358,10 +1358,10 @@ الطب النفسي للأطفال الأشعة التشخيصية أمراض الجهاز الهضمي - أمراض الكلي (أمراض الكلي) - جراحة عصبية + طب وأمراض الكلى + الجراحة العصبية الطب النفسي العصبي - علم الغدد الصماء + الغدد الصماء الطب النووي علم الأورام طب التوليد (بعد الولادة) @@ -1386,7 +1386,7 @@ تنس الريشة كرة القدم داخل الصالات الملاكمة - في صدد الإنشاء + تحت الإنشاء صراف آلي : نعم صراف آلي : لا يوجد التجارة العادلة : نعم @@ -1513,18 +1513,18 @@ النوع: منفذ النوع: مستودع معلم تقني - نموذج مطار + مطار طائرات عن بعد منظمة غير حكومية إصلاح إلكترونيات الطول طبيب عام طب باطني - جراحة عظام + طب العظام الأنف والأذن والحنجرة الأشعة المعالجة بالإشعاع - فيزيائي-تناسلية - الاصابات + جلدية-تناسلية + الرضوض احياء سريرية تجبير العظام التخدير @@ -1534,9 +1534,9 @@ الطب الطبيعي وإعادة التأهيل جراحة الفك-الوجه طب الأسنان - تشريح مرضي + التشريح المرضي الطب الاستوائي - التخصصات الصحية: طب المناطق المدارية: لا يوجد + التخصص الصحي: الطب الاستوائي: لا التخصصات الصحية: طب التوليد (بعد الولادة): لا يوجد التخصصات الصحية: طب التوليد (ما قبل الولادة): لا يوجد التخصصات الصحية: طب الأطفال الاجتماعية: لا يوجد @@ -1546,15 +1546,15 @@ الطب النفسي للكبار معالجة المثلية علاج بالطاقة - أعشاب طبية + طبيب الأعشاب العلاج بتقويم العمود الفقري العلاج الطبيعي علم عمق النفس الأدوية المسكنة - نوع البناء: الهرم + نوع البناء: هرمي النوع: سطح - حافظات - مرآب + كراجات مخصصة + مواقف سيارات مظللة مركز تدريب فنون يابانية الألعاب الغيلية الجري @@ -2193,4 +2193,697 @@ الشحن: لا الشحن: نعم بيع الدراجات المستعملة بالتجزئة: لا + براسيري + أودون + سوكي + ياكينيكو + كريب + امبانادا + جيروس + زبادي + وجبة خفيفة + سوفلاكي + سموذي (عصير فواكه) + فلافل + بيادينا + تاكو + مقصف + الحلوي + دجاج مقلي + كسكس + مخبز + الفطائر اللذيذة + طعام مقلي + زبادى مثلج + سلطة + محل أطعمة مستوردة + نقانق + حساء/مرق + متجر شاي + شاي + طعام فاخر + سوبا + عصير + وجبات سريعة + معكرونة باستا + كيك + سجق + العشاء + بايغل + شواء + كاري + تاباس + شريحة لحم (ستيك) + جيودون + إفطار + كريب (بان كيك رقيق) + رامن + دونات + المعكرونة + مشويات + مأكولات بحرية + السمك والبطاطا + سوشي + آيس كريم + دجاج + كباب + ساندويتش + المأكولات/المشروبات + قهوة + برجر + بيتزا + النوع: رف + النوع: كبينة/خزانة معدنية + النوع: كبينة/خزانة خشبية + النوع: كشك القراءة + النوع: كشك الهاتف + خزانة الكتب العامة + تصريف المراحيض: دلو + تصريف المراحيض: مادة كيميائية + تصريف المراحيض: حفرة أرضية + تصريف المراحيض: شطف + مشغل/عامل المطافي + المرآة المرورية + فقط + لا + نعم + لوحة توزيع رئيسية + عرض معلومات الركاب: نعم + عرض معلومات الركاب: نعم + الحامل/تستند إلى: برج + الحامل/تستند إلى: السطح + الحامل/تستند إلى: معلق + الحامل/تستند إلى: السقف + الحامل/تستند إلى: لوحة إعلانية + الحامل/تستند إلى: الأرض + الحامل/تستند إلى: قاعدة + الحامل/تستند إلى: الشجرة + الحامل/تستند إلى: الجدار + الحامل/تستند إلى: عامود + عرض التاريخ: لا + عرض التاريخ + مقياس الرطوبة: لا + مقياس الرطوبة + مقياس الحرارة: لا + مقياس الحرارة + مقياس البارومتر: لا + مقياسا + مزولة + العرض الرقمي + العرض التناظري + العرض: لا + العرض: نعم + الناتج: الغاز الحيوي + انتاج الطاقة من الغاز الحيوي + الناتج: فراغ + الناتج: هواء مضغوط + طاقة إخراج الهواء المضغوط + الناتج: ماء بارد + الناتج: هواء ساخن + الناتج: بخار + الناتج: الماء الساخن + انتاج الطاقة من الماء الساخن + الناتج (كهرباء): لا + الناتج: الكهرباء + الطاقة الناتجة + الجهد الكهربائي + البستنة الدفيئة + الجاذبية + الأرصاد الجوية + الاستخدام: التجسس + الاستخدام: البحث + الاستخدام: التجسس + الاستخدام: التعليم + الطيف + قطر + غاما + راديو + بصري + مِرصَد + بطاقة الترويكا غير مقبولة + ترويكا + حالة المضخة: مغلقة + حالة المضخة: متعطلة + حالة المضخة: جيدة + نمط المضخة: تاريخي + نمط المضخة: حديث + نوع المضخة: الجاذبية + نوع المضخة: الهند MK II أو III> + نوع المضخة: مضخة عارضة + عمود التهوية + بالكا (وادي عشبي به منحدرات) + خاص + عسكري/عام + عام + إقليمي + دولي + الأدوية الموصوفة: لا + نعم + مراقبة العبور: الكاميرا + مراقبة العبور: ميداني + مراقبة العبور: لا + مراقبة العبور + معبر تقاطع:لا + معبر تقاطع + العبور عند الطلب: لا + العبور عند الطلب + إشارة ضوئية للعبور:لا توجد + إشارة ضوئية للعبور + جرس العبور:لا يوجد + جرس العبور + حاجز العبور: مزدوج لكل منتصف + حاجز العبور: نصف الطريق + حاجز العبور: كامل الطريق + حاجز العبور + حاجز العبور: لا + تفعيل المعبر: عن بعد + تفعيل المعبر: محلي + تفعيل المعبر: آلي + مخيم صيفي + كومة ركام + المحددة + ملح: لا + ملح + العمق + ستريتبود (نوع موقف دراجات) + شجرة الدراجات + خزائن + نوع الكبينة/الخزانة: إنارة الشوارع + نوع الكبينة/الخزانة: إدارة المياه + نوع الكبينة/الخزانة: النفايات + نوع الكبينة/الخزانة: خدمة بريدية + نوع الكبينة/الخزانة: غاز + نوع الكبينة/الخزانة: اتصالات + نوع الكبينة/الخزانة: طاقة + في الخدمة: نعم + صهريج + مجرى + بركه + رئيسي + الخدمة الصحية: رعاية الأطفال: لا + الخدمة الصحية: رعاية الأطفال: نعم + الخدمة الصحية: الفحص: لا + الخدمة الصحية: الفحص: نعم + الخدمة الصحية: الاستشارة: لا + الخدمة الصحية: الاستشارة: نعم + الخدمة الصحية: تمريض: لا + الخدمة الصحية: تمريض: نعم + أوناني + سيدا + التبتية التقليدية + المنغولية التقليدية + كامبو + أيورفيدا + صينية تقليدي + غربي + محطة تفريغ صحية + إرشادات الزائر: لا + إرشادات الزائر: نعم + لا يوجد وقت محدد (طيران حر) + اتجاه موقع الطيران الحر: شمال غرب + اتجاه موقع الطيران الحر: غرب + اتجاه موقع الطيران الحر: جنوب غرب + اتجاه موقع الطيران الحر: جنوب + اتجاه موقع الطيران الحر: جنوب شرق + اتجاه موقع الطيران الحر: شرق + اتجاه موقع الطيران الحر: شمال شرق + اتجاه موقع الطيران الحر: شمال + الطيران الحر الجامد: لا + جامد + القفز المظلي: لا + القفز المظلي + الطيران الشراعي: لا + الطيران الشراعي + رسمي: لا + رسمي: نعم + تدريب + سحب + الهبوط المظلي + الهبوط + الاقلاع + زر تشغيل: لا + زر تشغيل: نعم + صنبور ماء + الطيران الحر (رياضة) + مكنسة كهربائية + مكنسة كهربائية: لا + نعم + نعم + مكيف هواء بارد: لا + نعم + العناية بالنباتات + اسم المنزل + الانفجار: الجهاز + الانفجار: رأس حربي + انفجار: قطر الحفرة + وابل الانفجار: التفجير الثاني أو اللاحق لاختبار الطلقات + انفجار: أول تفجير لاختبار إطلاق قذائف + حجم موجة الجسم + ارتفاع الأرض صفر + ارتفاع الانفجار + حفرة الانفجار + عائد الانفجار + وقت الانفجار (UTC) + الغرض من الانفجار: التطبيقات الصناعية ، تحريك التربة + الغرض من الانفجار: التطبيق الصناعي + الغرض من الانفجار: الاستعمال الصناعي ، تنشيط الزيت + الغرض من الانفجار: التطبيقات الصناعية ، السبر الزلزالي + الغرض من الانفجار: التطبيق الصناعي ، حفر التجويف + الغرض من الانفجار: العلوم الأساسية + الغرض من الانفجار: البحث عن التطبيقات السلمية + الغرض من الانفجار: تجربة السلامة + الغرض من الانفجار:تجربة آثار الأسلحة + الغرض من الانفجار: ذا علاقة بالأسلحة النووية + سلسلة الانفجار + اسم اللقطة (en) + تاريخ الانفجار (UTC) + نوع الانفجار: تحت الماء + نوع الانفجار: الفضاء (ارتفاع أكثر من 80 كم) + نوع الانفجار: الغلاف الجوي أو قذيفة أو الصاروخ + نوع الانفجار: انفجار فوهة (تحت سطح ضحل) + نوع الانفجار: تحت الارض + نوع الانفجار: الغلاف الجوي، سطح الماء، البارجة + نوع الانفجار: الغلاف الجوي ، السطح + نوع الانفجار: الغلاف الجوي ، بالون + نوع الانفجار: الغلاف الجوي ، السطح ، البرج + نوع الانفجار: الغلاف الجوي ، الإنزال الجوي + نوع الانفجار: الغلاف الجوي + نوع الانفجار: تحت الأرض ، نفق + نوع الانفجار: تحت الأرض، رمح + انفجار: موقع + انفجار: بلد + الكيان المحمي: المياه + الكيان المحمي: المسكن + الكيان المحمي: الطبيعة + الكيان المحمي: تاريخي + عنوان الحماية + باندي + كبينة/خزنة شارع + حفرة النار + صراف آلي: نعم + نقش: شمال شرقي + النقش: شرق + النقش: جنوب شرقي + النقش: جنوب + النقش: جنوب غربي + النقش: غرب + النقش: شمال غربي + النقش: شمال + لافتة: تخصيص الغابات + لافتة: مقصورة الغابات + التخصص الصحي: ولادة (قيصرية): لا + العلاج الإشعاعي + مركبات الحمولة الثقيلة + الرقم المرجعي + مرجع النفق + مرجع الجسر + نقل: نعم + مخزن القوارب + النوع: معسكر العمل + مربع + سكة حديد تاريخية + البيدر التاريخي + نوع التحصين: خندق دائري + حصن وقائي صغير + نوع التحصين: الجير + حصن التلال + بتروجليف + مقبرة كبيرة قديمة + دائرة الكوخ + مستعمرة + حصن + تومولوس + المغليث حجر ضخم + المواد: الرخام + المواد: الحجر الجيري + المواد: مركب + المادة: الأرض + المواد: البرونز + المواد: معدن ، خشب + المادة: حجر الجرانيت + المواد: الحجر الرملي + المادة: لبنة + المواد: البناء + المادة: حجر + المادة: فولاذ + المادة: الخرسانة + المادة: الخرسانة المسلحة + حجر تاريخي + العصر التاريخي: الميزوليتي + العصر التاريخي: العصر الحجري القديم (2.6 مليون سنة - 10000 سنة مضت) + حقبة تاريخية: الإمبراطورية (العهد الخامس ، 900 م - 1200 م) + حقبة تاريخية: الكلاسيكية (الحقبة الرابعة ، 374 م - 900 م) + حقبة تاريخية: حضري (العهد الثالث ، 133 م - 374 م) + الفترة التاريخية: القروي (الحقبة الأولى والثانية، 1580 قبل الميلاد – 133 م) + حقبة تاريخية: السيادة (285 م - 476 م) + حقبة تاريخية: المملكة الرومانية (753 قبل الميلاد - 509 قبل الميلاد) + حقبة تاريخية: اليونان الرومانية (146 ق.م - 330 م) + حقبة تاريخية: العصور المظلمة اليونانية (1100 - 800 قبل الميلاد) + يوناني + فرنسي + آسيوي + أمريكي + هندي + ألمانية + ياباني + مكسيكي + صينى + إيطالي + إقليمي + فطيرة دائرية + بان كيك (فطيرة مسطحة) + شرائح كباب (شاورما) + شاورما + ترياكي (مشويات يابانية) + بوريتو (تورتلا مكسيكي) + باستيل (معجنات بالأسباني) + خبز صامولي فرنسي + مخفوق بالجبن + بيتا (خبز مفرود صغير) + فرعي + بطاطس + شوكولاتة + وافل + أجنحة + لحم + ساغاردوتيا + ياكيتوري + الشاي البارد + حقبة تاريخية: الاحتلال الفارسي + حقبة تاريخية: مصر البيزنطية (30 ق.م - 641 م) + حقبة تاريخية: مصر المسيحية + حقبة تاريخية: مصر البطلمية (305 ق.م - 30 ق.م) + حقبة تاريخية: الإسكندر الأكبر + حقبة تاريخية: الفترة الفارسية الثانية + حقبة تاريخية: الفترة المتأخرة (664 - 332 قبل الميلاد) + حقبة تاريخية: الفترة الفارسية الأولى + حقبة تاريخية: الفترة الانتقالية الثالثة (1069 - 664 قبل الميلاد) + حقبة تاريخية: الفترة الانتقالية الثانية (1650 - 1550 قبل الميلاد) + حقبة تاريخية: الفترة الانتقالية الأولى (2181 - 2055 قبل الميلاد) + حقبة تاريخية: المملكة القديمة (2686 - 2181 قبل الميلاد) + حقبة تاريخية: أوائل فترة الأسرات (3100 - 2686 قبل الميلاد) + حقبة تاريخية: مصر ما قبل الأسرات + حقبة تاريخية: المملكة الوسطى (2055 - 1650 قبل الميلاد) + حقبة تاريخية: مملكة جديدة (1550 - 1069 قبل الميلاد) + حقبة تاريخية: اليونان الهلنستية + حقبة تاريخية: الجمهورية الرومانية (508 قبل الميلاد - 27 قبل الميلاد) + حقبة تاريخية: العصر الحديدي + حقبة تاريخية: اليونان القديمة + حقبة تاريخية: اليونان الكلاسيكية (القرن الخامس - الرابع قبل الميلاد) + حقبة تاريخية: مبدأ (27 ق.م - 284 م) + حقبة تاريخية: العصر البرونزي + حقبة تاريخية: العصر الحجري / العصر البرونزي (غير محدد) + حقبة تاريخية: نوراجيك + الحيوانات مسموح بها + الحيوانات غير مسموح بها + خيل + تدريب الحيوانات + الحضارة: تياهواناكوتا + الحضارة: مينوان + الحضارة: هيلادي + الحضارة: هيلادي + الحضارة: الرومانية والبيزنطية المصرية + الحضارة: المصرية اليونانية (332 قبل الميلاد – 30 قبل الميلاد) + الحضارة: هيرنيسي + الحضارة: داتشيان + الحضارة الرومانية الغربية (285 م - 476 م) + الحضارة: سلتيك + الحضارة المصرية القديمة (حتى 332 قبل الميلاد) + الحضارة: الإمبراطورية الصينية (221 قبل الميلاد - 1911 م) + الحضارة: البيزنطية (285 م - 1453 م) + الحضارة: الترورية (القرن الثاني عشر والسادس قبل الميلاد) + الحضارة: النوراجية (القرن الثامن عشر قبل الميلاد - القرن الثاني الميلادي) + الحضارة الرومانية القديمة (753 ق.م - 284 م) + النوع: سرداب + النوع: خزنة + النوع: تحت الأرض + النوع: قطع الصخور + النوع: رمل + النوع: قبر حرب + رِجّم (صخور مركومة) علامة + عتبات مختلفة أو مائلة + عتبات غير متساوية + عتبات متساوية + عدد الدرجات (العتبات) + منحدر للأمتعة: لا + منحدر للأمتعة: نعم + منحدر للدراجات: لا + منحدر للدراجات: نعم + منحدر (عربة أطفال): لا + منحدر (عربة أطفال): نعم + منحدر للكراسي المتحركة: لا + منحدر للكراسي المتحركة: نعم + منحدر: لا + منحدر: نعم + الدرابزين: لا + الدرابزين: نعم + وصف لمستخدمي الكراسي المتحركة + المنتج: لحم + المنتج: فحم + المنتج: الجير الحي + المنتج: الجير + المنتج: الجلود + المنتج: الطوب + فرن + الطفل الحدث + المرضى + العاطلين عن العمل + مدمنوا المخدرات + المحرومين + المهاجرين + المشردين + الأحداث + مرضى الاضطرابات النفسية + ذوي الاحتياجات الخاصة + الأيتام + الأطفال + كبار السن + الرعاية النهارية + ورشة عمل + الرعاية الإسعافية + مأوى + بنك الطعام + التوعية + مساعدة معيشية + دار جماعية + اللاجئون: لا + وسائل الراحة للاجئين + الكلاب غير مسموح بها + الكلاب مسموح بها + الحد الأقصى للكرفانات + الحد الأقصى من الخيام + امدادات الطاقة (المقبس): NEMA 5-15 + مصدر الطاقة (المقبس): CEE 7/5 + مصدر الطاقة (المقبس): CEE 7/4 + مصدر الطاقة (المقبس): CEE 17 أزرق + مزود طاقة: لا + نعم + محطة تفريغ صحية: لا + محطة تفريغ صحية: نعم + تخييم غير ثابت: لا + تخييم غير ثابت: نعم + كرفان: لا + نعم + دش: داخلي + دش: بارد + دش: في الخارج + دش: ساخن + دش: لا + دش: نعم + نعم + غسالة: لا + نعم + المجموعة فقط: لا + المجموعة فقط: نعم + المخيم الكشفي: لا + نعم + لا + نعم + لا يسمح بإشعال النار + يسمح بإشعال النار + لا يسمح بالخيام + مَسموح + علاجي + التايلندية + تقويم العظام + رجال + رياضة + نساء + أطفال + قمصان + جوارب + ملابس سباحة + المدرسة + كبير الحجم + عتيق + الأمومة + بدلة + التقليدية + ازياء خاصة + جلد + الفراء + القبعات + ملابس العمل + الدينم + الأطفال + الرياضة + فساتين الزفاف + رجال + الملابس الداخلية + نساء + المراقبة: عامة + المراقبة: في الخارج + المراقبة: داخلي + محصول: الزهور + محصول: الهليون + محصول: التوت البري + محصول: البفرة + محاصيل: الخضروات والزهور + محصول: الفراولة + محصول: التوت + محصول: دوار الشمس + محصول: الدواجن + محصول: البن + محصول: الشاي + محصول: الخزامى + محصول: الشمندر + محصول: اللفت + محصول: hop + محصول: خضروات + محصول: الشعير + محصول: فول الصويا + محصول: القمح + محصول: قصب السكر + محصول: الحبوب + محصول: الذرة + محصول: عشب + محصول: أرز + عامود إنارة + النوع: منشرة + نوع الصنبور: wsh + تحت الأرض + في العشب + الشارع + موقف السيارات + ممر + رصيف مشاة + قدرة تدفق الصنبور + عدد الصنابير + ضغط الصنبور + قطر الصنبور + مكتب القابلة + خدمة التمريض + مكتب النفساني + مكتب المداوي + مكتب المعالج + مكتب اختصاصي الأقدام + مكتب الطبيب + الإيدز: لا + الإيدز: نعم + التوحد: لا + التوحد: نعم + الإيبولا: لا + الإيبولا: نعم + الملاريا: لا + الملاريا: نعم + زيارة منزلية: لا + نعم + الطوارئ: لا + الطوارئ: نعم + الاستشارة: لا + الاستشارة: نعم + العيادات الداخلية: فقط + العيادات الداخلية: لا + العيادات الداخلية: نعم + السعة (سرير) + مخصصة للبنين: لا + مخصصة للأولاد: نعم + مخصصة للرجال: لا + مخصصة للرجال: نعم + مخصصة للفتيات: لا + مخصصة للفتيات: نعم + مخصصة لكبار السن: لا + مخصصة لكبار السن: نعم + مخصصة للنساء: لا + مخصصة للنساء: نعم + مخصصة للبالغين: لا + مخصصة للبالغين: نعم + مخصصة للأطفال: لا + مخصصة للأطفال: نعم + مخصصة للأطفال الصغار: لا + مخصصة للأطفال الصغار: نعم + مخصصة للرضع: لا + مخصصة للرضع: نعم + استشارة (العنف): لا + استشارة (العنف): نعم + استشارة (الضحية): لا + استشارة (الضحية): نعم + استشارة (الاعتداء الجنسي): لا + استشارة (الاعتداء الجنسي): نعم + الاستشارة (الجنسية): لا + الاستشارة (الجنسية): نعم + استشارة (إعادة التأهيل): لا + استشارة (إعادة التأهيل): نعم + استشارة (التغذية): لا + استشارة (التغذية): نعم + استشارة (الزواج): لا + استشارة (الزواج): نعم + استشارة (المهاجرين): لا + استشارة (المهاجرين): نعم + استشارة (المشردين): لا + استشارة (المشردين): نعم + الاستشارة (الأسرية): لا + الاستشارة (الأسرية): نعم + استشارة (التعليم): لا + استشارة (التعليم): نعم + استشارة (الأدوية): لا + استشارة (الأدوية): نعم + إرشاد (أزمة): لا + استشارة (أزمة): نعم + استشارة (الزوجين): لا + استشارة (الزوجين): نعم + استشارة (توجيه الطفل): لا + استشارة (توجيه الطفل): نعم + استشارة (قبل الولادة): لا + استشارة (قبل الولادة): نعم + استشارة (الإدمان): لا + استشارة (الإدمان): نعم + دور العامل الصحي: راقي + دور العامل الصحي: فني + دور العامل الصحي: مساعد طبيب + دور العامل الصحي: معالج + دور العامل الصحي: طبيب نفساني + دور العامل الصحي: أخصائي الأقدام + دور العامل الصحي: الطبيب + دور العامل الصحي: المسعف + دور العامل الصحي: ممرض/ه + دور العامل الصحي: قابلة + دور العامل الصحي: المعالج + دور العامل الصحي: مساعد + المقاييس العامة + حقيبة إسعاف أولي + حائط + بركه + برميل جاف + عمود + تحت الارض + نقطة شفط + نوع المرفق الصحي: منزل مجموعة الدعم + نوع المرفق الصحي: دار رعاية + نوع المنشأة الصحية: الإسعافات الأولية + نوع المنشأة الصحية: مستوصف + نوع المنشأة الصحية: القسم + نوع المرفق الصحي: العلاج + نوع المرفق الصحي: مختبر + نوع المنشأة الصحية: مركز استشاري + نوع المرفق الصحي: مستشفى ميداني + المكتب الطبي + الخدمة الصحية: اختبار: لا + الخدمة الصحية: اختبار: نعم + الخدمة الصحية: الدعم: لا + الخدمة الصحية: الدعم: نعم + الخدمة الصحية: التطعيم: لا + الخدمة الصحية: التطعيم: نعم + الخدمة الصحية: الوقاية: لا + الخدمة الصحية: الوقاية: نعم \ No newline at end of file From 44bf60bc2556398b79c0a206da118c2441b5645a Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 15 Nov 2020 18:40:17 +0000 Subject: [PATCH 034/198] Translated using Weblate (Azerbaijani) Currently translated at 51.6% (1834 of 3552 strings) --- OsmAnd/res/values-az/strings.xml | 145 ++++++++++++++++++------------- 1 file changed, 83 insertions(+), 62 deletions(-) diff --git a/OsmAnd/res/values-az/strings.xml b/OsmAnd/res/values-az/strings.xml index 5b1f9888a0..dfafcf937d 100644 --- a/OsmAnd/res/values-az/strings.xml +++ b/OsmAnd/res/values-az/strings.xml @@ -75,7 +75,7 @@ Yuxarı daşı Aşağı daşı Tam hesabat - OpenStreetMap istifadəçi adı və şifrə + OSM istifadəçi adı və şifrə Abunə ol Hesabatlarda adımı göstərmə Aktiv @@ -153,15 +153,15 @@ İspanca (Amerika) İspanca (Argentina) Tayca - Əlavə Vikipediya məlumatları endirilsin (%1$s MB) ? - Məkan xidməti aktiv deyil. Aktivləşdirilsin? + Əlavə Vikipediya məlumatları endirilsin (%1$s MB)\? + Məkan xidməti sönülüdür. Aktivləşdirilsin\? Vikipediya Vikipediya Detalları göstər OSM düzəlişini sil Çıxış Ev nömrələri - Fayllar kopyalana bilmədi + Fayllar daşına bilmədi Xarici yaddaş Çox istifadəçili yaddaş Daxili proqram yaddaşı @@ -178,7 +178,7 @@ Axtar Açıqlama göstər. Mesaj - Son endirilən A-GPS məlumatları: %1$s + Endirilən A-GPS məlumatları: %1$s Xəritələri endir Xoş gəlmisiniz Silmək üçün işarələ @@ -234,7 +234,7 @@ Seçimi xatırla Yenilə Endir - Endirilir + Endirilir… Endirildi Gözlənilməyən səhv Bağla @@ -446,11 +446,11 @@ Küçə adı Haradayam Kompas - Ekran kilidi + Kilidlə Standarta bərpa et Sürət - Ekranı kilidlə - Ekran kilidini aç + Kilidlə + Kilidi aç Ekran kilidlidir Sürət kameraları Saat @@ -464,7 +464,7 @@ Xüsusi Ünvan axtar Favoritləri axtarmağın bir yolu - Faylın endirilməsi ləğv edilsin? + Endirmə ləğv edilsin\? Oflayn xəritə fayllarını cihazınıza endirin və idarə edin. GPX faylları OSM-a göndərilsin? İşarələr @@ -513,7 +513,7 @@ Ümumi Əsas proqram parametrləri OSM istifadəçi adınız - OSM şifrəniz + Şifrə Arxa fon rejimi Şəffaf tema %1$s silinsin? @@ -588,7 +588,7 @@ POI veb-saytını göstər POI telefonunu göstər filtr üçün yazın - GPX məlumatları oxuna bilmədi + GPX məlumatları oxuna bilmədi. POI-ni sil Döndərmə (şimal hər zaman yuxarı) Favoritlər {0}-da saxlanıldı @@ -633,8 +633,8 @@ Küçələr yüklənir… Şəhərlər yüklənir… POI - GPX faylı yadda saxlana bilmədi - OsmAnd xəritəyə geri qayıt + GPX faylı yadda saxlana bilmədi. + Xəritəyə geri qayıt Məlumatlar yüklənir… Yerli məlumatlar oxunur… Tamamlandı @@ -662,7 +662,7 @@ Piyada Mərkəz Alt - Ünvan seçin + Ünvan Şəhər Küçə Xəritəni yenilə @@ -675,7 +675,7 @@ POI-yə düzəliş et POI yarat POI-ni sil - POI silindi + Silindi Əlavə et Dəyişdir Sil @@ -683,7 +683,7 @@ Rəy Yenidən aç Filtr - Seçilən filtr silinsin? + Bu filtr silinsin\? %1$s filtri silindi %1$s filtri yaradıldı e-poçt @@ -737,7 +737,7 @@ Həftəlik Səhər Gecə - Ay və ölkə seçin + Ay və ölkə: POI əlavə et Xəritə stilini dəyiş Favorit əlavə et @@ -756,12 +756,12 @@ Xəritə stilləri Axtarış radiusunu artır Axtarış sorğusunu dəyişin və ya axtarış radiusunu artırın. - OSM qeydlərini göstər/gizlət + OSM qeydlərini göstər və ya gizlət OSM qeydlərini göstər OSM qeydlərini gizlət Bu fəaliyyət düyməsinə toxunulduqda, xəritədə OSM qeydləri göstəriləcək və ya gizlədiləcək. Məsafəyə görə sırala - Favoritləri axtar + Favoritlərdə axtar Bu regionda istifadə etmək üçün “Kontur xətləri” xəritəsini endirin. Rəng sxemi Xüsusi girişə icazə ver @@ -816,7 +816,7 @@ Məkan girişinə icazə ver Mövqeyimi tap Bütün xəritələr indi yenilənsin? - %1$s favoritini əvəz etmək istəyirsiniz? + %1$s Favoritini əvəz etmək istəyirsiniz\? Yerüstü obyektlər Koordinatlarla axtar Təkmil koordinatlar axtarışı @@ -891,7 +891,7 @@ Alışları bərpa et OsmAnd-ın pullu versiyasını aldığınız üçün təşəkkür edirik. Quraşdır - Bu xəritə məkanına bir və ya daha çox şəkil əlavə etmək üçün Mapillary-ni quraşdırın. + Bu xəritə məkanına şəkillər əlavə etmək üçün Mapillary-ni quraşdırın. Onlayn şəkillər Şəkillər əlavə et Canlı yeniləmələr @@ -903,7 +903,7 @@ Naviqasiyanı bitir Yollardan yayın Mapillary-ni aç - Bu məkan üçün şəkillərimiz yoxdur. + Burada şəkil yoxdur. Proqramın endirimləri haqqında e-poçt siyahımıza abunə olun və əlavə 3 xəritə endirməsi əldə edin! “Dəniz dərinliyi konturları”nı aldığınız üçün təşəkkür edirik Dəniz dərinliyi konturları @@ -1039,7 +1039,7 @@ İctimai nəqliyyat axtarışı İctimai nəqliyyat axtar İctimai nəqliyyat dayanacaqlarını xəritədə göstər. - Mövqe hələ bilinmir + Mövqe hələ bilinmir. Nəqliyyat dayanacaqları dayanacaq dayanacağı keç @@ -1076,8 +1076,8 @@ Nəqliyyat OsmAnd naviqasiya proqramı POI məlumatları yeniləndi ({0} obyekt yükləndi) - Yerli POI siyahısı yenilənə bilmədi - Serverdən məlumatlar yüklənə bilmədi + Yerli POI siyahısı yenilənə bilmədi. + Serverdən məlumatlar yüklənə bilmədi. Bu ərazi üçün oflayn POI məlumatları yoxdur Kiçik miqyas səviyyələrində POI-ləri yeniləmək mümkün deyil OSM Nominatim istifadə etməklə onlayn axtarış @@ -1096,9 +1096,9 @@ İcazə uğursuz oldu Yerli/İngiliscə adlar çevrilir… Küçələr/binalar yüklənir… - Marşrut hesablana bilmədi - Marşrut hesablana bilmədi - Hesablanan marşrut boşdur + Marşrut hesablana bilmədi. + Marşrut hesablana bilmədi. + Hesablanan marşrut boşdur. Yeni marşrut hesablandı, məsafə Təyinat nöqtənizə gəlib çatdınız Yanlış koordinatlar @@ -1118,8 +1118,8 @@ \n(D - dərəcə, M - dəqiqə, S - saniyə) En Uzunluq - DDD.DD - DDD MM.MM + DDD.DDDDD + DDD MM.MMM DDD MM SS.SS Ölkə Bina @@ -1211,7 +1211,7 @@ Tam məqaləni oxu (onlayn) Fərqli saxla Kamera fokus növü - Daxili kameranın fokus rejimini seçin. + Kameranın fokus rejimini: Avtomatik fokus Hiperfokal fokus Genişlədilmiş sahə dərinliyi (EDOF) @@ -1272,7 +1272,7 @@ Çıxanda marşrut yenidən hesablanmasın Əks istiqamət üçün marşrut yenidən hesablanmasın Marşrutu yenidən hesabla - Uzun səyahətlər üçün marşrutun yalnız ilk hissəsini yenidən hesabla. + Marşrutun yalnız başlanğıc hissəsini yenidən hesablayır. Uzun səyahətlər üçün istifadə edilə bilər. Səyahət planlaşdırma Xəritəyə baxış Xəritə stili “%s” olaraq dəyişdirildi. @@ -1380,7 +1380,7 @@ Qonşuluqdakı şəhərlərdə küçə axtar Qapı-qapı sırala OSM dəyişiklik faylı yaradıldı %1$s - OSM dəyişikliklərini nüsxələmək olmadı + OSM dəyişikliklərini nüsxələmək olmadı. OSM dəyişikliyi olaraq nüsxələ Nöqtəni sil dəqiqlik @@ -1435,7 +1435,7 @@ Səyahət qeydinə başlamağa imkan verən sistem bildirişi göstər. Minimum qeydiyyat sürəti Yeni filtr üçün ad daxil edin. Bu, sizin “Kateqoriyalar” bölmənizə əlavə olunur. - OpenStreetMap cəmiyyəti üçün ianə + OSM cəmiyyəti üçün ianə İanənizin bir hissəsi OpenStreetMap-a dəyişikliklər təqdim edən OSM istifadəçilərinə göndəriləcək. Abunəliyin qiyməti eyni qalır. Genişlədilmiş siyahı Uzunluq vahidlərini dəyişin. @@ -1480,9 +1480,9 @@ At marşrutları “Sönülü” birbaşa xəritə ekranını başladır. Oflayn saxla - Qeyd yaradıla bilmədi - Qeyd bağlana bilmədi - Rəy əlavə edilə bilmədi + Qeyd yaradıla bilmədi. + Qeyd bağlana bilmədi. + Rəy əlavə edilə bilmədi. OSM düzəlişləri OsmAnd ilə paylaşılıb Təklif olunan obyektlər %1$d qeydi silmək üzrəsiniz. Əminsiniz? @@ -1494,7 +1494,7 @@ İanələr Qəbul edənlərin sayı %1$s düzəliş, %2$s dərəcə, cəmi %3$s düzəliş - OSM Redaktorlar sıralaması + OSM Redaktor sıralaması Əksinə sırala İlk xəritə işarəsi İkinci xəritə işarəsi @@ -1558,7 +1558,7 @@ %1$s endirmə qalıb Naviqasiyaya fasilə/davam Naviqasiyaya fasilə vermək və ya davam etmək üçün bu düyməyə toxunun. - Naviqasiyanın bitmə dialoqunu göstər + “Naviqasiya bitdi” dialoqunu göstər Naviqasiyanı başlat/dayandır Naviqasiyanı başlatmaq və ya bitirmək üçün bu düyməyə toxunun. Mapillary-dən şəkillərə baxmaq üçün internetiniz olmalıdır. @@ -1585,8 +1585,8 @@ Marathicə Norveçcə Polyakca - Serbcə - Serbcə (Latın) + Serbcə (kiril) + Serbcə (latın) Slovakca Slovencə Yüksək dəqiqlikli ekran @@ -1598,9 +1598,9 @@ Oflayn vektor xəritələr Dayanacaqda nəqliyyat axtar Marşrut detalları - Yadda saxlanacaq favorit nöqtələr yoxdur + Yadda saxlanacaq Favorit nöqtələr yoxdur Favoritlər OsmAnd ilə paylaşılıb - GPX yüklənə bilmədi + GPX yüklənə bilmədi. Trafik məlumatları üçün Yandex-ə təşəkkürlər. Yandex trafik Marşrut @@ -1702,7 +1702,7 @@ Xəritə işarələrindən sil azalan artan - Əlavə edilmə tarixi + Əlavə edildi Sırala: Bütün xəritə işarələri tarixçəyə daşındı Xəritə işarəsi tarixçəyə daşındı @@ -1778,10 +1778,10 @@ Örtük şəffaflığı Xəritə altlığı… Xəritə altlığı - Xəritə altlığını seçin. + Xəritə altlığını seçin Xəritə örtüyü… Xəritə örtüyü - Xəritə örtüyünü seçin. + Xəritə örtüyünü seçin Şəkillərlə Online OSM xəritə təsnifatı. Ən yaxın POI-lər Onlayn NameFinder @@ -1808,7 +1808,7 @@ Marşrut nöqtəsi 1 Xəritədə favoritlər əlavə edin və ya bir fayldan idxal edin. Nöqtə/POI adını kopyala - Məkanın adı yoxdur + Adsız məkan Tunellər Bunu başlanğıc nöqtəsi et Hazırkı @@ -1825,7 +1825,7 @@ Qeyd ilə əlaqələndiriləcək məkan hələ müəyyənləşdirilməyib. Göstərilən məkana qeyd təyin etmək üçün “Məkan istifadə et…”. İstifadə etməklə paylaş GPX - JOSM və ya digər OSM redaktorlarına ixrac üçün uygundur. - OSC - OpenStreetMap-a ixrac üçün uyğundur. + OSC - OSM-ə ixrac üçün uyğundur. İxrac növünü seçin: OSM qeydləri, POI və ya hər ikisi. POI adları Vaxt limiti olmadan @@ -1846,9 +1846,9 @@ Təyinat nöqtəsini yuxarı daşı və yarat Qeydlər yaradın! Widget və ya kontekst menyusunu istifadə edərək xəritədəki hər nöqtəyə səs, video və ya şəkil qeydi əlavə edin. - favoritlər və ya GPX faylı kimi idxal edilə bilər. + Favoritlər və ya GPX faylı kimi idxal edilə bilər. Bu funksiyanı istifadə etmək üçün ən azı bir işarə əlavə etməlisiniz. - Qeyd dəyişdirilə bilmədi + Qeyd dəyişdirilə bilmədi. Xəritə istiqamətinin “Hərəkət istiqaməti”ndən “Kompas istiqaməti”nə keçmə sürətini seçin. Xəritə işarələri aktivə daşındı Aktiv et @@ -1890,7 +1890,7 @@ \n * Açıqlamaya baxmaq və əlavə etmək üçün nöqtəyə basıb saxlayın. \n * Digər fəaliyyətləri görmək üçün ölçmə widget-inə toxunun. Kamera şəkil ölçüsü - Daxili kameranın şəkil ölçüsünü seçin. + Kameranın şəkil ölçüsünü seçin Ağıllı marşrut yenidən hesablama Proqramı qiymətləndir Google Play-də OsmAnd-a qiymət verin @@ -1911,7 +1911,7 @@ Kateqoriya seçin (məcbur deyil). Xətt əlavə et Nəqliyyat rejimi: - Nəqliyyat rejimi seçin + Nəqliyyat rejimi: Bərələrdən yayın Növbəti döngə Növbəti döngə (kiçik) @@ -1940,8 +1940,8 @@ İstiqaməti başqa cür müəyyən etmək mümkün deyilsə, kompas istifadə et. Xəritənin fırlanma üsulunu seçin. Ekran istiqaməti - Məsafə: ilk ən uzaqdakı - Məsafə: ilk ən yaxındakı + İlk ən uzaqdakı + İlk ən yaxındakı Uzunluq daxil edin En daxil edin En və uzunluq daxil edin @@ -1961,7 +1961,7 @@ Gediş-gəliş səyahəti Gediş-gəliş səyahət et Finiş - Xəritə ekranında xəritə işarələrinə məsafənin və istiqamətin necə göstəriləcəyini seçin: + Xəritədə xəritə işarələrinə məsafənin və istiqamətin necə göstəriləcəyini seçin: OsmAnd seçilmiş profil üçün nöqtələri marşrut ilə birləşdirəcək. Filtr: Bu sürətdən aşağıda nöqtələri qeyd etmə. Yalnız hədəf nöqtəyə istiqamət dəyişilən zaman bildir. @@ -1995,7 +1995,7 @@ GPS oyandırma intervalı Bənövşəyi Şəffaf bənövşəyi - OsmAnd məlumat faylları yeni yerə kopyalansın? + OsmAnd məlumat faylları yeni yerə daşınsın\? Göstərilən yerdə xəritələr yaradıla bilmədi Marşrut planlaşdırma ekranında qalmaq üçün gözləmə müddətini göstərin. vaxtı keçmiş @@ -2004,14 +2004,14 @@ Günəş çıxır/batır Qrup silindi Bütün ara nöqtələri təmizlə - Standart widget fəaliyyəti seçin. + Standart widget fəaliyyəti: Standart widget fəaliyyəti Nəticə İki rəqəmli uzunluq istifadə et Yol nöqtələri xəritə işarələrindən silindi Heç bir şey tapılmadı: Cəmi - Axtar: ölkə, şəhər, əyalət + Ölkə, şəhər və ya əyalət axtar Oxu Saxlanan məqalələr Yalnız Wi-Fi ilə @@ -2050,7 +2050,7 @@ %1$s nöqtə əlavə etdiniz. Fayl adını yazıb “Saxla” düyməsinə toxunun. Bu bildirişin ekran şəklini support@osmand.net ünvanına göndərin Bütün xüsusiyyətləri açmaq üçün OsmAnd Live əldə edin: Limitsiz endirmələr ilə günlük xəritəsi yeniləmələri, bütün pullu və pulsuz qoşmalar, Vikipediya, Vikisəyahət və daha çoxu. - Əks əlaqə üçün təşəkkürlər + Əks əlaqəniz üçün təşəkkürlər Axtarış sorğunuzu göndərəcəyik: \"%1$s\", eləcə də məkanınızı.\n \n Şəxsi məlumatları toplamırıq, yalnız axtarış alqoritmini yaxşılaşdırmaq üçün axtarış məlumatlarına ehtiyacımız var. Axtarış sorğusu göndərilsin? @@ -2060,8 +2060,8 @@ Şəkilləri göstər OsmAnd Live abunəliyinizi ləğv etdiniz OsmAnd komandası - Xəritə yeniləmələri: hər ay - Xəritə yeniləmələri: hər saat + Aylıq xəritə yeniləmələri + Saatlıq xəritə yeniləmələri Proqram daxili alışlar Vikisəyahət oflayn Vikipediya oflayn @@ -2069,4 +2069,25 @@ Vikisəyahət Üst panel %1$s düzəliş, cəmi %2$s mBTC + Ye + Hazırdır + Naviqasiya profili + OsmAnd Live məlumatları + OsmAnd Live məlumatları + Yerli xəritələr + Xidmət + İstifadəçi adı və şifrə istifadə et + Ünvanı sil + Ünvan əlavə et + Ünvan daxil edin + Fayl adı + saxlanıldı + Ad: Z – A + Ad: A – Z + %1$s — %2$s + İdman + Hesab + İstifadəçi adı + Şəkil əlavə et + Yeni hesab yarat \ No newline at end of file From abd6629e067d4fab368bc2b7bd7f4a2fdcbb2a2c Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sun, 15 Nov 2020 11:45:20 +0000 Subject: [PATCH 035/198] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3552 of 3552 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index f04eb730e0..0a000f7811 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -3429,7 +3429,7 @@ 無法解析地理含義「%s」。 您已紀錄的軌跡位於 %1$s,或是 OsmAnd 資料夾。 您的 OSM 註記位於 %1$s。 - 您可以在 %1$s 中檢視您所有未上傳的編輯或 OSM 臭蟲。已上傳的點不會在 OsmAnd 中顯示。 + 您可以在 %1$s 中檢視您所有尚未上傳的編輯或 OSM 臭蟲。已上傳的點不會在 OsmAnd 中顯示。 使用此選項需要權限。 這是一個低速過濾器,不記錄低於特定速度的點。在地圖上查看時,這可能會使記錄的軌跡看起來更平滑。 副作用:您的軌跡將會遺失所有未達到最低速度標準的部份(例如,您將自行車推上陡峭的山坡)。此外,也將沒有其餘的資訊,如休息等。這會影響任何分析或後處理,例如試圖確定行程的總長度,運動時間或平均速度時。 From 5d427ef7e19dfb9f1c7f2de831e945850dbd4547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Mon, 16 Nov 2020 13:08:00 +0000 Subject: [PATCH 036/198] Translated using Weblate (Czech) Currently translated at 26.9% (73 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/cs/ --- OsmAnd-telegram/res/values-cs/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd-telegram/res/values-cs/strings.xml b/OsmAnd-telegram/res/values-cs/strings.xml index 8972d7f937..cd32a46403 100644 --- a/OsmAnd-telegram/res/values-cs/strings.xml +++ b/OsmAnd-telegram/res/values-cs/strings.xml @@ -72,4 +72,6 @@ Povolen Jednotky vzdálenosti Vzhled + Zásobník logcat + Zkontrolovat a sdílet podrobné záznamy aplikace \ No newline at end of file From cc5e71afe940bcd235af3ea39a133f7ab05a0aeb Mon Sep 17 00:00:00 2001 From: Gilbert Lowel Date: Mon, 16 Nov 2020 09:57:59 +0000 Subject: [PATCH 037/198] Translated using Weblate (Dutch) Currently translated at 95.6% (3398 of 3552 strings) --- OsmAnd/res/values-nl/strings.xml | 47 ++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 3c40568702..30cff055ce 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -128,7 +128,7 @@ Algemene instellingen OSM gebruikersnaam Nodig om bij te kunnen dragen aan openstreetmap.org. - OSM wachtwoord + Wachtwoord Achtergrond modus OsmAnd werkt op de achtergrond als het scherm uit is. Er is niet voldoende vrije ruimte %1$s MB te downloaden (vrij: %2$s). @@ -3364,9 +3364,9 @@ Route herberekening Meld Gebruikersnaam en wachtwoord - Deze instellingen hebben betrekking op alle profielen. + Deze instellingen hebben betrekking op alle profielen OSM Bewerking - U kan al uw niet-geüploade bewerkingen of OSM fouten zien in %1$s. Geüploade punten ziet u niet meer. + U kan al uw niet geüploade bewerkingen of OSM fouten zien in %1$s. Geüploade punten ziet u niet meer. OSM Tijdens navigatie of beweging getoond icoon. Bij rust getoond icoon. @@ -3438,7 +3438,7 @@ Profielen De getoonde %1$s zijn in OsmAnd reeds beschikbaar. Huidige elementen worden vervangen door elementen uit het bestand - Alle vervangen + Vervang alles Beide houden Geïmporteerde elementen zullen toegevoegd worden met een voorvoegsel OsmAnd heeft reeds elementen met dezelfde naam als de geïmporteerde. @@ -3534,7 +3534,7 @@ Zoomniveaus Legenda Alle gegevens uit de %1$s zijn geïmporteerd, open met de onderstaande knoppen het benodigde deel van de app om deze te beheren. - Import voltooid + Importeren voltooid Elementen toegevoegd OsmAnd controleert %1$s op duplicaten met bestaande items in de app. \n @@ -3706,7 +3706,7 @@ Standaard Route tussen punten Vervolgens, zet uw track vast op de dichtstbijzijnde toegestane weg met een van uw navigatieprofielen om deze optie te gebruiken. - %1$s gegevens alleen beschikbaar op de wegen, u moet een route berekenen met behulp van \"Route tussen punten\" om deze te krijgen. + %1$s gegevens alleen beschikbaar op wegen, u moet een route berekenen met behulp van \"Route tussen punten\" om deze gegevens te krijgen. Selecteer hoe de punten verbonden worden, via een rechte lijn, of een route berekenen tussen de punten zoals hieronder aangegeven. Alleen het volgende segment wordt opnieuw berekend met het geselecteerde profiel. Volgende segment @@ -3769,7 +3769,7 @@ Maak een nieuwe route Open een bestaande track Plan een route - Gebruik 2-fasen A* routeringsalgoritme + Gebruik de twee-fase A* route berekening methode Grafiek Wacht op de herberekening van de route. \nDe grafiek is beschikbaar na herberekening. @@ -3880,7 +3880,7 @@ Inloggen via OAuth Wis OpenStreetMap OAuth-token Uitloggen gelukt - Het bestand is al geïmporteerd in OsmAnd + Bestand is reeds geïmporteerd in OsmAnd Lokale kaarten Aangenaam Speciaal @@ -3894,4 +3894,35 @@ Track waypoint toevoegen Opslaan als trackbestand Rec + U moet minimaal twee punten toevoegen + Login op OpenStreetMap + Login op OpenStreetMap.org + Login met OpenStreetMap + U moet inloggen om nieuwe of gewijzigde wijzigingen te uploaden. +\n +\nU kunt inloggen met de veilige OAuth-methode of uw login en wachtwoord gebruiken. + Gebruik uw login gegevens + Account + Inloggen + Abonnement beheren + Er is een probleem met uw abonnement. Klik op de knop om naar de Google Play-abonnementsinstellingen te gaan om uw betalingsmethode te corrigeren. + OsmAnd Live-abonnement is verlopen + OsmAnd Live-abonnement is gepauzeerd + Het OsmAnd Live-abonnement is op wacht gezet + Markeervlaggen geschiedenis + Stuur het GPX-bestand naar OpenStreetMap + Voer tags in, gescheiden door komma\'s. + Openbaar betekent dat de trace openbaar zal worden getoond in Uw GPS-sporen en in openbare GPS-traceerlijsten. Gegevens die via de API worden geleverd, verwijzen niet naar uw traceerpagina. Tijdaanduidingen van de traceerpunten zijn niet beschikbaar via de openbare GPS-API en de punten zijn niet chronologisch gerangschikt. Andere gebruikers kunnen de onbewerkte tracering echter nog steeds downloaden van de openbare traceringslijst en eventuele tijdaanduiding erin. + Privé betekent dat de trace niet in openbare vermeldingen zal verschijnen, maar trackpoints ervan zullen nog steeds beschikbaar zijn via de openbare GPS API zonder tijdaanduiding, maar zullen niet chronologisch worden gerangschikt. + Identificeerbaar betekent dat de trace openbaar wordt getoond in uw GPS-sporen en in openbare GPS-trace-lijsten, dat wil zeggen dat andere gebruikers de onbewerkte trace kunnen downloaden en deze aan uw gebruikersnaam kunnen koppelen. Gegevens die via de trackpoints-API worden aangeboden, verwijzen naar uw oorspronkelijke tracepagina. Tijdaanduidingen van de traceerpunten zijn beschikbaar via de openbare GPS-API. + Trackbaar betekent dat de trace niet in openbare vermeldingen zal verschijnen, maar trackpoints ervan zullen nog steeds beschikbaar zijn via de openbare GPS API met tijdaanduiding. Andere gebruikers kunnen alleen verwerkte trackpoints downloaden van uw trace die niet rechtstreeks aan u kunnen worden gekoppeld. + Sluit OSM Note + Opmerking OSM Note + U kunt inloggen met de veilige OAuth-methode of uw login en wachtwoord gebruiken. + Een foto toevoegen + Registreer u op +\nOpenPlaceReviews.org + Foto\'s zijn afkomstig van het open data-project OpenPlaceReviews.org. Om uw foto\'s te uploaden, moet u zich aanmelden op deze website. + Maak een nieuw account aan + Ik heb al een account \ No newline at end of file From fa9716ed04b68d663a0386507ead2a4419f99cad Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Mon, 16 Nov 2020 19:23:30 +0000 Subject: [PATCH 038/198] Translated using Weblate (French) Currently translated at 99.8% (3548 of 3555 strings) --- OsmAnd/res/values-fr/strings.xml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index b5428bb4d2..c48a9fb01e 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -1910,7 +1910,7 @@ Marques actives Marques Marque - Le nom de fichier contient un caractère interdit + Caractère interdit dans le nom de fichier Cet abonnement active les mises à jour horaires pour toutes les cartes. \nLes dons sont en partie reversés à la Communauté OSM. \nSi vous appréciez OsmAnd et OSM et que vous souhaitez soutenir ces projets, c\'est la meilleure façon de le faire. @@ -2629,7 +2629,7 @@ Copier l\'emplacement / le nom du point Emplacement sans nom Afficher les notes fermées - Afficher / masquer les notes OSM sur la carte. + Affiche ou masque les notes OSM sur la carte. GPX - adapté à l\'export vers JOSM et d\'autres éditeurs OSM. OSC - adapté à l\'export vers OSM. Fichier GPX @@ -3112,7 +3112,7 @@ Sélectionnez les profils affichés dans l\'application. Profils de l\'application Ajoutez au moins une action à la barre d\'Actions rapides - Ski alpin / ski de descente + Ski alpin Pistes de ski et accès aux remontées mécaniques. Ski de randonnée et ski nordique Pistes de ski de fond ou de ski de randonnée. @@ -3555,7 +3555,7 @@ Permet d\'afficher l\'ombrage du relief ou les pistes. Vous pouvez en apprendre plus sur ces types de cartes sur notre site. Ombrage du relief Pistes - Afficher / masquer le terrain + Affiche ou masque le terrain Masquer le terrain Afficher le terrain Un bouton pour afficher ou masquer la couche terrain sur la carte. @@ -3672,11 +3672,11 @@ Vous pouvez accéder à ces actions en appuyant sur le bouton \"%1$s\". Masquer les transports publics Afficher les transports publics - Afficher / masquer les transports publics + Affiche ou masque les transports publics Bouton pour afficher ou masquer les transports publics sur la carte. - Créer / Modifier un PI + Créer ou modifier un PI Emplacements de stationnement - Ajouter / Modifier un favori + Ajouter ou modifier un favori Rétablir l\'ordre par défaut des éléments Retour en modification Le bouton d’action bascule entre les profils sélectionnés. @@ -3851,7 +3851,7 @@ Sélectionnez le fichier de trace à suivre ou importez-le depuis votre appareil. Reprendre l\'enregistrement du trajet Suspendre l\'enregistrement du trajet - Définit la fréquence d’enregistrement du parcours (enregistrement activé depuis le gadget sur la carte). + Définit la fréquence d’enregistrement des points du parcours (activable depuis le gadget \"Enregistrement\" sur la carte). Suspend l\'enregistrement du parcours lorsque l\'application est arrêtée via Applications récentes ; les indications OsmAnd ne seront plus affichées dans la barre de notifications. Tous les segments suivants seront recalculés avec le profil sélectionné. Tous les segments précédents seront recalculés avec le profil sélectionné. @@ -3883,7 +3883,7 @@ Dernière modification Nom : Z – A Nom : A – Z - Icônes de départ / arrivée + Icônes de départ et d\'arrivée Merci pour votre achat de \'Courbes de niveaux\' Abonnement facturé pour chaque période sélectionnée. Annulation possible à tout moment sur AppGallery. Éviter les trottoirs @@ -3953,4 +3953,6 @@ \nVous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. Vous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web. + Historique de recherche + Kayak \ No newline at end of file From 173e6412e4c86d0626c9efb4e3f0fd7b40cc6f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Babos=20G=C3=A1bor?= Date: Mon, 16 Nov 2020 19:39:43 +0000 Subject: [PATCH 039/198] Translated using Weblate (Hungarian) Currently translated at 99.9% (3554 of 3555 strings) --- OsmAnd/res/values-hu/strings.xml | 35 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index 16c481d562..046855440d 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -1908,7 +1908,7 @@ OSM felhasználónév és jelszó Ezzel kaphat friss tájékoztatást a szerkesztéseiről. Minden visszavonása - A fájlnév érvénytelen karaktert tartalmaz + Érvénytelen karakter a fájlnévben Az alkalmazás már tud írni a külső tárolóra, de ehhez egy kézi újraindítás szükséges. Klipek elvágása, ha a felhasznált hely túllépi a tárolási méretet. A felvett klipek maximális hossza. @@ -2521,7 +2521,7 @@ Első megállót ad hozzá Célpont följebb mozgatása, vagy létrehozása Lezárt jegyzetek megjelenítése - OSM-jegyzetek megjelenítése/elrejtése a térképen. + OSM-jegyzetek megjelenítése vagy elrejtése a térképen. GPX – megfelelő export a JOSM és más OSM-szerkesztők számára. OSC – megfelelő export az OSM számára. GPX-fájl @@ -3205,7 +3205,7 @@ Az érkezési időt becsüli ismeretlen úttípus esetén, valamint korlátozza a sebességet valamennyi úttípusnál (az útvonalat befolyásolhatja) Visszaállít Nyomvonal elmentve - Fájlnév üres + Üres fájlnév Térképletöltés párbeszédablak Párbeszédablakok és értesítések Felugró üzenetek, párbeszédablakok és értesítések beállításai. @@ -3229,9 +3229,9 @@ Vastag Sivatagokhoz és más ritkán lakott területekhez. Részletesebb. Adjon legalább egy elemet a „Gyorsművelet” beállításainál található listához - Alpesi sí/lesiklás + Alpesi sí és lesiklás Alpesi vagy lesikló sípályák és a felvonókhoz vezető utak - Sífutás / északi sí + Sífutás és északi sí Északi vagy sífutónyomok Sítúrázás Sítúraútvonalak @@ -3494,7 +3494,7 @@ Az útvonal újraszámításra kerül, amennyiben az útvonal és a jelenlegi helyzet közötti távolság nagyobb, mint a kiválasztott érték. %1$s a %2$s-ból Lejtők - Domborzat megjelenítése / elrejtése + Domborzat megjelenítése vagy elrejtése Domborzat elrejtése Domborzat megjelenítése Váltógomb, amely a térképen megjeleníti vagy elrejti a domborzati réteget. @@ -3593,10 +3593,10 @@ Nem támogatott művelet: %1$s Tömegközlekedés elrejtése Tömegközlekedés megjelenítése - Tömegközlekedés megjelenítése/elrejtése - POI készítés / módosítás + Tömegközlekedés megjelenítése vagy elrejtése + POI készítése vagy módosítása Parkolási pozíció - Kedvenc hozzáadása/módosítása + Kedvenc hozzáadása vagy módosítása Alapértelmezett elemsorrend visszaállítása Vissza a szerkesztéshez Nem található ilyen profil. @@ -3853,7 +3853,7 @@ Utazás rögzítésének szüneteltetése Mentés új nyomvonalfájlként Utoljára szerkesztve - Adja meg az általános nyomvonalrögzítés naplózási intervallumát (engedélyezve a térképen található „Utazás rögzítése” widgettel). + Adja meg az általános nyomvonalrögzítés naplózási intervallumát (bekapcsolva a térképen található „Utazás rögzítése” widgettel). Válassza ki a kívánt felosztási lehetőséget: idő vagy távolság szerint. Utazás rögzítésének folytatása Navigációs profil @@ -3880,7 +3880,7 @@ Mégis • Frissített útvonaltervezési funkció: szakaszonként különböző navigációtípusok használhatók és nyomvonalak is beilleszthetők \n -\n • Új megjelenési menü a nyomvonalakhoz: válassza ki a színt, a vastagságot, kapcsolja be az iránynyilakat és a kiindulás / célpont ikonjait +\n • Új megjelenési menü a nyomvonalakhoz: válassza ki a színt, a vastagságot, kapcsolja be az iránynyilakat és a kiindulás és célpont ikonjait \n \n • Kerékpáros csomópontok jobb láthatósága \n @@ -3896,7 +3896,7 @@ Utolsó módosítás Név: Z–A Név: A–Z - Kiindulás/érkezés ikonjai + Kiindulás és érkezés ikonjai Köszönjük, hogy megvásárolta a szintvonalbővítményt (Contour lines) Az előfizetés díja a kiválasztott időszakonként lesz kiszámítva. Bármikor törölheti az AppGallery webhelyen. A fizetést a vásárlás visszaigazolásakor az AppGallery számlájára terheljük. @@ -3940,10 +3940,10 @@ Az OsmAnd a NATO által is használt MGRS (Military Grid Reference System) koordinátákat alkamazza, amely hasonlít az UTM-formátumhoz. Legalább két pontot kell hozzáadnia Előfizetés kezelése - A követhetőség azt jelenti, hogy a nyomvonal semmilyen nyilvános listában nem jelenik meg, de a nyomvonalpontok az időbélyegekkel együtt továbbra is elérhetők lesznek a nyilvános GPS API-n keresztül. Más felhasználók csak a feldolgozott nyomvonalpontokat tölthetik le az Ön nyomvonalából, amelyek közvetlenül nem társítható Önhöz. - Az azonosítható azt jelenti, hogy a nyomvonal nyilvánosan megjelenik az Ön GPS-nyomvonalai között és a GPS-nyomvonalak nyilvános listáin, vagyis más felhasználók letölthetik a nyers nyomvonalat, és társíthatják azt a felhasználónévvel. A nyomvonalpont-API-n keresztül szolgáltatott adatok hivatkozni fognak az Ön eredeti nyomvonaloldalára. A nyomvonalpontok időbélyegei elérhetők a nyilvános GPS API-n keresztül. - A nyilvános azt jelenti, hogy a nyomvonal nyilvánosan megjelenik az Ön GPS-nyomvonalai között és a GPS-nyomvonalak nyilvános listáin. Az API-n keresztül szolgáltatott adatok nem hivatkoznak az Ön nyomvonaloldalára. A nyomvonalpontok időbélyegei nem érhetők el a nyilvános GPS API-n keresztül, és a pontok nincsenek időrend szerint sorba állítva. Más felhasználók azonban továbbra is letölthetik a nyers nyomvonalat (a benne található időbélyegeket) a nyilvános nyomvonallistáról. - A privát azt jelenti, hogy a nyomvonal semmilyen nyilvános listán nem jelenik meg, de az abból származó nyomvonalpontok továbbra is elérhetők lesznek a nyilvános GPS API-n időbélyegzők nélkül, nem időrend szerint sorba állítva. + A követhető azt jelenti, hogy a nyomvonal egyetlen nyilvános listában sem jelenik meg, de a belőle származó, időbélyeggel ellátott, feldolgozott nyomvonalpontok (amelyek közvetlenül nem kapcsolhatók Önhöz) igen, mégpedig a nyilvános GPS API-ról történő letöltések révén. + Az azonosítható azt jelenti, hogy a nyomvonal nyilvánosan megjelenik az Ön GPS-nyomvonalai között és a GPS-nyomvonalak nyilvános listáin, vagyis más felhasználók letölthetik a nyers nyomvonalat, és társíthatják azt a felhasználónévvel. A nyomvonalpont-API-n keresztül kiszolgált GPS API-ból származó nyilvános időbélyegzővel ellátott nyomvonalpont-adatok hivatkoznak az Ön eredeti nyomvonaloldalára. + A nyilvános azt jelenti, hogy a nyomvonal nyilvánosan megjelenik az Ön GPS-nyomvonalai között és a nyilvános GPS-nyomvonal-listákban, valamint a nyilvános nyomvonal-listában, időbélyegekkel, nyers formában. Az API-n keresztül szolgáltatott adatok nem hivatkoznak az Ön nyomvonal-oldalára. A nyomvonalpont időbélyegei nem érhetők el a nyilvános GPS API-n keresztül, a nyomvonalpontok pedig nincsenek időrendben. + A privát azt jelenti, hogy a nyomvonal semmilyen nyilvános listán nem jelenik meg, de az abból származó nyomvonalpontok (nem időrendben) továbbra is elérhetők lesznek a nyilvános GPS API-n időbélyegzők nélkül. A címkéket vesszővel elválasztva írja be. GPX-fájl küldése az OpenStreetMapre Jelölők előzményei @@ -3969,4 +3969,7 @@ A fényképeket a OpenPlaceReviews.org nyílt adatprojekt biztosítja. Saját fényképei feltöltéséhez be kell jelentkeznie a weboldalon. Új fiók létrehozása Már van fiókom + Motorcsónak + Kajak + Keresési előzmények \ No newline at end of file From 488e74fd3c12639d91dfa899d795cf0f3caf08a2 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Mon, 16 Nov 2020 19:23:30 +0000 Subject: [PATCH 040/198] Translated using Weblate (Hebrew) Currently translated at 99.8% (3551 of 3555 strings) --- OsmAnd/res/values-iw/strings.xml | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index 4f9776cbf0..81122d590f 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -1617,7 +1617,7 @@ מספר תורמים מספר עריכות דיווח עבור - שם הקובץ מכיל תווים בלתי תקניים + תווים בלתי תקניים בשם הקובץ פעולה מהירה פעולה %d מסך %d @@ -2430,7 +2430,7 @@ שתי ספרות לציון קו אורך מדריכי תיירות לא נמצא שום דבר: - הצגה/הסתרה של הערות OSM במפה. + הצגת או הסתרת הערות OSM במפה. GPX - מתאים לייצוא ל־JOSM או עורכי OSM אחרים. OSC - מתאים לייצוא ל־OSM. קובץ GPX @@ -3131,7 +3131,7 @@ נא לבחור את הפרופילים שיופיעו ביישומון. פרופילים ביישומון יש להוסיף לפחות פריט אחד לרשימה בהגדרות ה‚פעולה המהירה’ - סקי אלפיני/במורדות + סקי אלפיני ובמורדות מדרונים לסקי אלפיני או במורד ההר וגישה למעליות סקי. מזחלת מדרונים לגלישה עם מזחלת. @@ -3155,7 +3155,7 @@ לאפשר ל־OsmAnd לאסוף ולעבד נתונים אלמוניים בנוגע לשימוש ביישומון. לא נאספים נתונים על המיקום שלך או המקומות בהם צפית במפה. \n \nניתן להגדיר זאת בכל עת דרך ‚הגדרות’ ← ‚פרטיות ואבטחה’. - סקי למרחקים/נורדי + סקי למרחקים ונורדי מסלולים לסקי נורדי או למרחקים. מסלולים קשים יותר עם מקטעים יותר תלולים. בדרך כלל עם מכשולים שרצוי להימנע מהם. • פרופילי יישומון: יצירת פרופיל שמותאם אישית לצרכיך, עם סמל וצבע לבחירתך @@ -3549,7 +3549,7 @@ הצללה %1$s מתוך %2$s מדרונות - הצגה/הסתרה של תוואי שטח + הצגה או הסתרה של תוואי שטח הסתרת תוואי שטח הצגת תוואי שטח כפתור להצגה או הסתרה של שכבת תוואי שטח על גבי המפה. @@ -3675,11 +3675,11 @@ ניתן לגשת לפעולות האלו על ידי לחיצה על הכפתור „%1$s”. הסתרת תחבורה ציבורית הצגת תחבורה ציבורית - הצגת/הסתרת תחב״צ + הצגת או הסתרת תחב״צ כפתור להצגה או הסתרה של תחבורה ציבורית על המפה. - יצירה/עריכה של נקודת עניין + יצירה או עריכה של נקודת עניין מקומות חנייה - הוספה / הסרה של מועדף + הוספה או הסרה של מועדף שחזור סדר בררת המחדל של הפריטים חזרה לעריכה לעלות בתחנה @@ -3872,7 +3872,7 @@ חיתוך אחרי החלפת סוג המסלול לפני החלפת סוג המסלול לאחר - נא לציין מרווח בין הקלטות כלליות של מסלול (מופעל דרך וידג׳ט הקלטת המסלול שעל המפה). + נא לציין מרווח בין הקלטות כלליות של מסלול (ניתן להפעלה דרך וידג׳ט ‚הקלטת המסלול’ שעל המפה). מסלול מפושט רק קו המסלול יישמר, נקודות הדרך תימחקנה. שם קובץ @@ -3893,7 +3893,7 @@ ביצוע מחדש • פונקציית תכנון המסלול עודכנה: מאפשרת שימוש בסוגי ניווט שונים לפי מקטע והכללת מסלולית \n -\n • תפריט מראה חדש למסלולים: ניתן לבחור צבע, עובי, להציג חצי כיוון, סמלי התחלה/סיום +\n • תפריט מראה חדש למסלולים: ניתן לבחור צבע, עובי, להציג חצי כיוון, סמלי התחלה וסיום \n \n • אופן הצגת שבילי האופניים השתפר. \n @@ -3909,7 +3909,7 @@ שינוי אחרון שם: ת – א שם: א – ת - סמלי התחלה/סיום + סמלי התחלה וסיום תודה לך על רכישת ‚קווי מתאר’ הימנעות משבילי הולכי רגל הימנעות משבילי הולכי רגל @@ -3969,7 +3969,7 @@ היסטוריית סמנים שליחת קובץ GPX ל־OpenStreetMap נא למלא תגיות מופרדות בפסיקים. - ניתן למעקב משמעו שהמסלול לא יופיע ברישומים ציבוריים אך נקודות המעקב ממנו עדיין תהיינה זמינות דרך API ציבורי ל־GPS עם חותמות זמן. משתמשים אחרים יוכלו להוריד את נקודות המעקב המעובדות מהמסלול שלך שלא ניתן לשייך אותו ישירות אליך. + „ניתן למעקב” משמעו שהמסלול לא מופיע ברישומים ציבוריים אך נקודות המעקב שעובדו עם חותמות זמן ממנו (שלא ניתן לשייך אליך ישירות) תהיינה דרך ההורדות מה־API הציבורי של ה־GPS. סגירת הערת OSM להגיב על הערת OSM ניתן להיכנס באמצעות שיטת האימות המאובטחת OAuth או להיכנס עם שם הכניסה והססמה שלך. @@ -3979,4 +3979,7 @@ תמונות מסופקות על ידי מיזם הנתונים הפתוחים OpenPlaceReviews.org. כדי להעלות את התמונות שלך עליך להירשם לאתר. יצירת חשבון חדש כבר יש לי חשבון + היסטוריית חיפוש + קיאק + סירת מנוע \ No newline at end of file From 0f667af93d6029e7ee1254fd321aa8cf17513657 Mon Sep 17 00:00:00 2001 From: abdullah abdulrhman Date: Mon, 16 Nov 2020 19:14:12 +0000 Subject: [PATCH 041/198] Translated using Weblate (Arabic) Currently translated at 99.4% (3537 of 3555 strings) --- OsmAnd/res/values-ar/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 1164b64728..f9757646b9 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3965,4 +3965,7 @@ يتم توفير الصور من خلال مشروع البيانات المفتوحة OpenPlaceReviews.org. من أجل رفع الصور الخاصة بك، تحتاج إلى الاشتراك بالموقع. إنشاء حساب جديد لدي حساب بالفعل + كاياك (قوارب صغيرة فردية) + زورق + سجل البحث \ No newline at end of file From 564a4dabcae7eb7bbd3f84644ec35adb16502bdd Mon Sep 17 00:00:00 2001 From: ovl-1 Date: Mon, 16 Nov 2020 20:11:30 +0000 Subject: [PATCH 042/198] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 50.3% (1791 of 3555 strings) --- OsmAnd/res/values-nb/strings.xml | 41 ++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index ec35b00fc7..cf1d352038 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -1410,7 +1410,7 @@ Nær Ser etter adresse Forkast rute - Filnavn inneholder ulovlig tegn + Ulovlig tegn i filnavn Tynn Middels Fet @@ -2018,7 +2018,7 @@ Kupert Småkupert Flatt - Foretrukket terreng: Flatt eller kupert. + Foretrukket terreng: flatt eller kupert. Legg til ny mappe GPX-spor Bruk høydedata @@ -2291,7 +2291,7 @@ Importer som favoritt Importer fil Velg hvordan avstand og retning til kartmarkører på kartskjermen angis: - kan importeres som favoritt eller GPX-fil. + kan importeres som favoritt eller en GPX-fil. Fullskjermmodus Utseende på kartet Legg til en gruppe @@ -2448,7 +2448,7 @@ Legger til første stopp Flytt reisemål opp og opprett et nytt Vis lukkede notater - Vis/skjul OSM-notater på kartet. + Vis eller skjul OSM-notater på kartet. GPX - egnet for eksport til JOSM eller andre OSM-redigeringsprogrammer. GPX-fil OSC-fil @@ -2773,7 +2773,7 @@ Rediger punkt Legg til punkt Lagre som spor - Du har lagt til %1$s punkter. Skriv inn navnet på filen og trykk \"Lagre\". + Du har lagt til %1$s punkter. Skriv inn et filnavn og trykk \"Lagre\". Punkt %1$s slettet Verden Øk søkeradius til %1$s @@ -2904,9 +2904,9 @@ Gå av på Sitt på stoppet Vis/skjul GPX-spor - Knapp som viser eller skjuler valgte GPX-spor på kartet. - Skjul GPX-spor - Vis GPX-spor + Knapp for å vise eller skjule valgte spor på kartet. + Skjul spor + Vis spor • Ny \'Anvisninger\'-skjerm: Viser hjem og arbeid som målknapper, snarvei til \"tidligere rute\", liste over aktive GPX-spor og markører, søkehistorikk \n \n • Ytterligere info under \"Rutedetaljer\": Veitype, -dekke, bratthet, jevnhet @@ -3016,9 +3016,9 @@ %1$d filer (%2$s) finnes på forrige plassering \'%3$s\'. Flytt kart Ikke flytt - Ruten til fots er omtrent %1$s og kan framskyndes av offentlig transport + Ruten til fots er omtrent %1$s, og kan være raskere enn offentlig transport OsmAnd fant ikke en rute som passet med innstillingene dine. - Prøv fotgjengernavigasjon. + Prøv navigering til fots. Prøv å endre innstillingene. Regn ut rute til fots Transporttype @@ -3307,7 +3307,7 @@ Taubane Overgang Spor lagret - Filnavnet er tomt + Tomt filnavn Vekk for sving Juster hvor lenge skjermen skal forbli påslått. Bruk nærhetssensor @@ -3475,7 +3475,7 @@ Åpne innstillinger Terreng %1$s av %2$s - Vis/skjul terreng + Vis eller skjul terreng Skjul terreng Vis terreng Slett beskrivelse @@ -3536,8 +3536,8 @@ Skjul offentlig transport Vis offentlig transport Tilbake til redigering - Opprett/rediger interessepunkt - Vis/skjul offentlig transport + Opprett eller rediger interessepunkt + Vis eller skjul offentlig transport Legg til profil Knapp for vising eller skjuling av offentlig transport på kartet. Direkte-til-punkt @@ -3576,7 +3576,7 @@ Aragonesisk Langobardisk Parkeringsposisjoner - Legg til / rediger profil + Legg til eller rediger favoritt All data fra %1$s er importert, du kan bruke knappene nedenfor for å åpne den delen du trenger for å håndtere den. Alle profilinnstillinger blir gjenopprettet til deres opprinnelige tilstand etter opprettelse/import av denne profilen. Er du sikker på at du vil tømme lagret data\? @@ -3687,7 +3687,7 @@ Rullestol framover Still inn arbeidsdager for å fortsette Legg til i et spor - Vis ikoner for start og mål + Vis start- og målikoner Velg bredde Velg intervallet hvor markeringer med avstand eller tid på sporet vil vises. Velg det ønskede oppdelingsalternativet: etter tid eller etter avstand. @@ -3747,7 +3747,7 @@ Sist endret Navn: Å - A Navn: A - Å - Start/mål-ikoner + Start- og målikoner Lagre som ny sporfil Legg til i en sporfil Spor @@ -3842,7 +3842,7 @@ Er du sikker på at du ønsker å forkaste alle endringer i planlagt rute ved å lukke den\? Naviger fra min posisjon til sporet Innebygd utvikling for offentlig transport - Bytt til Java (trykk) ruteberegning for offentlig transport + Bytt til Java (sikker) ruteberegning for offentlig transport Takk for at du kjøpte «Koter» Kompleks ruting Unngå gangveier @@ -3911,4 +3911,9 @@ Legg til bilde Opprett ny konto Jeg har allerede en konto + Logg spor til GPX-fil + Spesifiser loggingsintervallet for det generelle sporingsopptaket (slått på via \'Turopptak\'-modulen på kartet). + Du må logge inn for å laste opp nye ting eller endringer. +\n +\nDu kan logge inn med den sikre OAuth-metoden eller benytte ditt brukernavn og passord. \ No newline at end of file From 20d3189d82188b1e9dbfd322ec10f1a68a4b0858 Mon Sep 17 00:00:00 2001 From: Franco Date: Mon, 16 Nov 2020 19:23:54 +0000 Subject: [PATCH 043/198] Translated using Weblate (Spanish (Argentina)) Currently translated at 99.9% (3554 of 3555 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 0e048a94db..3d4b451190 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -1921,7 +1921,7 @@ Informe completo Nombre de usuario y contraseña de OSM Informe - El nombre del archivo contiene caracteres ilegales + Carácter ilegal en el nombre del archivo Añade marcadores a través del mapa No se encontraron puntos de referencia Fino @@ -2462,7 +2462,7 @@ Navega por el mapa y añade puntos Medir distancia Añadir al menos un punto. - Nombre del GPX: + Nombre del archivo GPX: Mostrar en el mapa al guardar Añadir punto de referencia Guardar punto GPX @@ -3085,9 +3085,9 @@ Cambia el zoom del mapa desplazando la rueda hacia arriba y abajo. La tecla «Escape» retrocede a la aplicación WunderLINQ. Controlar con WunderLINQ Añadir al menos un elemento a la lista en los ajustes de «Acción rápida» - Esquí alpino o de descenso + Esquí alpino y de descenso Pistas de esquí alpino o de descenso y acceso a remontes mecánicos. - Esquí de travesía o nórdico + Esquí de travesía y nórdico Senderos para esquí nórdico o de travesía. Esquí de travesía Rutas para esquí de travesía. @@ -3368,7 +3368,7 @@ Punto de partida Estima el tiempo de llegada para los tipos de caminos desconocidos, y limita la velocidad para todos los caminos (puede afectar a la ruta) Traza guardada - Nombre del archivo vacío + Nombre de archivo vacío Revertir Un botón para hacer que la pantalla se centre en el punto de partida. Luego define el destino o activa el cálculo de la ruta. Mostrar nodo de la red de rutas ciclistas @@ -3875,7 +3875,7 @@ Nombre del archivo Grabar La grabación de la traza se pausará al cerrar la aplicación (mediante aplicaciones recientes). (La indicación de fondo de OsmAnd, desaparecerá de la barra de notificaciones de Android.) - Intervalo de registro para la grabación general de trazas (activar mediante el widget de grabación de viaje sobre el mapa). + Intervalo de registro para la grabación general de trazas (activado desde el widget «Grabación de viaje» en el mapa). Pausar grabación del viaje Reanudar grabación del viaje Predefinido del sistema @@ -3893,7 +3893,7 @@ Rehacer • Se ha actualizado la función «Planificar ruta»: permite utilizar diferentes tipos de navegación por segmento y la inclusión de trazas \n -\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio/fin. +\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio y fin. \n \n • Mejoras en la visibilidad de los nodos de bicicleta. \n @@ -3909,7 +3909,7 @@ Último modificado Nombre: Z – A Nombre: A – Z - Iconos de inicio/fin + Iconos de inicio y fin Gracias por comprar las «Curvas de nivel» La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en AppGallery. El pago será cargado a la cuenta de AppGallery al confirmar la compra. @@ -3969,10 +3969,10 @@ Historial de marcadores Enviar archivo GPX a OpenStreetMap Ingresa etiquetas separadas por comas. - Trazable significa que la traza no aparecerá en ninguna lista pública pero el conjunto de puntos estarán disponibles a través de la API pública de GPS y con marcas de tiempo. Otros usuarios sólo podrán descargar el conjunto de puntos procesados de su traza que no se pueden asociar directamente con usted. - Privado significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo. - Público significa que la traza se mostrará públicamente en tu listado de trazas y en los listados de trazas GPS públicas. Los datos servidos a través de la API no harán referencia a su página de trazas. Las marcas de tiempo de los puntos de la traza no estarán disponible a través de la API pública de GPS, aunque los puntos se ordenan cronológicamente. Sin embargo, otros usuarios podrán descargar la traza en bruto de la lista de trazas públicas y las marcas de tiempo que contiene. - Identificable significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Las marcas de tiempo de los puntos de la traza estarán disponibles a través de la API pública de GPS. + «Trazable» significa que la traza no aparece en ninguna lista pública, pero el conjunto de puntos procesados con marcas de tiempo (no se pueden asociar directamente con usted) estarán disponibles a través de la API pública de GPS. + «Privado» significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo. + «Público» significa que la traza se mostrará públicamente en tu listado de trazas y en los listados de trazas GPS públicas con marcas de tiempo en bruto. Los datos servidos a través de la API no harán referencia a su página de trazas. Las marcas de tiempo de los puntos de la traza no estarán disponible a través de la API pública de GPS, aunque los puntos se ordenan cronológicamente. + «Identificable» significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Cerrar nota de OSM Comentar nota de OSM Puedes iniciar sesión con el método seguro de OAuth o usar el nombre de usuario y contraseña. @@ -3982,4 +3982,7 @@ Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web. Crear nueva cuenta Ya tengo cuenta + Historial de búsqueda + Kayak + Lancha a motor \ No newline at end of file From 0c449093df53a3bef788f904f72922ea02c608d3 Mon Sep 17 00:00:00 2001 From: abdullah abdulrhman Date: Mon, 16 Nov 2020 20:08:53 +0000 Subject: [PATCH 044/198] Translated using Weblate (Arabic) Currently translated at 75.9% (2909 of 3830 strings) --- OsmAnd/res/values-ar/phrases.xml | 75 ++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/OsmAnd/res/values-ar/phrases.xml b/OsmAnd/res/values-ar/phrases.xml index 7a6b10d26f..d8372de23f 100644 --- a/OsmAnd/res/values-ar/phrases.xml +++ b/OsmAnd/res/values-ar/phrases.xml @@ -2886,4 +2886,79 @@ الخدمة الصحية: التطعيم: نعم الخدمة الصحية: الوقاية: لا الخدمة الصحية: الوقاية: نعم + رعاية الحيوانات: الأغنام + رعاية الحيوانات: خيل + رعاية الحيوانات + جُرف + مكملات غذائية + النوع + تجهيزات الإنارة + متجر الأقفال + متجر أجهزة كهربائية + تبتية + بلغاري + يهودي + سنغالي + مصري + كاجون + أسترالي + سوري + هولندي + تكس مكس + تايواني + باكستاني + إنجليزي + هاواي + أرميني + جامايكي + سويدي + كاتلوني + سويسري + الباسك + بلجيكي + أفغاني + أوكراني + شرق اوسطي + منغولي + نيبالي + أمريكي لاتيني + بريطاني + كوبي + تشيكي + أوزبكي + أوربي + لاو + مجري + إثيوبي + ايرلندي + ماليزي + نمساوي + مغربي + فارسي + مدغشقري + بوليفي + كرواتي + بيرو + بلقاني + أرجنتيني + كاريبي + أفريقي + إندونيسي + دانماركي + عربي + برازيلي + بولندي + جورجي + برتغالي + فيلبيني + روسي + لبناني + بافاريا + البحر المتوسط + كوري + فيتنامي + أسباني + تركي + عالمي + تايلندي \ No newline at end of file From 49c0e998bf69134eecfd81ef3f7513bea86f4864 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 16 Nov 2020 23:56:35 +0200 Subject: [PATCH 045/198] Fix crash: landscape tap on "Sign in..." --- .../net/osmand/plus/helpers/IntentHelper.java | 20 +++- .../oauth/OsmOAuthAuthorizationAdapter.java | 109 ++++++++++++++---- .../plus/osmedit/oauth/OsmOAuthHelper.java | 33 +----- 3 files changed, 104 insertions(+), 58 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java index 5fa07a91e3..25cc6dcc30 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java @@ -297,12 +297,7 @@ public class IntentHelper { Uri uri = intent.getData(); if (uri.toString().startsWith("osmand-oauth")) { String oauthVerifier = uri.getQueryParameter("oauth_verifier"); - app.getOsmOAuthHelper().authorize(oauthVerifier); - for (Fragment fragment : mapActivity.getSupportFragmentManager().getFragments()) { - if (fragment instanceof OsmAuthorizationListener) { - ((OsmAuthorizationListener) fragment).authorizationCompleted(); - } - } + app.getOsmOAuthHelper().authorize(oauthVerifier, getOnAuthorizeListener()); mapActivity.setIntent(null); return true; } @@ -310,6 +305,19 @@ public class IntentHelper { return false; } + private OsmAuthorizationListener getOnAuthorizeListener() { + return new OsmAuthorizationListener() { + @Override + public void authorizationCompleted() { + for (Fragment fragment : mapActivity.getSupportFragmentManager().getFragments()) { + if (fragment instanceof OsmAuthorizationListener) { + ((OsmAuthorizationListener) fragment).authorizationCompleted(); + } + } + } + }; + } + private boolean handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (!Algorithms.isEmpty(sharedText)) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java index 7c2562b580..726a1e1b37 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java @@ -1,10 +1,13 @@ package net.osmand.plus.osmedit.oauth; import android.net.TrafficStats; +import android.os.AsyncTask; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; +import androidx.annotation.NonNull; + import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; @@ -16,18 +19,22 @@ import net.osmand.osm.oauth.OsmOAuthAuthorizationClient; import net.osmand.plus.BuildConfig; import net.osmand.plus.OsmandApplication; +import org.apache.commons.logging.Log; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.concurrent.ExecutionException; +import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.*; + public class OsmOAuthAuthorizationAdapter { private static final int THREAD_ID = 10101; private static final String OSM_USER = "user"; private static final String DISPLAY_NAME = "display_name"; private static final String OSM_USER_DETAILS_URL = "https://api.openstreetmap.org/api/0.6/user/details"; + public final static Log log = PlatformUtil.getLog(OsmOAuthAuthorizationAdapter.class); private OsmandApplication app; private OsmOAuthAuthorizationClient client = @@ -61,9 +68,8 @@ public class OsmOAuthAuthorizationAdapter { } } - public void startOAuth(ViewGroup rootLayout) { - OAuth1RequestToken requestToken = client.startOAuth(); - loadWebView(rootLayout, client.getService().getAuthorizationUrl(requestToken)); + public void startOAuth(final ViewGroup rootLayout) { + new StartOAuthAsyncTask(rootLayout).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } private void saveToken() { @@ -93,30 +99,91 @@ public class OsmOAuthAuthorizationAdapter { return client.performRequestWithoutAuth(url, method, body); } - public void authorize(String oauthVerifier) { - client.authorize(oauthVerifier); - saveToken(); + public void authorize(String oauthVerifier, final OsmOAuthHelper helper, final OsmAuthorizationListener listener) { + new AuthorizeAsyncTask(helper, listener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, oauthVerifier); } - public String getUserName() throws InterruptedException, ExecutionException, IOException, XmlPullParserException { - Response response = getOsmUserDetails(); - return parseUserName(response); + private class StartOAuthAsyncTask extends AsyncTask { + + private final ViewGroup rootLayout; + + public StartOAuthAsyncTask(ViewGroup rootLayout) { + this.rootLayout = rootLayout; + } + + @Override + protected OAuth1RequestToken doInBackground(Void... params) { + return client.startOAuth(); + } + + @Override + protected void onPostExecute(@NonNull OAuth1RequestToken requestToken) { + loadWebView(rootLayout, client.getService().getAuthorizationUrl(requestToken)); + } + } - public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException { - return performRequest(OSM_USER_DETAILS_URL, Verb.GET.name(), null); - } + private class AuthorizeAsyncTask extends AsyncTask { - public String parseUserName(Response response) throws XmlPullParserException, IOException { - String userName = null; - XmlPullParser parser = PlatformUtil.newXMLPullParser(); - parser.setInput(response.getStream(), "UTF-8"); - int tok; - while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { - if (tok == XmlPullParser.START_TAG && OSM_USER.equals(parser.getName())) { - userName = parser.getAttributeValue("", DISPLAY_NAME); + private final OsmOAuthHelper helper; + private final OsmAuthorizationListener listener; + + public AuthorizeAsyncTask(OsmOAuthHelper helper, OsmAuthorizationListener listener) { + this.helper = helper; + this.listener = listener; + } + + @Override + protected Void doInBackground(String... oauthVerifier) { + client.authorize(oauthVerifier[0]); + saveToken(); + updateUserName(); + return null; + } + + @Override + protected void onPostExecute(Void result) { + if (listener != null) { + listener.authorizationCompleted(); } } - return userName; + + public void updateUserName() { + String userName = ""; + try { + userName = getUserName(); + } catch (InterruptedException e) { + log.error(e); + } catch (ExecutionException e) { + log.error(e); + } catch (IOException e) { + log.error(e); + } catch (XmlPullParserException e) { + log.error(e); + } + app.getSettings().USER_DISPLAY_NAME.set(userName); + } + + public String getUserName() throws InterruptedException, ExecutionException, IOException, XmlPullParserException { + Response response = getOsmUserDetails(); + return parseUserName(response); + } + + public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException { + return performRequest(OSM_USER_DETAILS_URL, Verb.GET.name(), null); + } + + public String parseUserName(Response response) throws XmlPullParserException, IOException { + String userName = null; + XmlPullParser parser = PlatformUtil.newXMLPullParser(); + parser.setInput(response.getStream(), "UTF-8"); + int tok; + while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) { + if (tok == XmlPullParser.START_TAG && OSM_USER.equals(parser.getName())) { + userName = parser.getAttributeValue("", DISPLAY_NAME); + } + } + return userName; + } } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java index d13bf624f2..a9ff75c6b5 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java @@ -4,25 +4,13 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; -import net.osmand.PlatformUtil; import net.osmand.plus.OsmandApplication; -import org.apache.commons.logging.Log; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; -import java.util.concurrent.ExecutionException; - public class OsmOAuthHelper { - private static final Log log = PlatformUtil.getLog(OsmOAuthHelper.class); - - private final OsmandApplication app; - private final OsmOAuthAuthorizationAdapter authorizationAdapter; public OsmOAuthHelper(@NonNull OsmandApplication app) { - this.app = app; authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); } @@ -30,31 +18,14 @@ public class OsmOAuthHelper { authorizationAdapter.startOAuth(view); } - public void authorize(String oauthVerifier) { - authorizationAdapter.authorize(oauthVerifier); - updateUserName(); + public void authorize(String oauthVerifier, OsmAuthorizationListener listener) { + authorizationAdapter.authorize(oauthVerifier, this, listener); } public OsmOAuthAuthorizationAdapter getAuthorizationAdapter() { return authorizationAdapter; } - private void updateUserName() { - String userName = ""; - try { - userName = authorizationAdapter.getUserName(); - } catch (InterruptedException e) { - log.error(e); - } catch (ExecutionException e) { - log.error(e); - } catch (IOException e) { - log.error(e); - } catch (XmlPullParserException e) { - log.error(e); - } - app.getSettings().USER_DISPLAY_NAME.set(userName); - } - public interface OsmAuthorizationListener { void authorizationCompleted(); } From 06edbffb5d4ac5620a8b08b9a6a1acc39eed7da8 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Tue, 17 Nov 2020 01:34:24 +0200 Subject: [PATCH 046/198] UI fix: POI/OSM Note, Send GPX , Login/Password. TextFields Background color make the same for all textfields. Textfield top right and left rounded corners are missing. Account block, check text styles and sizes and size in Figma. If the text filed not empty, put the cursor at the end of the text. --- OsmAnd/res/layout/osm_login_data.xml | 11 +- OsmAnd/res/layout/send_gpx_fragment.xml | 67 ++-- OsmAnd/res/layout/send_osm_note_fragment.xml | 297 +++++++++--------- OsmAnd/res/layout/send_poi_fragment.xml | 202 ++++++------ .../SendOsmNoteBottomSheetFragment.java | 4 +- .../dialogs/SendPoiBottomSheetFragment.java | 1 + .../bottomsheets/OsmLoginDataBottomSheet.java | 7 - 7 files changed, 301 insertions(+), 288 deletions(-) diff --git a/OsmAnd/res/layout/osm_login_data.xml b/OsmAnd/res/layout/osm_login_data.xml index 4679608265..363287fe72 100644 --- a/OsmAnd/res/layout/osm_login_data.xml +++ b/OsmAnd/res/layout/osm_login_data.xml @@ -1,5 +1,6 @@ + android:hint="@string/user_login" + app:boxBackgroundColor="?attr/text_input_background" + app:boxStrokeColor="@color/osmand_orange" + app:hintTextColor="@color/text_color_secondary_light"> + android:hint="@string/user_password" + app:boxBackgroundColor="?attr/text_input_background" + app:boxStrokeColor="@color/osmand_orange" + app:hintTextColor="@color/text_color_secondary_light"> @@ -51,6 +51,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/bottom_sheet_content_margin" android:hint="@string/gpx_tags_txt" + app:boxBackgroundColor="?attr/text_input_background" app:boxStrokeColor="@color/osmand_orange" app:helperText="@string/enter_text_separated" app:helperTextEnabled="true" @@ -62,7 +63,6 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/subHeaderPadding" android:imeOptions="actionDone" - android:background = "?attr/text_input_background" android:text="osmand" /> @@ -144,45 +144,41 @@ android:background="?attr/dashboard_divider" /> + android:orientation="horizontal"> + + + android:layout_width="216dp" + android:layout_height="@dimen/bottom_sheet_descr_height" + android:gravity="center_vertical" + android:orientation="vertical"> - \ No newline at end of file diff --git a/OsmAnd/res/layout/send_osm_note_fragment.xml b/OsmAnd/res/layout/send_osm_note_fragment.xml index 6cc897ee89..d98e60b260 100644 --- a/OsmAnd/res/layout/send_osm_note_fragment.xml +++ b/OsmAnd/res/layout/send_osm_note_fragment.xml @@ -1,169 +1,178 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:osmand="http://schemas.android.com/apk/res-auto" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> - + - + - - + + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + diff --git a/OsmAnd/res/layout/send_poi_fragment.xml b/OsmAnd/res/layout/send_poi_fragment.xml index 2f1ee7cf51..d81aa9cdda 100644 --- a/OsmAnd/res/layout/send_poi_fragment.xml +++ b/OsmAnd/res/layout/send_poi_fragment.xml @@ -1,123 +1,127 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:osmand="http://schemas.android.com/apk/res-auto" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> - + - + - + + android:imeOptions="actionDone" + android:lineSpacingExtra="5sp"/> - + - + - + - + - + - + - + - + - + - + + + diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java index 407e8c0b5f..79f082badd 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java @@ -6,6 +6,7 @@ import android.view.ContextThemeWrapper; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; +import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; @@ -71,8 +72,9 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen final View sendOsmNoteView = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.send_osm_note_fragment, null); - TextView noteText = sendOsmNoteView.findViewById(R.id.note_text); + EditText noteText = sendOsmNoteView.findViewById(R.id.note_text); noteText.setText(((OsmNotesPoint) poi[0]).getText()); + noteText.setSelection(noteText.getText().length()); TextInputLayout noteHint = sendOsmNoteView.findViewById(R.id.note_hint); noteHint.setHint(AndroidUtils.addColon(app, R.string.osn_bug_name)); accountBlockView = sendOsmNoteView.findViewById(R.id.account_container); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index 7755568e43..02c6527948 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -60,6 +60,7 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { messageEditText = sendOsmPoiView.findViewById(R.id.message_field); String defaultChangeSet = createDefaultChangeSet(app); messageEditText.setText(defaultChangeSet); + messageEditText.setSelection(messageEditText.getText().length()); final TextView accountName = sendOsmPoiView.findViewById(R.id.user_name); OsmandSettings settings = app.getSettings(); String userNameOAuth = settings.USER_DISPLAY_NAME.get(); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/OsmLoginDataBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/OsmLoginDataBottomSheet.java index 169d89b8cd..622fc11977 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/OsmLoginDataBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/OsmLoginDataBottomSheet.java @@ -47,8 +47,6 @@ public class OsmLoginDataBottomSheet extends BasePreferenceBottomSheet { userNameEditText = view.findViewById(R.id.name_edit_text); passwordEditText = view.findViewById(R.id.password_edit_text); - userNameEditText.setBackgroundColor(getResolvedColor(R.color.background_field)); - passwordEditText.setBackgroundColor(getResolvedColor(R.color.background_field)); String name = app.getSettings().USER_NAME.get(); String password = app.getSettings().USER_PASSWORD.get(); @@ -64,11 +62,6 @@ public class OsmLoginDataBottomSheet extends BasePreferenceBottomSheet { TextInputLayout loginBox = view.findViewById(R.id.name_text_box); TextInputLayout passwordBox = view.findViewById(R.id.password_text_box); - loginBox.setBoxStrokeColor(getResolvedColor(R.color.osmand_orange)); - loginBox.setHintTextColor(AppCompatResources.getColorStateList(getContext(),R.color.hint_label)); - passwordBox.setBoxStrokeColor(getResolvedColor(R.color.osmand_orange)); - passwordBox.setHintTextColor(AppCompatResources.getColorStateList(getContext(),R.color.hint_label)); - passwordBox.setStartIconDrawable(R.drawable.ic_action_lock); loginBox.setStartIconDrawable(R.drawable.ic_action_user_account); loginBox.setEndIconMode(TextInputLayout.END_ICON_CLEAR_TEXT); From 9bff04b0eb8db0c3be646491b148203971cd393d Mon Sep 17 00:00:00 2001 From: ovl-1 Date: Mon, 16 Nov 2020 20:53:04 +0000 Subject: [PATCH 047/198] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 50.9% (1810 of 3555 strings) --- OsmAnd/res/values-nb/strings.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index cf1d352038..8ccc84ede3 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -1692,8 +1692,8 @@ \n \n OsmAnd utvikles aktivt, og prosjektet vårt og dets videre framdrift avhenger av finansielle bidrag for å drive utviklingen og testingen av nye funksjoner. Overvei å kjøpe OsmAnd+ eller støtte spesifikke nye funksjoner eller bidra med en generell donasjon på https://osmand.net. Last opp ditt OSM-notat anonymt eller ved å bruke din profil hos OpenStreetMap.org. - Du har ingen GPX-filer enda - Du kan også legge til GPX-filer i mappen + Du har ingen sporfiler ennå + Du kan også legge til sporfiler i mappen Legg til flere… Skru på hurtigopptak Vis et systemvarsel som kan starte turopptak. @@ -1792,7 +1792,7 @@ Start nettbasert sporing Stopp nettbasert sporing Fant ikke noe. Hvis du ikke finner din region, kan du lage den selv (se https://osmand.net). - Ingen GPX-filer valgt. Velg en ved lang-trykking. + Spesifiser først en GPX-fil med et langt trykk. Oppdelingsintervall Nedstigning/stigning: %1$s Tidsrom: %1$s @@ -2020,7 +2020,7 @@ Flatt Foretrukket terreng: flatt eller kupert. Legg til ny mappe - GPX-spor + Spor Bruk høydedata Ta hensyn til terrenghøyde (data fra SRTM, ASTER og EU-DEM). Melding @@ -2708,7 +2708,7 @@ Dette programtillegget for OsmAnd gir deg detaljer om skibakker, langrennsløyper, alpine skiruter, taubaner og skiheiser. Ruter og løyper blir fargekodet etter vanskelighetsgrad, og vises i en spesiell \'Vinterkartstil\' som ligner et snødekt landskap. \n \nAktivering av denne visningen endrer kartstilen til \'Vinter og ski\', med alle kjennemerker for et landskap under vinterlige forhold. Denne visningen kan tilbakestilles enten ved å deaktivere tillegget igjen her, eller endre \'Kartstil\' under \'Kartinnstilling\'. - Dette programtillegget tilbyr et miniprogram på kartet der du kan opprette stier ved å trykke på kartet, eller ved å endre eksisterende GPX-filer, for å planlegge en tur og måle avstanden mellom punkter. Resultatet kan lagres som en GPX-fil, som senere kan brukes for veiledning. + Opprett stier ved å trykke på kartet, eller ved å bruke eller endre eksisterende GPX-filer, for å planlegge en tur og måle avstanden mellom punkter. Resultatet kan lagres som en GPX-fil, som senere kan brukes for veiledning. Via dette programtillegget kan OsmAnd brukes til å sende inn OSM-bidrag, som opprettelse eller endring av OSM-POI-objekter, åpning eller kommentering av OSM-notater, og bidrag til GPX-spor. OSM er et verdensomspennende kartprosjekt i offentlig eiendom. For detaljer, se https://openstreetmap.org. Aktiv deltagelse verdsettes, og bidrag kan gjøres direkte fra OsmAnd, hvis du angir din personlige OSM-innloggingsinfo i programmet. Kart \n • Viser interessepunkter rundt deg @@ -3916,4 +3916,7 @@ Du må logge inn for å laste opp nye ting eller endringer. \n \nDu kan logge inn med den sikre OAuth-metoden eller benytte ditt brukernavn og passord. + Søkehistorikk + Kajakk + Motorbåt \ No newline at end of file From 78f0b82c28c7c0922dfd6746dae725ca4dd94dc9 Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Tue, 17 Nov 2020 10:00:19 +0000 Subject: [PATCH 048/198] Translated using Weblate (Arabic) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index f9757646b9..88dbaf5ee9 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3324,7 +3324,7 @@ أضف عنصراً واحداً على الأقل إلى القائمة في إعدادات \"الاختصار السريع\" جبال الألب/التزلج علي المنحدرات التزلج على جبال الألب أو الانحدار. - التزلج عبر البلاد / الشمال + التزلج عبر الريف والشمال مسارات للتزلج الشمالي أو الريفي علي الثلج. جولة تزلج طرق لجولات التزلج. From f8012eb8d2c572c268b073711fd5dc5a3ccec805 Mon Sep 17 00:00:00 2001 From: Softmap Date: Mon, 16 Nov 2020 22:15:16 +0000 Subject: [PATCH 049/198] Translated using Weblate (Arabic) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-ar/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 88dbaf5ee9..26b1bd66e3 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -1469,7 +1469,7 @@ لون جي بي إكس منطقة حي - يحتوي اسم الملف على حرف غير قانوني + حرف غير قانوني في اسم الملف تقرير عن خرائط العالم حرك الخريطة لتغيير مكان التوجيه المباشر @@ -2454,7 +2454,7 @@ تصفح الخريطة وإضافة نقاط قياس المسافة الرجاء إضافة نقطة واحدة على الأقل. - اسم المسار : + اسم مسار الـGPX : عرض على الخريطة بعد الحفظ إضافة نقطة حفظ نقطة GPX @@ -2623,7 +2623,7 @@ تمت عملية استيراد الخريطة وضعها نقطة البداية إظهار الملاحظات المغلقة - عرض ملاحظات OSM على الخريطة. + عرض أو اخفاء ملاحظات OSM على الخريطة. ملف GPX ملف OSC قم باختيار نسق الملف @@ -3087,7 +3087,7 @@ تبديل %1$s و %2$s نقطة البداية تم حفظ المسار - اسم الملف فارغ + اسم ملف فارغ استرجاع مسح %1$s\? يرجى تشغيل وضع واحد على الأقل لاستخدام هذا الإعداد. @@ -3322,7 +3322,7 @@ حدد الأوضاع لتكون مرئية في التطبيق. أوضاع التطبيق أضف عنصراً واحداً على الأقل إلى القائمة في إعدادات \"الاختصار السريع\" - جبال الألب/التزلج علي المنحدرات + جبال الألب والتزلج علي المنحدرات التزلج على جبال الألب أو الانحدار. التزلج عبر الريف والشمال مسارات للتزلج الشمالي أو الريفي علي الثلج. @@ -3558,7 +3558,7 @@ زر لإظهار طبقة التضاريس أو إخفائها على الخريطة. إظهار التضاريس إخفاء التضاريس - إظهار/إخفاء التضاريس + إظهارأو إخفاء التضاريس المنحدرات التضاريس تمكين لعرض المنحدرات أو خريطة التضاريس. يمكنك قراءة المزيد عن أنواع الخرائط هذه على موقعنا. @@ -3681,11 +3681,11 @@ يمكنك الوصول إلى هذه الإجراءات عن طريق النقر على زر \"%1$s\". إخفاء وسائل النقل العام إظهار وسائل النقل العام - إظهار/إخفاء وسائل النقل العام + إظهارأو إخفاء وسائل النقل العام زر لإظهار أو إخفاء وسائل النقل العام على الخريطة. - إنشاء /تحرير موضع مكان + إنشاء أو تعديل نقطة الأهتمام POI مكان الموقف - إضافة / تحرير المفضلة + إضافة أو تعديل المفضلة استعادة ترتيب العناصر الافتراضية عودة إلى التحرير سيتم تبديل زر الإجراء التسجيل بين التشكيلات الجانبية المحددة. @@ -3856,7 +3856,7 @@ تغيير نوع المسار بعد %s ملفات مسارات محددة سيتم إيقاف تسجيل المسار مؤقتًا عند غلق التطبيق (عبر نافذة التطبيقات المستخدمة مؤخرا). (إشارة تشغيل التطبيق في الخلفية ستختفي من الشريط العلوي.) - حدد الفاصل الزمني للادخال الخاص بالتسجيل العام للمسار (مفعل من خلال ودجت تسجيل الرحلة على الخريطة). + حدد الفاصل الزمني للادخال الخاص بالتسجيل العام للمسار (مفعل من خلال ودجت \"تسجيل الرحلة\" على الخريطة). إيقاف تسجيل الرحلة مؤقتًا استئناف تسجيل الرحلة النظام الافتراضي @@ -3891,7 +3891,7 @@ آخر تعديل الاسم: أ – ي الاسم: أ – ي - رموز البدء/الانتهاء + أيقونات البدء والانتهاء شكرا لشرائك \"خطوط الكنتور\" رسوم الاشتراك ستفرض كل شهر. يمكنك إلغاء اشتراكك متى أردت عبر Google play. سيتم تحصيل المبلغ على حساب AppGallery الخاص بك عند تأكيد الشراء. @@ -3948,7 +3948,7 @@ استخدام تسجيل الدخول وكلمة المرور الحساب تسجيل الدخول - إمكانية التتبع تعني أن التتبع لن يظهر في أي قوائم عامة ولكن ستظل نقاط التتبع الصادرة عنه متاحة من خلال واجهة برمجة تطبيقات GPS API العامة مع طوابع زمنية. سيتمكن المستخدمون الآخرون فقط من تنزيل نقاط التتبع المعالجة من التتبع الخاص بك والتي لا يمكن ربطها بك مباشرةً. + \"إمكانية التتبع\" تعني أن التتبع لا يظهر في أي قوائم عامة ولكن نقاط التتبع المعالجة مع طوابع زمنية صادرة عنها(التي لا يمكن أن تكون مرتبطة بك مباشرة) ستظهر خلال التنزيلات من واجهة برمجة التطبيقات GPS API العامة. سجل تاريخ العلامات أرسل ملف GPX إلى OpenStreetMap أدخل العلامات مفصولة بفاصلة. From e5152aa947b4bfc6f2a49961786025a52b02c817 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 17 Nov 2020 13:12:29 +0200 Subject: [PATCH 050/198] Clean up UI and code --- .../res/layout/enough_space_warning_card.xml | 62 +++ OsmAnd/res/layout/fragment_import.xml | 36 +- .../layout/list_item_description_header.xml | 14 +- .../layout/profile_data_list_item_group.xml | 32 +- OsmAnd/res/values/sizes.xml | 2 + OsmAnd/res/values/strings.xml | 41 +- OsmAnd/src/net/osmand/AndroidUtils.java | 8 + .../plus/download/DownloadActivity.java | 41 +- .../plus/download/ReloadIndexesTask.java | 49 ++ .../settings/backend/ExportSettingsType.java | 24 +- .../backend/backup/SettingsHelper.java | 48 +- .../settings/fragments/ExportDataObject.java | 4 +- .../ExportImportSettingsAdapter.java | 499 +++++++++++------- .../fragments/ExportSettingsAdapter.java | 337 ++++++++++++ .../fragments/ExportSettingsFragment.java | 66 ++- .../fragments/ImportSettingsFragment.java | 92 ++-- .../settings/fragments/ReloadIndexesTack.java | 37 -- 17 files changed, 1023 insertions(+), 369 deletions(-) create mode 100644 OsmAnd/res/layout/enough_space_warning_card.xml create mode 100644 OsmAnd/src/net/osmand/plus/download/ReloadIndexesTask.java create mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java delete mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java diff --git a/OsmAnd/res/layout/enough_space_warning_card.xml b/OsmAnd/res/layout/enough_space_warning_card.xml new file mode 100644 index 0000000000..a39076eb99 --- /dev/null +++ b/OsmAnd/res/layout/enough_space_warning_card.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/fragment_import.xml b/OsmAnd/res/layout/fragment_import.xml index e9852ea58d..ef83bba63d 100644 --- a/OsmAnd/res/layout/fragment_import.xml +++ b/OsmAnd/res/layout/fragment_import.xml @@ -21,46 +21,49 @@ + android:paddingBottom="@dimen/bottom_sheet_title_padding_bottom" + android:visibility="invisible" + tools:visibility="visible"> @@ -78,26 +82,32 @@ android:layout_height="match_parent" /> diff --git a/OsmAnd/res/layout/list_item_description_header.xml b/OsmAnd/res/layout/list_item_description_header.xml index f27db51731..9ff915193d 100644 --- a/OsmAnd/res/layout/list_item_description_header.xml +++ b/OsmAnd/res/layout/list_item_description_header.xml @@ -10,15 +10,25 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/bg_color" + android:lineSpacingMultiplier="@dimen/line_spacing_multiplier_description" android:paddingStart="@dimen/content_padding" android:paddingTop="@dimen/list_header_settings_top_margin" android:paddingEnd="@dimen/content_padding" - android:lineSpacingMultiplier="@dimen/line_spacing_multiplier_description" android:paddingBottom="@dimen/list_header_settings_top_margin" android:textColor="?android:textColorPrimary" android:textSize="@dimen/default_list_text_size" tools:text="@string/select_data_to_import" /> - + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/profile_data_list_item_group.xml b/OsmAnd/res/layout/profile_data_list_item_group.xml index 6cf421ff8a..99bb29511b 100644 --- a/OsmAnd/res/layout/profile_data_list_item_group.xml +++ b/OsmAnd/res/layout/profile_data_list_item_group.xml @@ -14,12 +14,12 @@ @@ -48,16 +48,20 @@ android:id="@+id/title_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:letterSpacing="@dimen/text_button_letter_spacing" android:textColor="?android:textColorPrimary" android:textSize="@dimen/default_list_text_size" + osmand:lineHeight="@dimen/default_title_line_height" tools:text="Quick actions" /> @@ -66,8 +70,8 @@ android:id="@+id/vertical_divider" android:layout_width="1dp" android:layout_height="match_parent" - android:layout_marginTop="@dimen/content_padding" - android:layout_marginBottom="@dimen/content_padding" + android:layout_marginTop="@dimen/setting_profile_item_switch_margin" + android:layout_marginBottom="@dimen/setting_profile_item_switch_margin" android:background="?attr/list_divider" /> 23sp 15sp 15sp + 24sp + 20sp 13sp 13sp diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 9dee5100fe..6b382d13af 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,10 +11,15 @@ Thx - Hardy --> + There is not enough space + OsmAnd is needed %1$s to export a file. Your device only has %2$s free. You can free up space on the device, or skip some items from export. Needed for import Select the data to be exported to the file. Approximate file size Resources + Motorboat + Kayak + Search history I already have an account Create new account Photos are provided by open data project OpenPlaceReviews.org. In order to upload your photos you need to sign up on website. @@ -23,10 +28,10 @@ You can log in using the safe OAuth method or use your login and password. Comment OSM Note Close OSM Note - Trackable means that the trace will not show up in any public listings but trackpoints from it will still be available through the public GPS API with timestamps. Other users will only be able to download processed trackpoints from your trace which can\'t be associated with you directly. - Identifiable means that the trace will be shown publicly in Your GPS traces and in public GPS trace listings, i.e. other users will be able to download the raw trace and associate it with your username. Data served via the trackpoints API will reference your original trace page. Timestamps of the trace points are available through the public GPS API. - Private means that the trace will not show up in any public listings, but trackpoints from it will still be available through the public GPS API without timestamps but will not be chronologically ordered. - Public means that the trace will be shown publicly in Your GPS traces and in public GPS trace listings. Data served via the API does not reference your trace page. Timestamps of the trace points are not available through the public GPS API, and the points are not chronologically ordered. However, other users are still able to download the raw trace from the public trace list and any timestamps contained within. + \"Trackable\" means the trace does not show up in any public listings, but processed trackpoints with timestamps from it (that can\'t be associated with you directly) do through downloads from the public GPS API. + \"Identifiable\" means that the trace will be shown publicly in Your GPS traces and in public GPS trace listings, i.e. other users will be able to download the raw trace and associate it with your username. Public timestamped tracepoint data from the GPS API served via the trackpoints API will reference your original trace page. + \"Private\" means the trace does not show up in any public listings, but trackpoints from it in unchronological order are available through the public GPS API without timestamps. + \"Public\" means the trace is shown publicly in your GPS traces and in public GPS trace listings, and in the public trace list with timestamps in raw form. Data served via the API does not reference your trace page. Tracepoint timestamps are not available through the public GPS API, and tracepoints are not chronologically ordered. Enter tags separated by comma. Send GPX file to OpenStreetMap Markers history @@ -78,13 +83,13 @@ Payment will be charged to your AppGallery account at the confirmation of purchase.\n\nSubscription automatically renews unless it is canceled before the renewal date. Your account will be charged for renewal period (month/three month/year) only on the renewal date.\n\nYou can manage and cancel your subscriptions by going to your AppGallery settings. Subscription charged per selected period. Cancel it on AppGallery at any time. Thank you for purchasing \'Contour lines\' - Start/finish icons + Start and finish icons Name: A – Z Name: Z – A Last modified • Updated "Plan a route" function: allows using different navigation types per segment and the inclusion of tracks\n\n - • New "Appearance" menu for tracks: select color, thickness, display direction arrows, start/finish icons\n\n + • New "Appearance" menu for tracks: select color, thickness, display direction arrows, start and finish icons\n\n • Improved visibility of bicycle nodes.\n\n • Tracks are now tappable, have context menu with basic info.\n\n • Improved "Search" algorithms\n\n @@ -104,11 +109,11 @@ System default Resume trip recording Pause trip recording - Specify the logging interval for the general track recording (enabled via the Trip recording widget on the map). + Specify the logging interval for the general track recording (turned on via the \'Trip recording\' widget on the map). Will pause track logging when the app is killed (via recent apps). (OsmAnd background indication disappears from the Android notification bar.) REC %s track files selected - File name + Filename Only the route line will be saved, the waypoints will be deleted. Simplified track Change route type after @@ -270,11 +275,11 @@ The action button switches between selected profiles. Back to editing Restore default items order - Add / Edit Favorite + Add or edit favorite Parking positions - Create / Edit POI + Create or edit POI Button showing or hiding public transport on the map. - Show/hide public transport + Show or hide public transport Show public transport Hide public transport @@ -376,7 +381,7 @@ A button to show or hide terrain layer on the map. Show terrain Hide terrain - Show / hide terrain + Show or hide terrain Slopes %1$s of %2$s The route will be recalculated if the distance from the route to the current location is more than selected value. @@ -561,7 +566,7 @@ Clear %1$s? Revert Track saved - File name is empty + Empty filename Estimates arrival time for unknown road types, and limits speed for all roads (may affect routing) White Swap %1$s and %2$s @@ -1173,7 +1178,7 @@ Adds initial stop Move destination up, and create it Show closed notes - Show/hide OSM notes on the map. + Show or hide OSM notes on the map. GPX - suitable for export to JOSM or other OSM editors. OSC - suitable for export to OSM. GPX file @@ -1335,7 +1340,7 @@ Save the points either as route points or as a line. Select navigation profile Please add at least one point. - GPX file name: + GPX filename: Show on map after saving Browse the map and add points Measure distance @@ -3826,7 +3831,7 @@ Number of contributors Number of edits Report for - File name contains illegal character + Illegal character in filename Quick action Action %d Screen %d @@ -3948,9 +3953,9 @@ No cobblestone or sett Avoids cobblestone and sett Add at least one item to the list in the \'Quick action\' settings - Alpine/downhill ski + Alpine and downhill skiing Slopes for alpine or downhill skiing and access to ski lifts. - Cross country/nordic ski + Cross country and nordic skiing Trails for nordic or cross-country skiing. Ski touring Routes for ski touring. diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java index 40ea9cfb98..af0d934083 100644 --- a/OsmAnd/src/net/osmand/AndroidUtils.java +++ b/OsmAnd/src/net/osmand/AndroidUtils.java @@ -788,6 +788,14 @@ public class AndroidUtils { return result; } + public static long getAvailableSpace(@Nullable File dir) { + if (dir != null && dir.canRead()) { + StatFs fs = new StatFs(dir.getAbsolutePath()); + return fs.getAvailableBlocksLong() * fs.getBlockSize(); + } + return -1; + } + public static float getFreeSpaceGb(File dir) { if (dir.canRead()) { StatFs fs = new StatFs(dir.getAbsolutePath()); diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java index 3ebd06b4b4..52bb44bf5f 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java @@ -22,7 +22,6 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.Space; import android.widget.TextView; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -36,7 +35,6 @@ import androidx.fragment.app.FragmentActivity; import androidx.viewpager.widget.ViewPager; import net.osmand.AndroidUtils; -import net.osmand.IProgress; import net.osmand.IndexConstants; import net.osmand.PlatformUtil; import net.osmand.access.AccessibilityAssistant; @@ -45,7 +43,6 @@ import net.osmand.data.PointDescription; import net.osmand.map.WorldRegion; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.Version; import net.osmand.plus.activities.LocalIndexInfo; @@ -64,6 +61,8 @@ import net.osmand.plus.helpers.FileNameTranslationHelper; import net.osmand.plus.inapp.InAppPurchaseHelper; import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseTaskType; import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin; +import net.osmand.plus.settings.backend.OsmandSettings; +import net.osmand.plus.download.ReloadIndexesTask.ReloadIndexesListener; import net.osmand.plus.srtmplugin.SRTMPlugin; import net.osmand.plus.views.controls.PagerSlidingTabStrip; import net.osmand.util.Algorithms; @@ -389,8 +388,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo return !Version.isPaidVersion(application) || application.getSettings().SHOULD_SHOW_FREE_VERSION_BANNER.get(); } - - + public static class FreeVersionBanner { private final View freeVersionBanner; private final View freeVersionBannerTitle; @@ -441,7 +439,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo freeVersionBanner.setVisibility(View.VISIBLE); downloadsLeftProgressBar.setMax(DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS); freeVersionDescriptionTextView.setText(ctx.getString(R.string.free_version_message, - DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS +"" )); + DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS + "")); LinearLayout marksLinearLayout = (LinearLayout) freeVersionBanner.findViewById(R.id.marksLinearLayout); Space spaceView = new Space(ctx); @@ -493,6 +491,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo freeVersionBannerTitle.setVisibility(View.VISIBLE); } } + private void updateAvailableDownloads() { int activeTasks = ctx.getDownloadThread().getCountedDownloads(); OsmandSettings settings = ctx.getMyApplication().getSettings(); @@ -570,36 +569,26 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo } } - @SuppressLint("StaticFieldLeak") public void reloadLocalIndexes() { - AsyncTask> task = new AsyncTask>() { + final OsmandApplication app = (OsmandApplication) getApplication(); + ReloadIndexesTask reloadIndexesTask = new ReloadIndexesTask(app, new ReloadIndexesListener() { @Override - protected void onPreExecute() { - super.onPreExecute(); + public void reloadIndexesStarted() { setSupportProgressBarIndeterminateVisibility(true); } @Override - protected List doInBackground(Void... params) { - return getMyApplication().getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, - new ArrayList() - ); - } - - @Override - protected void onPostExecute(List warnings) { + public void reloadIndexesFinished(List warnings) { setSupportProgressBarIndeterminateVisibility(false); - if (!warnings.isEmpty()) { - Toast.makeText(DownloadActivity.this, AndroidUtils.formatWarnings(warnings).toString(), Toast.LENGTH_LONG).show(); + if (!Algorithms.isEmpty(warnings)) { + app.showToastMessage(AndroidUtils.formatWarnings(warnings).toString()); } newDownloadIndexes(); } - }; - task.executeOnExecutor(singleThreadExecutor); + }); + reloadIndexesTask.executeOnExecutor(singleThreadExecutor); } - - public void setDownloadItem(WorldRegion region, String targetFileName) { if (downloadItem == null) { downloadItem = region; @@ -666,8 +655,8 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo int percent = 0; if (dir.canRead()) { StatFs fs = new StatFs(dir.getAbsolutePath()); - size = AndroidUtils.formatSize(activity, ((long)fs.getAvailableBlocks()) * fs.getBlockSize()); - percent = 100 - (int)((long)fs.getAvailableBlocks() * 100 / fs.getBlockCount()); + size = AndroidUtils.formatSize(activity, ((long) fs.getAvailableBlocks()) * fs.getBlockSize()); + percent = 100 - (int) ((long) fs.getAvailableBlocks() * 100 / fs.getBlockCount()); } sizeProgress.setIndeterminate(false); sizeProgress.setProgress(percent); diff --git a/OsmAnd/src/net/osmand/plus/download/ReloadIndexesTask.java b/OsmAnd/src/net/osmand/plus/download/ReloadIndexesTask.java new file mode 100644 index 0000000000..873d73b671 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/download/ReloadIndexesTask.java @@ -0,0 +1,49 @@ +package net.osmand.plus.download; + +import android.os.AsyncTask; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import net.osmand.IProgress; +import net.osmand.plus.OsmandApplication; + +import java.util.ArrayList; +import java.util.List; + +public class ReloadIndexesTask extends AsyncTask> { + + private final OsmandApplication app; + private final ReloadIndexesListener listener; + + public ReloadIndexesTask(@NonNull OsmandApplication app, @Nullable ReloadIndexesListener listener) { + this.app = app; + this.listener = listener; + } + + @Override + protected void onPreExecute() { + if (listener != null) { + listener.reloadIndexesStarted(); + } + } + + @Override + protected List doInBackground(Void... params) { + return app.getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, new ArrayList()); + } + + @Override + protected void onPostExecute(List warnings) { + if (listener != null) { + listener.reloadIndexesFinished(warnings); + } + } + + public interface ReloadIndexesListener { + + void reloadIndexesStarted(); + + void reloadIndexesFinished(List warnings); + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java b/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java index 10e392d0cc..bf86c42ee6 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/ExportSettingsType.java @@ -7,23 +7,24 @@ import net.osmand.plus.R; public enum ExportSettingsType { PROFILE(R.string.shared_string_profiles, R.drawable.ic_action_manage_profiles), + GLOBAL(R.string.general_settings_2, R.drawable.ic_action_settings), QUICK_ACTIONS(R.string.configure_screen_quick_action, R.drawable.ic_quick_action), POI_TYPES(R.string.poi_dialog_poi_type, R.drawable.ic_action_info_dark), - MAP_SOURCES(R.string.quick_action_map_source_title, R.drawable.ic_map), - CUSTOM_RENDER_STYLE(R.string.shared_string_rendering_style, R.drawable.ic_action_map_style), - CUSTOM_ROUTING(R.string.shared_string_routing, R.drawable.ic_action_route_distance), + SEARCH_HISTORY(R.string.shared_string_search_history, R.drawable.ic_action_history), AVOID_ROADS(R.string.avoid_road, R.drawable.ic_action_alert), + FAVORITES(R.string.shared_string_favorites, R.drawable.ic_action_favorite), TRACKS(R.string.shared_string_tracks, R.drawable.ic_action_route_distance), - MULTIMEDIA_NOTES(R.string.audionotes_plugin_name, R.drawable.ic_action_photo_dark), - GLOBAL(R.string.general_settings_2, R.drawable.ic_action_settings), OSM_NOTES(R.string.osm_notes, R.drawable.ic_action_openstreetmap_logo), OSM_EDITS(R.string.osm_edits, R.drawable.ic_action_openstreetmap_logo), - OFFLINE_MAPS(R.string.shared_string_maps, R.drawable.ic_map), - FAVORITES(R.string.shared_string_favorites, R.drawable.ic_action_favorite), - TTS_VOICE(R.string.local_indexes_cat_tts, R.drawable.ic_action_volume_up), - VOICE(R.string.local_indexes_cat_voice, R.drawable.ic_action_volume_up), + MULTIMEDIA_NOTES(R.string.audionotes_plugin_name, R.drawable.ic_grouped_by_type), ACTIVE_MARKERS(R.string.map_markers, R.drawable.ic_action_flag), - HISTORY_MARKERS(R.string.markers_history, R.drawable.ic_action_flag); + HISTORY_MARKERS(R.string.markers_history, R.drawable.ic_action_flag), + CUSTOM_RENDER_STYLE(R.string.shared_string_rendering_style, R.drawable.ic_action_map_style), + CUSTOM_ROUTING(R.string.shared_string_routing, R.drawable.ic_action_route_distance), + MAP_SOURCES(R.string.quick_action_map_source_title, R.drawable.ic_map), + OFFLINE_MAPS(R.string.shared_string_maps, R.drawable.ic_map), + TTS_VOICE(R.string.local_indexes_cat_tts, R.drawable.ic_action_volume_up), + VOICE(R.string.local_indexes_cat_voice, R.drawable.ic_action_volume_up); @StringRes private final int titleId; @@ -46,7 +47,8 @@ public enum ExportSettingsType { } public boolean isSettingsCategory() { - return this == PROFILE || this == GLOBAL || this == QUICK_ACTIONS || this == POI_TYPES; + return this == PROFILE || this == GLOBAL || this == QUICK_ACTIONS || this == POI_TYPES + || this == SEARCH_HISTORY || this == AVOID_ROADS; } public boolean isMyPlacesCategory() { diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 3a0cbe8a61..910ac66ab3 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -29,6 +29,8 @@ import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; import net.osmand.plus.helpers.FileNameTranslationHelper; import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.helpers.GpxUiHelper.GPXInfo; +import net.osmand.plus.helpers.SearchHistoryHelper; +import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.mapmarkers.MapMarkersGroup; import net.osmand.plus.osmedit.OpenstreetmapPoint; @@ -504,12 +506,15 @@ public class SettingsHelper { List resourcesItems = getResourcesItems(); if (!settingsItems.isEmpty()) { + sortExportSettingsObjects(settingsItems); dataList.put(ExportSettingsCategory.SETTINGS, settingsItems); } if (!myPlacesItems.isEmpty()) { + sortExportSettingsObjects(myPlacesItems); dataList.put(ExportSettingsCategory.MY_PLACES, myPlacesItems); } if (!resourcesItems.isEmpty()) { + sortExportSettingsObjects(resourcesItems); dataList.put(ExportSettingsCategory.RESOURCES, resourcesItems); } @@ -537,7 +542,14 @@ public class SettingsHelper { if (!poiList.isEmpty()) { settingsItems.add(new ExportDataObject(ExportSettingsType.POI_TYPES, poiList)); } - + List historyEntries = SearchHistoryHelper.getInstance(app).getHistoryEntries(false); + if (!historyEntries.isEmpty()) { + settingsItems.add(new ExportDataObject(ExportSettingsType.SEARCH_HISTORY, historyEntries)); + } + Map impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads(); + if (!impassableRoads.isEmpty()) { + settingsItems.add(new ExportDataObject(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values()))); + } return settingsItems; } @@ -653,10 +665,6 @@ public class SettingsHelper { if (!files.isEmpty()) { resourcesItems.add(new ExportDataObject(ExportSettingsType.VOICE, files)); } - Map impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads(); - if (!impassableRoads.isEmpty()) { - resourcesItems.add(new ExportDataObject(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values()))); - } return resourcesItems; } @@ -699,6 +707,7 @@ public class SettingsHelper { List osmEditsPointList = new ArrayList<>(); List markersGroups = new ArrayList<>(); List markersHistoryGroups = new ArrayList<>(); + List historyEntries = new ArrayList<>(); for (Object object : data) { if (object instanceof QuickAction) { @@ -730,6 +739,8 @@ public class SettingsHelper { } else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) { markersHistoryGroups.add((MapMarkersGroup) object); } + } else if (object instanceof HistoryEntry) { + historyEntries.add((HistoryEntry) object); } } if (!quickActions.isEmpty()) { @@ -775,6 +786,9 @@ public class SettingsHelper { } settingsItems.add(new HistoryMarkersSettingsItem(app, mapMarkers)); } + if (!historyEntries.isEmpty()) { + settingsItems.add(new SearchHistorySettingsItem(app, historyEntries)); + } return settingsItems; } @@ -797,12 +811,15 @@ public class SettingsHelper { } } if (!settingsItems.isEmpty()) { + sortExportSettingsObjects(settingsItems); exportMap.put(ExportSettingsCategory.SETTINGS, settingsItems); } if (!myPlacesItems.isEmpty()) { + sortExportSettingsObjects(myPlacesItems); exportMap.put(ExportSettingsCategory.MY_PLACES, myPlacesItems); } if (!resourcesItems.isEmpty()) { + sortExportSettingsObjects(resourcesItems); exportMap.put(ExportSettingsCategory.RESOURCES, resourcesItems); } @@ -829,6 +846,7 @@ public class SettingsHelper { List favoriteGroups = new ArrayList<>(); List markersGroups = new ArrayList<>(); List markersHistoryGroups = new ArrayList<>(); + List historyEntries = new ArrayList<>(); for (SettingsItem item : settingsItems) { switch (item.getType()) { @@ -916,6 +934,10 @@ public class SettingsHelper { HistoryMarkersSettingsItem historyMarkersSettingsItem = (HistoryMarkersSettingsItem) item; markersHistoryGroups.add(historyMarkersSettingsItem.getMarkersGroup()); break; + case SEARCH_HISTORY: + SearchHistorySettingsItem searchHistorySettingsItem = (SearchHistorySettingsItem) item; + historyEntries.addAll(searchHistorySettingsItem.getItems()); + break; default: break; } @@ -972,9 +994,12 @@ public class SettingsHelper { if (!markersGroups.isEmpty()) { settingsToOperate.put(ExportSettingsType.ACTIVE_MARKERS, markersGroups); } - if (!markersGroups.isEmpty()) { + if (!markersHistoryGroups.isEmpty()) { settingsToOperate.put(ExportSettingsType.HISTORY_MARKERS, markersHistoryGroups); } + if (!historyEntries.isEmpty()) { + settingsToOperate.put(ExportSettingsType.SEARCH_HISTORY, historyEntries); + } return settingsToOperate; } @@ -991,4 +1016,15 @@ public class SettingsHelper { } }); } + + private static void sortExportSettingsObjects(List items) { + Collections.sort(items, new Comparator() { + @Override + public int compare(ExportDataObject lhs, ExportDataObject rhs) { + int order1 = lhs.getType().ordinal(); + int order2 = rhs.getType().ordinal(); + return (order1 < order2) ? -1 : ((order1 == order2) ? 0 : 1); + } + }); + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java index 11cb9a79b6..e8ede12a77 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java @@ -1,5 +1,7 @@ package net.osmand.plus.settings.fragments; +import androidx.annotation.NonNull; + import net.osmand.plus.settings.backend.ExportSettingsType; import java.util.List; @@ -9,7 +11,7 @@ public class ExportDataObject { private ExportSettingsType type; private List items; - public ExportDataObject(ExportSettingsType type, List items) { + public ExportDataObject(@NonNull ExportSettingsType type, @NonNull List items) { this.type = type; this.items = items; } diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java index 24df2f294f..2643b5230d 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportImportSettingsAdapter.java @@ -4,6 +4,8 @@ import android.content.res.ColorStateList; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; @@ -11,16 +13,33 @@ import androidx.core.content.ContextCompat; import androidx.core.widget.CompoundButtonCompat; import net.osmand.AndroidUtils; +import net.osmand.IndexConstants; import net.osmand.PlatformUtil; +import net.osmand.map.ITileSource; +import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.OsmandBaseExpandableListAdapter; -import net.osmand.plus.helpers.AndroidUiHelper; -import net.osmand.plus.helpers.FontCache; -import net.osmand.plus.settings.backend.ExportSettingsCategory; +import net.osmand.plus.audionotes.AudioVideoNotesPlugin; +import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; +import net.osmand.plus.helpers.FileNameTranslationHelper; +import net.osmand.plus.helpers.GpxUiHelper; +import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; +import net.osmand.plus.osmedit.OpenstreetmapPoint; +import net.osmand.plus.osmedit.OsmEditingPlugin; +import net.osmand.plus.osmedit.OsmNotesPoint; +import net.osmand.plus.poi.PoiUIFilter; +import net.osmand.plus.profiles.ProfileIconColors; +import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources; +import net.osmand.plus.quickaction.QuickAction; +import net.osmand.plus.render.RenderingIcons; +import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.FileSettingsItem; +import net.osmand.plus.settings.backend.backup.GlobalSettingsItem; +import net.osmand.util.Algorithms; import net.osmand.view.ThreeStateCheckbox; import org.apache.commons.logging.Log; @@ -29,10 +48,11 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import static net.osmand.plus.settings.backend.ExportSettingsType.OFFLINE_MAPS; +import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype; import static net.osmand.view.ThreeStateCheckbox.State.CHECKED; import static net.osmand.view.ThreeStateCheckbox.State.MISC; import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; @@ -40,94 +60,91 @@ import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { private static final Log LOG = PlatformUtil.getLog(ExportImportSettingsAdapter.class.getName()); + private OsmandApplication app; + private UiUtilities uiUtilities; + private List data; + private Map> itemsMap; + private List itemsTypes; + private boolean nightMode; + private boolean importState; + private int activeColorRes; + private int secondaryColorRes; - private final OsmandApplication app; - private final UiUtilities uiUtilities; - - private List itemsTypes = new ArrayList<>(); - private Map> selectedItemsMap = new HashMap<>(); - private Map> itemsMap = new LinkedHashMap<>(); - - private final OnItemSelectedListener listener; - - private final LayoutInflater themedInflater; - - private final boolean nightMode; - private final int activeColorRes; - private final int secondaryColorRes; - - ExportImportSettingsAdapter(OsmandApplication app, OnItemSelectedListener listener, boolean nightMode) { + ExportImportSettingsAdapter(OsmandApplication app, boolean nightMode, boolean importState) { this.app = app; - this.listener = listener; this.nightMode = nightMode; + this.importState = importState; + this.itemsMap = new HashMap<>(); + this.itemsTypes = new ArrayList<>(); + this.data = new ArrayList<>(); uiUtilities = app.getUIUtilities(); - themedInflater = UiUtilities.getInflater(app, nightMode); - activeColorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light; - secondaryColorRes = nightMode ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light; + activeColorRes = nightMode + ? R.color.icon_color_active_dark + : R.color.icon_color_active_light; + secondaryColorRes = nightMode + ? R.color.icon_color_secondary_dark + : R.color.icon_color_secondary_light; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View group = convertView; if (group == null) { - group = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); + LayoutInflater inflater = UiUtilities.getInflater(app, nightMode); + group = inflater.inflate(R.layout.profile_data_list_item_group, parent, false); } - final ExportSettingsCategory category = itemsTypes.get(groupPosition); - final List items = itemsMap.get(category); - String title = app.getString(category.getTitleId()); + boolean isLastGroup = groupPosition == getGroupCount() - 1; + final ExportSettingsType type = itemsTypes.get(groupPosition); + TextView titleTv = group.findViewById(R.id.title_tv); - titleTv.setText(UiUtilities.createCustomFontSpannable(FontCache.getRobotoMedium(app), title, title)); - TextView subTextTv = group.findViewById(R.id.sub_text_tv); - subTextTv.setText(getCategoryDescr(category)); - - int selectedTypes = 0; - for (int i = 0; i < items.size(); i++) { - ExportDataObject object = items.get(i); - if (selectedItemsMap.containsKey(object.getType())) { - selectedTypes++; - } - } final ThreeStateCheckbox checkBox = group.findViewById(R.id.check_box); - if (selectedTypes == 0) { - checkBox.setState(UNCHECKED); + FrameLayout checkBoxContainer = group.findViewById(R.id.check_box_container); + ImageView expandIv = group.findViewById(R.id.explist_indicator); + View lineDivider = group.findViewById(R.id.divider); + View cardTopDivider = group.findViewById(R.id.card_top_divider); + View cardBottomDivider = group.findViewById(R.id.card_bottom_divider); + + titleTv.setText(getGroupTitle(type)); + lineDivider.setVisibility(importState || isExpanded || isLastGroup ? View.GONE : View.VISIBLE); + cardTopDivider.setVisibility(importState ? View.VISIBLE : View.GONE); + cardBottomDivider.setVisibility(importState && !isExpanded ? View.VISIBLE : View.GONE); + + final List listItems = itemsMap.get(type); + subTextTv.setText(getSelectedItemsAmount(listItems, type)); + + if (data.containsAll(listItems)) { + checkBox.setState(CHECKED); } else { - checkBox.setState(selectedTypes == items.size() ? CHECKED : MISC); + boolean contains = false; + for (Object object : listItems) { + if (data.contains(object)) { + contains = true; + break; + } + } + checkBox.setState(contains ? MISC : UNCHECKED); } int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); - - group.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { + checkBoxContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkBox.performClick(); - boolean selected = checkBox.getState() == CHECKED; - if (selected) { - for (ExportDataObject object : items) { - if (!selectedItemsMap.containsKey(object.getType())) { - selectedItemsMap.put(object.getType(), (List) object.getItems()); + if (checkBox.getState() == CHECKED) { + for (Object object : listItems) { + if (!data.contains(object)) { + data.add(object); } } - } else { - for (ExportDataObject object : items) { - selectedItemsMap.remove(object.getType()); - } - } - if (listener != null) { - listener.onCategorySelected(category, selected); + data.removeAll(listItems); } notifyDataSetChanged(); } }); - adjustIndicator(app, groupPosition, isExpanded, group, nightMode); - AndroidUiHelper.updateVisibility(group.findViewById(R.id.divider), isExpanded); - AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_top_divider), true); - AndroidUiHelper.updateVisibility(group.findViewById(R.id.vertical_divider), false); - AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_bottom_divider), !isExpanded); - return group; } @@ -135,57 +152,172 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View child = convertView; if (child == null) { - child = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); + LayoutInflater inflater = UiUtilities.getInflater(app, nightMode); + child = inflater.inflate(R.layout.profile_data_list_item_child, parent, false); } - final ExportDataObject currentItem = itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); - List selectedItems = selectedItemsMap.get(currentItem.getType()); + final Object currentItem = itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); - TextView titleTv = child.findViewById(R.id.title_tv); - titleTv.setText(currentItem.getType().getTitleId()); + boolean isLastGroup = groupPosition == getGroupCount() - 1; + boolean itemSelected = data.contains(currentItem); + final ExportSettingsType type = itemsTypes.get(groupPosition); - TextView subTextTv = child.findViewById(R.id.sub_text_tv); - subTextTv.setText(getSelectedTypeDescr(currentItem)); + TextView title = child.findViewById(R.id.title_tv); + TextView subText = child.findViewById(R.id.sub_title_tv); + subText.setVisibility(View.GONE); + final CheckBox checkBox = child.findViewById(R.id.check_box); + ImageView icon = child.findViewById(R.id.icon); + View lineDivider = child.findViewById(R.id.divider); + View cardBottomDivider = child.findViewById(R.id.card_bottom_divider); - ImageView icon = child.findViewById(R.id.explist_indicator); - setupIcon(icon, currentItem.getType().getIconRes(), selectedItems != null); - - final ThreeStateCheckbox checkBox = child.findViewById(R.id.check_box); - if (selectedItems == null) { - checkBox.setState(UNCHECKED); - } else if (selectedItems.containsAll(currentItem.getItems())) { - checkBox.setState(CHECKED); - } else { - boolean contains = false; - for (Object object : currentItem.getItems()) { - if (selectedItems.contains(object)) { - contains = true; - break; - } - } - checkBox.setState(contains ? MISC : UNCHECKED); - } - - int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; + lineDivider.setVisibility(!importState && isLastChild && !isLastGroup ? View.VISIBLE : View.GONE); + cardBottomDivider.setVisibility(importState && isLastChild ? View.VISIBLE : View.GONE); + int checkBoxColor = itemSelected ? activeColorRes : secondaryColorRes; CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); - child.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { + + checkBox.setChecked(itemSelected); + checkBox.setClickable(false); + child.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - checkBox.performClick(); - boolean selected = checkBox.getState() == CHECKED; - if (selected) { - selectedItemsMap.put(currentItem.getType(), (List) currentItem.getItems()); + if (data.contains(currentItem)) { + data.remove(currentItem); } else { - selectedItemsMap.remove(currentItem.getType()); - } - if (listener != null) { - listener.onTypeSelected(currentItem.getType(), selected); + data.add(currentItem); } notifyDataSetChanged(); } }); - AndroidUiHelper.updateVisibility(child.findViewById(R.id.card_bottom_divider), isLastChild); - + switch (type) { + case PROFILE: + ApplicationModeBean modeBean = (ApplicationModeBean) currentItem; + String profileName = modeBean.userProfileName; + if (Algorithms.isEmpty(profileName)) { + ApplicationMode appMode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null); + profileName = app.getString(appMode.getNameKeyResource()); + } + title.setText(profileName); + String routingProfile = ""; + String routingProfileValue = modeBean.routingProfile; + if (!routingProfileValue.isEmpty()) { + try { + routingProfile = app.getString(RoutingProfilesResources.valueOf(routingProfileValue.toUpperCase()).getStringRes()); + routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfile); + } catch (IllegalArgumentException e) { + routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfileValue); + LOG.error("Error trying to get routing resource for " + routingProfileValue + "\n" + e); + } + } + if (!Algorithms.isEmpty(routingProfile)) { + subText.setText(String.format( + app.getString(R.string.ltr_or_rtl_combine_via_colon), + app.getString(R.string.nav_type_hint), + routingProfile)); + subText.setVisibility(View.VISIBLE); + } + int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName); + ProfileIconColors iconColor = modeBean.iconColor; + icon.setImageDrawable(uiUtilities.getIcon(profileIconRes, iconColor.getColor(nightMode))); + break; + case QUICK_ACTIONS: + title.setText(((QuickAction) currentItem).getName(app.getApplicationContext())); + setupIcon(icon, ((QuickAction) currentItem).getIconRes(), itemSelected); + break; + case POI_TYPES: + title.setText(((PoiUIFilter) currentItem).getName()); + int iconRes = RenderingIcons.getBigIconResourceId(((PoiUIFilter) currentItem).getIconId()); + setupIcon(icon, iconRes != 0 ? iconRes : R.drawable.ic_action_user, itemSelected); + break; + case MAP_SOURCES: + title.setText(((ITileSource) currentItem).getName()); + setupIcon(icon, R.drawable.ic_map, itemSelected); + break; + case CUSTOM_RENDER_STYLE: + String renderName = ((File) currentItem).getName(); + renderName = renderName.replace('_', ' ').replaceAll(IndexConstants.RENDERER_INDEX_EXT, ""); + title.setText(renderName); + setupIcon(icon, R.drawable.ic_action_map_style, itemSelected); + break; + case CUSTOM_ROUTING: + String routingName = ((File) currentItem).getName(); + routingName = routingName.replace('_', ' ').replaceAll(".xml", ""); + title.setText(routingName); + setupIcon(icon, R.drawable.ic_action_route_distance, itemSelected); + break; + case AVOID_ROADS: + AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) currentItem; + title.setText(avoidRoadInfo.name); + setupIcon(icon, R.drawable.ic_action_alert, itemSelected); + break; + case MULTIMEDIA_NOTES: + File file = (File) currentItem; + title.setText(file.getName()); + int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file); + if (iconId == -1) { + iconId = R.drawable.ic_action_photo_dark; + } + setupIcon(icon, iconId, itemSelected); + break; + case TRACKS: + String fileName = ((File) currentItem).getName(); + title.setText(GpxUiHelper.getGpxTitle(fileName)); + setupIcon(icon, R.drawable.ic_action_route_distance, itemSelected); + break; + case GLOBAL: + String name = ((GlobalSettingsItem) currentItem).getPublicName(app); + title.setText(name); + setupIcon(icon, R.drawable.ic_action_settings, itemSelected); + break; + case OSM_NOTES: + title.setText(((OsmNotesPoint) currentItem).getText()); + setupIcon(icon, R.drawable.ic_action_osm_note_add, itemSelected); + break; + case OSM_EDITS: + title.setText(OsmEditingPlugin.getTitle((OpenstreetmapPoint) currentItem, app)); + setupIcon(icon, R.drawable.ic_action_info_dark, itemSelected); + break; + case OFFLINE_MAPS: + long size; + if (currentItem instanceof FileSettingsItem) { + FileSettingsItem currentFileItem = (FileSettingsItem) currentItem; + file = currentFileItem.getFile(); + size = currentFileItem.getSize(); + } else { + file = (File) currentItem; + size = file.length(); + } + title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName())); + FileSubtype subtype = FileSubtype.getSubtypeByPath(app, file.getPath()); + setupIcon(icon, subtype.getIconId(), itemSelected); + subText.setText(AndroidUtils.formatSize(app, size)); + subText.setVisibility(View.VISIBLE); + break; + case FAVORITES: + FavoriteGroup favoriteGroup = (FavoriteGroup) currentItem; + title.setText(favoriteGroup.getDisplayName(app)); + setupIcon(icon, R.drawable.ic_action_favorite, itemSelected); + break; + case TTS_VOICE: + case VOICE: + file = (File) currentItem; + title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName())); + setupIcon(icon, R.drawable.ic_action_volume_up, itemSelected); + break; + case ACTIVE_MARKERS: + title.setText(R.string.map_markers); + setupIcon(icon, R.drawable.ic_action_flag, itemSelected); + break; + case HISTORY_MARKERS: + title.setText(R.string.markers_history); + setupIcon(icon, R.drawable.ic_action_flag, itemSelected); + break; + case SEARCH_HISTORY: + HistoryEntry historyEntry = (HistoryEntry) currentItem; + title.setText(historyEntry.getName().getName()); + break; + default: + return child; + } return child; } @@ -229,16 +361,80 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { return true; } - private void setupIcon(ImageView icon, int iconRes, boolean itemSelected) { - if (itemSelected) { - int colorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_osmand_light; - icon.setImageDrawable(uiUtilities.getIcon(iconRes, colorRes)); - } else { - icon.setImageDrawable(uiUtilities.getIcon(iconRes, secondaryColorRes)); + private String getSelectedItemsAmount(List listItems, ExportSettingsType type) { + int amount = 0; + long amountSize = 0; + for (Object item : listItems) { + if (data.contains(item)) { + amount++; + if (type == OFFLINE_MAPS) { + if (item instanceof FileSettingsItem) { + amountSize += ((FileSettingsItem) item).getSize(); + } else { + amountSize += ((File) item).length(); + } + } + } + } + String itemsOf = app.getString(R.string.n_items_of_z, String.valueOf(amount), String.valueOf(listItems.size())); + return amountSize == 0 ? itemsOf : app.getString(R.string.ltr_or_rtl_combine_via_bold_point, itemsOf, + AndroidUtils.formatSize(app, amountSize)); + } + + private int getGroupTitle(ExportSettingsType type) { + switch (type) { + case PROFILE: + return R.string.shared_string_profiles; + case QUICK_ACTIONS: + return R.string.configure_screen_quick_action; + case POI_TYPES: + return R.string.poi_dialog_poi_type; + case MAP_SOURCES: + return R.string.quick_action_map_source_title; + case CUSTOM_RENDER_STYLE: + return R.string.shared_string_rendering_style; + case CUSTOM_ROUTING: + return R.string.shared_string_routing; + case AVOID_ROADS: + return R.string.avoid_road; + case TRACKS: + return R.string.shared_string_tracks; + case MULTIMEDIA_NOTES: + return R.string.audionotes_plugin_name; + case GLOBAL: + return R.string.general_settings_2; + case OSM_NOTES: + return R.string.osm_notes; + case OSM_EDITS: + return R.string.osm_edits; + case OFFLINE_MAPS: + return R.string.shared_string_maps; + case FAVORITES: + return R.string.shared_string_favorites; + case TTS_VOICE: + return R.string.local_indexes_cat_tts; + case VOICE: + return R.string.local_indexes_cat_voice; + case ACTIVE_MARKERS: + return R.string.map_markers; + case HISTORY_MARKERS: + return R.string.markers_history; + case SEARCH_HISTORY: + return R.string.shared_string_search_history; + default: + return R.string.access_empty_list; } } - public void updateSettingsList(Map> itemsMap) { + private void setupIcon(ImageView icon, int iconRes, boolean itemSelected) { + if (itemSelected) { + icon.setImageDrawable(uiUtilities.getIcon(iconRes, activeColorRes)); + } else { + icon.setImageDrawable(uiUtilities.getIcon(iconRes, nightMode)); + } + } + + public void updateSettingsList(Map> itemsMap) { this.itemsMap = itemsMap; this.itemsTypes = new ArrayList<>(itemsMap.keySet()); Collections.sort(itemsTypes); @@ -251,90 +447,17 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter { notifyDataSetChanged(); } - public List getData() { - List selectedItems = new ArrayList<>(); - for (List items : selectedItemsMap.values()) { - selectedItems.addAll(items); - } - return selectedItems; - } - - private String getCategoryDescr(ExportSettingsCategory category) { - long itemsSize = 0; - int selectedTypes = 0; - List items = itemsMap.get(category); - for (int i = 0; i < items.size(); i++) { - ExportDataObject object = items.get(i); - if (selectedItemsMap.containsKey(object.getType())) { - selectedTypes++; - itemsSize += calculateItemsSize(object.getItems()); + public void selectAll(boolean selectAll) { + data.clear(); + if (selectAll) { + for (List values : itemsMap.values()) { + data.addAll(values); } } - - String description; - if (selectedTypes == 0) { - description = app.getString(R.string.shared_string_none); - } else if (selectedTypes == items.size()) { - description = app.getString(R.string.shared_string_all); - } else { - description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); - } - String formattedSize = AndroidUtils.formatSize(app, itemsSize); - return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); + notifyDataSetChanged(); } - public static long calculateItemsSize(List items) { - long itemsSize = 0; - for (Object item : items) { - if (item instanceof FileSettingsItem) { - itemsSize += ((FileSettingsItem) item).getSize(); - } else if (item instanceof File) { - itemsSize += ((File) item).length(); - } - } - return itemsSize; - } - - private String getSelectedTypeDescr(ExportDataObject dataObject) { - long itemsSize = 0; - int selectedTypes = 0; - - List items = dataObject.getItems(); - List selectedItems = selectedItemsMap.get(dataObject.getType()); - if (selectedItems != null) { - for (int i = 0; i < items.size(); i++) { - Object object = items.get(i); - if (selectedItems.contains(object)) { - selectedTypes++; - if (object instanceof FileSettingsItem) { - itemsSize += ((FileSettingsItem) object).getSize(); - } else if (object instanceof File) { - itemsSize += ((File) object).length(); - } - } - } - } - - String description; - if (selectedTypes == 0) { - description = app.getString(R.string.shared_string_none); - } else if (selectedTypes == items.size()) { - description = app.getString(R.string.shared_string_all); - if (itemsSize == 0) { - description = app.getString(R.string.ltr_or_rtl_combine_via_comma, description, String.valueOf(items.size())); - } - } else { - description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); - } - String formattedSize = AndroidUtils.formatSize(app, itemsSize); - return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); - } - - interface OnItemSelectedListener { - - void onCategorySelected(ExportSettingsCategory type, boolean selected); - - void onTypeSelected(ExportSettingsType type, boolean selected); - + List getData() { + return this.data; } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java new file mode 100644 index 0000000000..82ae93ebc0 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java @@ -0,0 +1,337 @@ +package net.osmand.plus.settings.fragments; + +import android.content.res.ColorStateList; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.core.widget.CompoundButtonCompat; + +import net.osmand.AndroidUtils; +import net.osmand.PlatformUtil; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; +import net.osmand.plus.activities.OsmandBaseExpandableListAdapter; +import net.osmand.plus.helpers.AndroidUiHelper; +import net.osmand.plus.helpers.FontCache; +import net.osmand.plus.settings.backend.ExportSettingsCategory; +import net.osmand.plus.settings.backend.ExportSettingsType; +import net.osmand.plus.settings.backend.backup.FileSettingsItem; +import net.osmand.view.ThreeStateCheckbox; + +import org.apache.commons.logging.Log; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static net.osmand.view.ThreeStateCheckbox.State.CHECKED; +import static net.osmand.view.ThreeStateCheckbox.State.MISC; +import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; + +public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { + + private static final Log LOG = PlatformUtil.getLog(ExportImportSettingsAdapter.class.getName()); + + private final OsmandApplication app; + private final UiUtilities uiUtilities; + + private List itemsTypes = new ArrayList<>(); + private Map> selectedItemsMap = new HashMap<>(); + private Map> itemsMap = new LinkedHashMap<>(); + + private final OnItemSelectedListener listener; + + private final LayoutInflater themedInflater; + + private final boolean nightMode; + private final int activeColorRes; + private final int secondaryColorRes; + + ExportSettingsAdapter(OsmandApplication app, OnItemSelectedListener listener, boolean nightMode) { + this.app = app; + this.listener = listener; + this.nightMode = nightMode; + uiUtilities = app.getUIUtilities(); + themedInflater = UiUtilities.getInflater(app, nightMode); + activeColorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light; + secondaryColorRes = nightMode ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + View group = convertView; + if (group == null) { + group = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); + } + final ExportSettingsCategory category = itemsTypes.get(groupPosition); + final List items = itemsMap.get(category); + + String title = app.getString(category.getTitleId()); + TextView titleTv = group.findViewById(R.id.title_tv); + titleTv.setText(UiUtilities.createCustomFontSpannable(FontCache.getRobotoMedium(app), title, title)); + + TextView subTextTv = group.findViewById(R.id.sub_text_tv); + subTextTv.setText(getCategoryDescr(category)); + + int selectedTypes = 0; + for (int i = 0; i < items.size(); i++) { + ExportDataObject object = items.get(i); + if (selectedItemsMap.containsKey(object.getType())) { + selectedTypes++; + } + } + final ThreeStateCheckbox checkBox = group.findViewById(R.id.check_box); + if (selectedTypes == 0) { + checkBox.setState(UNCHECKED); + } else { + checkBox.setState(selectedTypes == items.size() ? CHECKED : MISC); + } + int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; + CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); + + group.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + checkBox.performClick(); + boolean selected = checkBox.getState() == CHECKED; + if (selected) { + for (ExportDataObject object : items) { + if (!selectedItemsMap.containsKey(object.getType())) { + selectedItemsMap.put(object.getType(), object.getItems()); + } + } + } else { + for (ExportDataObject object : items) { + selectedItemsMap.remove(object.getType()); + } + } + if (listener != null) { + listener.onCategorySelected(category, selected); + } + notifyDataSetChanged(); + } + }); + + adjustIndicator(app, groupPosition, isExpanded, group, nightMode); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.divider), isExpanded); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_top_divider), true); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.vertical_divider), false); + AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_bottom_divider), !isExpanded); + + return group; + } + + @Override + public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + View child = convertView; + if (child == null) { + child = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); + } + final ExportDataObject currentItem = itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); + List selectedItems = selectedItemsMap.get(currentItem.getType()); + + TextView titleTv = child.findViewById(R.id.title_tv); + titleTv.setText(currentItem.getType().getTitleId()); + + TextView subTextTv = child.findViewById(R.id.sub_text_tv); + subTextTv.setText(getSelectedTypeDescr(currentItem)); + + ImageView icon = child.findViewById(R.id.explist_indicator); + setupIcon(icon, currentItem.getType().getIconRes(), selectedItems != null); + + final ThreeStateCheckbox checkBox = child.findViewById(R.id.check_box); + if (selectedItems == null) { + checkBox.setState(UNCHECKED); + } else if (selectedItems.containsAll(currentItem.getItems())) { + checkBox.setState(CHECKED); + } else { + boolean contains = false; + for (Object object : currentItem.getItems()) { + if (selectedItems.contains(object)) { + contains = true; + break; + } + } + checkBox.setState(contains ? MISC : UNCHECKED); + } + + int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; + CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); + child.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + checkBox.performClick(); + boolean selected = checkBox.getState() == CHECKED; + if (selected) { + selectedItemsMap.put(currentItem.getType(), currentItem.getItems()); + } else { + selectedItemsMap.remove(currentItem.getType()); + } + if (listener != null) { + listener.onTypeSelected(currentItem.getType(), selected); + } + notifyDataSetChanged(); + } + }); + + AndroidUiHelper.updateVisibility(child.findViewById(R.id.card_bottom_divider), isLastChild); + + return child; + } + + @Override + public int getGroupCount() { + return itemsTypes.size(); + } + + @Override + public int getChildrenCount(int i) { + return itemsMap.get(itemsTypes.get(i)).size(); + } + + @Override + public Object getGroup(int i) { + return itemsMap.get(itemsTypes.get(i)); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); + } + + @Override + public long getGroupId(int i) { + return i; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return groupPosition * 10000 + childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public boolean isChildSelectable(int i, int i1) { + return true; + } + + private void setupIcon(ImageView icon, int iconRes, boolean itemSelected) { + if (itemSelected) { + int colorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_osmand_light; + icon.setImageDrawable(uiUtilities.getIcon(iconRes, colorRes)); + } else { + icon.setImageDrawable(uiUtilities.getIcon(iconRes, secondaryColorRes)); + } + } + + public void updateSettingsList(Map> itemsMap) { + this.itemsMap = itemsMap; + this.itemsTypes = new ArrayList<>(itemsMap.keySet()); + Collections.sort(itemsTypes); + notifyDataSetChanged(); + } + + public void clearSettingsList() { + this.itemsMap.clear(); + this.itemsTypes.clear(); + notifyDataSetChanged(); + } + + public List getData() { + List selectedItems = new ArrayList<>(); + for (List items : selectedItemsMap.values()) { + selectedItems.addAll(items); + } + return selectedItems; + } + + private String getCategoryDescr(ExportSettingsCategory category) { + long itemsSize = 0; + int selectedTypes = 0; + List items = itemsMap.get(category); + for (int i = 0; i < items.size(); i++) { + ExportDataObject object = items.get(i); + if (selectedItemsMap.containsKey(object.getType())) { + selectedTypes++; + itemsSize += calculateItemsSize(object.getItems()); + } + } + String description; + if (selectedTypes == 0) { + description = app.getString(R.string.shared_string_none); + } else if (selectedTypes == items.size()) { + description = app.getString(R.string.shared_string_all); + } else { + description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); + } + String formattedSize = AndroidUtils.formatSize(app, itemsSize); + return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); + } + + public static long calculateItemsSize(List items) { + long itemsSize = 0; + for (Object item : items) { + if (item instanceof FileSettingsItem) { + itemsSize += ((FileSettingsItem) item).getSize(); + } else if (item instanceof File) { + itemsSize += ((File) item).length(); + } + } + return itemsSize; + } + + private String getSelectedTypeDescr(ExportDataObject dataObject) { + long itemsSize = 0; + int selectedTypes = 0; + + List items = dataObject.getItems(); + List selectedItems = selectedItemsMap.get(dataObject.getType()); + if (selectedItems != null) { + for (int i = 0; i < items.size(); i++) { + Object object = items.get(i); + if (selectedItems.contains(object)) { + selectedTypes++; + if (object instanceof FileSettingsItem) { + itemsSize += ((FileSettingsItem) object).getSize(); + } else if (object instanceof File) { + itemsSize += ((File) object).length(); + } + } + } + } + String description; + if (selectedTypes == 0) { + description = app.getString(R.string.shared_string_none); + } else if (selectedTypes == items.size()) { + description = app.getString(R.string.shared_string_all); + if (itemsSize == 0) { + description = app.getString(R.string.ltr_or_rtl_combine_via_comma, description, String.valueOf(items.size())); + } + } else { + description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); + } + String formattedSize = AndroidUtils.formatSize(app, itemsSize); + return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); + } + + interface OnItemSelectedListener { + + void onCategorySelected(ExportSettingsCategory type, boolean selected); + + void onTypeSelected(ExportSettingsType type, boolean selected); + + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java index 79f7159909..f80c225ff2 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -35,13 +35,14 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.base.BaseOsmAndFragment; +import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.FileSettingsItem; import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsExportListener; import net.osmand.plus.settings.backend.backup.SettingsItem; -import net.osmand.plus.settings.fragments.ExportImportSettingsAdapter.OnItemSelectedListener; +import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedListener; import net.osmand.plus.widgets.TextViewEx; import org.apache.commons.logging.Log; @@ -78,10 +79,15 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem private ApplicationMode appMode; private SettingsExportListener exportListener; - private TextViewEx fileSize; + private View headerShadow; + private View headerDivider; + private View itemsSizeContainer; + private View availableSpaceContainer; + private TextViewEx selectedItemsSize; + private TextViewEx availableSpaceDescr; private LinearLayout buttonsContainer; private ExpandableListView expandableList; - private ExportImportSettingsAdapter adapter; + private ExportSettingsAdapter adapter; private int progressMax; private int progressValue; @@ -127,16 +133,23 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem View root = themedInflater.inflate(R.layout.fragment_import, container, false); AndroidUtils.addStatusBarPadding21v(app, root); - fileSize = root.findViewById(R.id.file_size); + selectedItemsSize = root.findViewById(R.id.file_size); + itemsSizeContainer = root.findViewById(R.id.file_size_container); expandableList = root.findViewById(R.id.list); buttonsContainer = root.findViewById(R.id.buttons_container); Toolbar toolbar = root.findViewById(R.id.toolbar); setupToolbar(toolbar); ViewCompat.setNestedScrollingEnabled(expandableList, true); + View header = themedInflater.inflate(R.layout.list_item_description_header, null); + headerDivider = header.findViewById(R.id.divider); + headerShadow = header.findViewById(R.id.card_bottom_divider); expandableList.addHeaderView(header); + availableSpaceContainer = inflater.inflate(R.layout.enough_space_warning_card, null); + availableSpaceDescr = availableSpaceContainer.findViewById(R.id.warning_descr); + TextViewEx continueBtn = root.findViewById(R.id.continue_button); continueBtn.setOnClickListener(new View.OnClickListener() { @Override @@ -161,7 +174,7 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem } }); - adapter = new ExportImportSettingsAdapter(app, this, nightMode); + adapter = new ExportSettingsAdapter(app, this, nightMode); adapter.updateSettingsList(dataList); expandableList.setAdapter(adapter); @@ -169,6 +182,7 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem toolbarLayout.setTitle(getString(R.string.shared_string_export)); TextView description = header.findViewById(R.id.description); description.setText(R.string.select_data_to_export); + updateAvailableSpace(); return root; } @@ -235,20 +249,50 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem }); } - private void updateFileSize() { - long itemsSize = ExportImportSettingsAdapter.calculateItemsSize(adapter.getData()); - String size = itemsSize != 0 ? AndroidUtils.formatSize(app, itemsSize) : ""; - fileSize.setText(size); + private void updateAvailableSpace() { + long calculatedSize = ExportSettingsAdapter.calculateItemsSize(adapter.getData()); + if (calculatedSize != 0) { + String itemsSize = AndroidUtils.formatSize(app, calculatedSize); + selectedItemsSize.setText(itemsSize); + + File dir = app.getAppPath("").getParentFile(); + long availableSizeBytes = AndroidUtils.getAvailableSpace(dir); + if (calculatedSize > availableSizeBytes) { + String availableSize = AndroidUtils.formatSize(app, availableSizeBytes); + availableSpaceDescr.setText(getString(R.string.export_not_enough_space_descr, itemsSize, availableSize)); + updateWarningHeaderVisibility(true); + } else { + updateWarningHeaderVisibility(false); + } + itemsSizeContainer.setVisibility(View.VISIBLE); + } else { + updateWarningHeaderVisibility(false); + itemsSizeContainer.setVisibility(View.INVISIBLE); + } + } + + private void updateWarningHeaderVisibility(boolean visible) { + if (visible) { + if (expandableList.getHeaderViewsCount() < 2) { + expandableList.addHeaderView(availableSpaceContainer); + } + AndroidUiHelper.updateVisibility(headerShadow, false); + AndroidUiHelper.updateVisibility(headerDivider, true); + } else { + expandableList.removeHeaderView(availableSpaceContainer); + AndroidUiHelper.updateVisibility(headerShadow, true); + AndroidUiHelper.updateVisibility(headerDivider, false); + } } @Override public void onCategorySelected(ExportSettingsCategory type, boolean selected) { - updateFileSize(); + updateAvailableSpace(); } @Override public void onTypeSelected(ExportSettingsType type, boolean selected) { - updateFileSize(); + updateAvailableSpace(); } private void prepareFile() { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java index aaed2edcb5..816d5517dc 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java @@ -22,13 +22,13 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; -import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; import androidx.fragment.app.FragmentManager; import com.google.android.material.appbar.CollapsingToolbarLayout; import net.osmand.AndroidUtils; +import net.osmand.IProgress; import net.osmand.PlatformUtil; import net.osmand.map.ITileSource; import net.osmand.map.TileSourceManager.TileSourceTemplate; @@ -49,7 +49,6 @@ import net.osmand.plus.osmedit.OsmNotesPoint; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; -import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem; import net.osmand.plus.settings.backend.backup.FavoritesSettingsItem; @@ -69,44 +68,37 @@ import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask; import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType; import net.osmand.plus.settings.backend.backup.SettingsItem; import net.osmand.plus.settings.backend.backup.SettingsItemType; -import net.osmand.plus.settings.fragments.ExportImportSettingsAdapter.OnItemSelectedListener; import net.osmand.plus.widgets.TextViewEx; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; import java.io.File; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItemSelectedListener { +public class ImportSettingsFragment extends BaseOsmAndFragment { public static final String TAG = ImportSettingsFragment.class.getSimpleName(); public static final Log LOG = PlatformUtil.getLog(ImportSettingsFragment.class.getSimpleName()); - - protected static final String IMPORT_SETTINGS_TAG = "import_settings_tag"; private static final String DUPLICATES_START_TIME_KEY = "duplicates_start_time"; private static final long MIN_DELAY_TIME_MS = 500; - + static final String IMPORT_SETTINGS_TAG = "import_settings_tag"; private OsmandApplication app; - - private File file; - private SettingsHelper settingsHelper; - private List settingsItems; - private Map> dataList; - private ExportImportSettingsAdapter adapter; private ExpandableListView expandableList; private TextView description; + private List settingsItems; + private File file; + private boolean allSelected; + private boolean nightMode; private LinearLayout buttonsContainer; private ProgressBar progressBar; - private TextViewEx fileSize; - private TextViewEx fileSizeDescr; private CollapsingToolbarLayout toolbarLayout; - - private boolean nightMode; + private SettingsHelper settingsHelper; private long duplicateStartTime; public static void showInstance(@NonNull FragmentManager fm, @NonNull List settingsItems, @NonNull File file) { @@ -143,13 +135,10 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem View root = inflater.inflate(R.layout.fragment_import, container, false); Toolbar toolbar = root.findViewById(R.id.toolbar); TextViewEx continueBtn = root.findViewById(R.id.continue_button); - fileSize = root.findViewById(R.id.file_size); toolbarLayout = root.findViewById(R.id.toolbar_layout); expandableList = root.findViewById(R.id.list); buttonsContainer = root.findViewById(R.id.buttons_container); progressBar = root.findViewById(R.id.progress_bar); - fileSizeDescr = root.findViewById(R.id.file_size_descr); - fileSizeDescr.setText(R.string.file_size_needed_for_import); setupToolbar(toolbar); ViewCompat.setNestedScrollingEnabled(expandableList, true); View header = inflater.inflate(R.layout.list_item_description_header, null); @@ -210,10 +199,10 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem } } - adapter = new ExportImportSettingsAdapter(app, this, nightMode); - Map> itemsMap = new HashMap<>(); + adapter = new ExportImportSettingsAdapter(app, nightMode, true); + Map> itemsMap = new HashMap<>(); if (settingsItems != null) { - itemsMap = SettingsHelper.getSettingsToOperateByCategory(settingsItems, false); + itemsMap = SettingsHelper.getSettingsToOperate(settingsItems, false); adapter.updateSettingsList(itemsMap); } expandableList.setAdapter(adapter); @@ -227,7 +216,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem } else { toolbarLayout.setTitle(getString(R.string.shared_string_import)); } - if (itemsMap.size() == 1 && itemsMap.containsKey(ExportSettingsCategory.SETTINGS)) { + if (itemsMap.size() == 1 && itemsMap.containsKey(ExportSettingsType.PROFILE)) { expandableList.expandGroup(0); } } @@ -238,6 +227,15 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem outState.putLong(DUPLICATES_START_TIME_KEY, duplicateStartTime); } + @Override + public void onResume() { + super.onResume(); + Activity activity = getActivity(); + if (activity instanceof MapActivity) { + ((MapActivity) activity).closeDrawer(); + } + } + private void updateUi(int toolbarTitleRes, int descriptionRes) { if (file != null) { String fileName = file.getName(); @@ -290,6 +288,31 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem } } + private static class ReloadIndexesTack extends AsyncTask { + + private final WeakReference mapActivityRef; + private final OsmandApplication app; + + ReloadIndexesTack(@NonNull MapActivity mapActivity) { + this.mapActivityRef = new WeakReference<>(mapActivity); + this.app = mapActivity.getMyApplication(); + } + + @Override + protected Void doInBackground(Void[] params) { + app.getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, new ArrayList()); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + MapActivity mapActivity = mapActivityRef.get(); + if (mapActivity != null) { + mapActivity.refreshMap(); + } + } + } + private SettingsHelper.CheckDuplicatesListener getDuplicatesListener() { return new SettingsHelper.CheckDuplicatesListener() { @Override @@ -519,8 +542,9 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem } private void setupToolbar(Toolbar toolbar) { - int color = ContextCompat.getColor(app, nightMode ? R.color.active_buttons_and_links_text_dark : R.color.active_buttons_and_links_text_light); - toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_action_close, color)); + toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_action_close, nightMode + ? getResources().getColor(R.color.active_buttons_and_links_text_dark) + : getResources().getColor(R.color.active_buttons_and_links_text_light))); toolbar.setNavigationContentDescription(R.string.shared_string_close); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override @@ -533,20 +557,4 @@ public class ImportSettingsFragment extends BaseOsmAndFragment implements OnItem public void setFile(File file) { this.file = file; } - - private void updateFileSize() { - long itemsSize = ExportImportSettingsAdapter.calculateItemsSize(adapter.getData()); - String size = itemsSize != 0 ? AndroidUtils.formatSize(app, itemsSize) : ""; - fileSize.setText(size); - } - - @Override - public void onCategorySelected(ExportSettingsCategory type, boolean selected) { - updateFileSize(); - } - - @Override - public void onTypeSelected(ExportSettingsType type, boolean selected) { - updateFileSize(); - } } diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java deleted file mode 100644 index d5776a7f45..0000000000 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ReloadIndexesTack.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.osmand.plus.settings.fragments; - -import android.os.AsyncTask; - -import androidx.annotation.NonNull; - -import net.osmand.IProgress; -import net.osmand.plus.OsmandApplication; -import net.osmand.plus.activities.MapActivity; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; - -class ReloadIndexesTack extends AsyncTask { - - private final WeakReference mapActivityRef; - private final OsmandApplication app; - - ReloadIndexesTack(@NonNull MapActivity mapActivity) { - this.mapActivityRef = new WeakReference<>(mapActivity); - this.app = mapActivity.getMyApplication(); - } - - @Override - protected Void doInBackground(Void[] params) { - app.getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, new ArrayList()); - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - MapActivity mapActivity = mapActivityRef.get(); - if (mapActivity != null) { - mapActivity.refreshMap(); - } - } -} From bae457acb92380d176fd6e34ff9faa9bf99c7cb2 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 17 Nov 2020 14:09:05 +0200 Subject: [PATCH 051/198] Fix string and update continue button --- OsmAnd/res/layout/fragment_import.xml | 29 ++++--------------- OsmAnd/res/values/strings.xml | 2 +- .../fragments/ExportSettingsAdapter.java | 4 +++ .../fragments/ExportSettingsFragment.java | 14 ++++++--- 4 files changed, 21 insertions(+), 28 deletions(-) diff --git a/OsmAnd/res/layout/fragment_import.xml b/OsmAnd/res/layout/fragment_import.xml index ef83bba63d..30f518cbfc 100644 --- a/OsmAnd/res/layout/fragment_import.xml +++ b/OsmAnd/res/layout/fragment_import.xml @@ -81,37 +81,20 @@ android:layout_width="@dimen/content_padding" android:layout_height="match_parent" /> - + android:layout_marginBottom="@dimen/content_padding_half"> - + layout="@layout/bottom_sheet_dialog_button" + android:visibility="visible" /> - + diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 6b382d13af..7a5a9b759e 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -12,7 +12,7 @@ --> There is not enough space - OsmAnd is needed %1$s to export a file. Your device only has %2$s free. You can free up space on the device, or skip some items from export. + Your device only has %1$s free. Please free up some space or unselect some items to export. Needed for import Select the data to be exported to the file. Approximate file size diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java index 82ae93ebc0..65cd471216 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java @@ -250,6 +250,10 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { notifyDataSetChanged(); } + public boolean hasSelectedData() { + return !selectedItemsMap.isEmpty(); + } + public List getData() { List selectedItems = new ArrayList<>(); for (List items : selectedItemsMap.values()) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java index f80c225ff2..9405714a34 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -34,6 +34,7 @@ import net.osmand.PlatformUtil; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.UiUtilities.DialogButtonType; import net.osmand.plus.base.BaseOsmAndFragment; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.settings.backend.ApplicationMode; @@ -79,6 +80,7 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem private ApplicationMode appMode; private SettingsExportListener exportListener; + private View continueBtn; private View headerShadow; private View headerDivider; private View itemsSizeContainer; @@ -150,13 +152,15 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem availableSpaceContainer = inflater.inflate(R.layout.enough_space_warning_card, null); availableSpaceDescr = availableSpaceContainer.findViewById(R.id.warning_descr); - TextViewEx continueBtn = root.findViewById(R.id.continue_button); + continueBtn = root.findViewById(R.id.continue_button); + UiUtilities.setupDialogButton(nightMode, continueBtn, DialogButtonType.PRIMARY, getString(R.string.shared_string_continue)); continueBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { prepareFile(); } }); + ViewTreeObserver treeObserver = buttonsContainer.getViewTreeObserver(); treeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override @@ -252,22 +256,24 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem private void updateAvailableSpace() { long calculatedSize = ExportSettingsAdapter.calculateItemsSize(adapter.getData()); if (calculatedSize != 0) { - String itemsSize = AndroidUtils.formatSize(app, calculatedSize); - selectedItemsSize.setText(itemsSize); + selectedItemsSize.setText(AndroidUtils.formatSize(app, calculatedSize)); File dir = app.getAppPath("").getParentFile(); long availableSizeBytes = AndroidUtils.getAvailableSpace(dir); if (calculatedSize > availableSizeBytes) { String availableSize = AndroidUtils.formatSize(app, availableSizeBytes); - availableSpaceDescr.setText(getString(R.string.export_not_enough_space_descr, itemsSize, availableSize)); + availableSpaceDescr.setText(getString(R.string.export_not_enough_space_descr, availableSize)); updateWarningHeaderVisibility(true); + continueBtn.setEnabled(false); } else { updateWarningHeaderVisibility(false); + continueBtn.setEnabled(adapter.hasSelectedData()); } itemsSizeContainer.setVisibility(View.VISIBLE); } else { updateWarningHeaderVisibility(false); itemsSizeContainer.setVisibility(View.INVISIBLE); + continueBtn.setEnabled(adapter.hasSelectedData()); } } From 28ea540e4056a7614e9ce59384916071a8e4703e Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 17 Nov 2020 14:20:13 +0200 Subject: [PATCH 052/198] Fix inflater --- .../osmand/plus/settings/fragments/ExportSettingsFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java index 9405714a34..ce9d1f414e 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -149,7 +149,7 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem headerShadow = header.findViewById(R.id.card_bottom_divider); expandableList.addHeaderView(header); - availableSpaceContainer = inflater.inflate(R.layout.enough_space_warning_card, null); + availableSpaceContainer = themedInflater.inflate(R.layout.enough_space_warning_card, null); availableSpaceDescr = availableSpaceContainer.findViewById(R.id.warning_descr); continueBtn = root.findViewById(R.id.continue_button); From 415bbcf6e34fcbca44232600e3391df4403e8904 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 17 Nov 2020 15:53:01 +0200 Subject: [PATCH 053/198] hide photo button --- OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index 45c4864a2a..1aa35b8589 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -336,6 +336,8 @@ public class MenuBuilder { b.setTypeface(null, Typeface.BOLD); b.setText(context.getResources().getString(R.string.shared_string_add_photo)); b.setBackgroundResource(R.drawable.btn_border_light); + //TODO This feature is under development + b.setVisibility(View.GONE); b.setTextColor(ContextCompat.getColor(context, R.color.preference_category_title)); return b; } From b44f2b7dcd4fb85e5fab12fce58616f13b2611ce Mon Sep 17 00:00:00 2001 From: xmd5a Date: Tue, 17 Nov 2020 18:47:41 +0300 Subject: [PATCH 054/198] Update phrases --- OsmAnd/res/values-ar/phrases.xml | 2 +- OsmAnd/res/values-ast/phrases.xml | 2 +- OsmAnd/res/values-az/phrases.xml | 2 +- OsmAnd/res/values-b+hsb/phrases.xml | 2 +- OsmAnd/res/values-b+kab/phrases.xml | 2 +- OsmAnd/res/values-be/phrases.xml | 2 +- OsmAnd/res/values-bn/phrases.xml | 2 +- OsmAnd/res/values-br/phrases.xml | 2 +- OsmAnd/res/values-ca/phrases.xml | 2 +- OsmAnd/res/values-cs/phrases.xml | 2 +- OsmAnd/res/values-da/phrases.xml | 2 +- OsmAnd/res/values-de/phrases.xml | 2 +- OsmAnd/res/values-el/phrases.xml | 2 +- OsmAnd/res/values-eo/phrases.xml | 2 +- OsmAnd/res/values-es-rAR/phrases.xml | 2 +- OsmAnd/res/values-es-rUS/phrases.xml | 2 +- OsmAnd/res/values-es/phrases.xml | 2 +- OsmAnd/res/values-et/phrases.xml | 2 +- OsmAnd/res/values-eu/phrases.xml | 2 +- OsmAnd/res/values-fa/phrases.xml | 2 +- OsmAnd/res/values-fi/phrases.xml | 2 +- OsmAnd/res/values-fr/phrases.xml | 2 +- OsmAnd/res/values-gl/phrases.xml | 2 +- OsmAnd/res/values-hu/phrases.xml | 2 +- OsmAnd/res/values-is/phrases.xml | 2 +- OsmAnd/res/values-it/phrases.xml | 2 +- OsmAnd/res/values-iw/phrases.xml | 2 +- OsmAnd/res/values-ja/phrases.xml | 2 +- OsmAnd/res/values-lt/phrases.xml | 2 +- OsmAnd/res/values-lv/phrases.xml | 2 +- OsmAnd/res/values-ml/phrases.xml | 2 +- OsmAnd/res/values-nb/phrases.xml | 2 +- OsmAnd/res/values-nl/phrases.xml | 2 +- OsmAnd/res/values-oc/phrases.xml | 2 +- OsmAnd/res/values-pl/phrases.xml | 2 +- OsmAnd/res/values-pt-rBR/phrases.xml | 2 +- OsmAnd/res/values-pt/phrases.xml | 2 +- OsmAnd/res/values-ru/phrases.xml | 2 +- OsmAnd/res/values-sc/phrases.xml | 2 +- OsmAnd/res/values-sk/phrases.xml | 2 +- OsmAnd/res/values-sl/phrases.xml | 2 +- OsmAnd/res/values-sr/phrases.xml | 2 +- OsmAnd/res/values-sv/phrases.xml | 2 +- OsmAnd/res/values-tr/phrases.xml | 2 +- OsmAnd/res/values-uk/phrases.xml | 2 +- OsmAnd/res/values-zh-rCN/phrases.xml | 2 +- OsmAnd/res/values-zh-rTW/phrases.xml | 2 +- OsmAnd/res/values/phrases.xml | 35 +++++++++++++++++++++++++++- 48 files changed, 81 insertions(+), 48 deletions(-) diff --git a/OsmAnd/res/values-ar/phrases.xml b/OsmAnd/res/values-ar/phrases.xml index d8372de23f..e5bc657997 100644 --- a/OsmAnd/res/values-ar/phrases.xml +++ b/OsmAnd/res/values-ar/phrases.xml @@ -436,7 +436,7 @@ مضخة النوع النوع - النوع + النوع التخصص النوع الدين diff --git a/OsmAnd/res/values-ast/phrases.xml b/OsmAnd/res/values-ast/phrases.xml index 8f54bce23a..b62ba29ac5 100644 --- a/OsmAnd/res/values-ast/phrases.xml +++ b/OsmAnd/res/values-ast/phrases.xml @@ -32,7 +32,7 @@ Categoría Tipu Tipu - Tipu + Tipu Capital Dispensa recetes Especialidá diff --git a/OsmAnd/res/values-az/phrases.xml b/OsmAnd/res/values-az/phrases.xml index b8b54cd907..38ea9555d8 100644 --- a/OsmAnd/res/values-az/phrases.xml +++ b/OsmAnd/res/values-az/phrases.xml @@ -39,7 +39,7 @@ Nasos Növ Növ - Növ + Növ Paytaxt Növ Din diff --git a/OsmAnd/res/values-b+hsb/phrases.xml b/OsmAnd/res/values-b+hsb/phrases.xml index 7d30f647ed..99660df279 100644 --- a/OsmAnd/res/values-b+hsb/phrases.xml +++ b/OsmAnd/res/values-b+hsb/phrases.xml @@ -415,7 +415,7 @@ typ typ typ - typ + typ typ typ typ diff --git a/OsmAnd/res/values-b+kab/phrases.xml b/OsmAnd/res/values-b+kab/phrases.xml index 9171eb6e71..19de90bfa5 100644 --- a/OsmAnd/res/values-b+kab/phrases.xml +++ b/OsmAnd/res/values-b+kab/phrases.xml @@ -509,7 +509,7 @@ Anaw Ih Anaw - Anaw + Anaw Anaw Anaw Isem diff --git a/OsmAnd/res/values-be/phrases.xml b/OsmAnd/res/values-be/phrases.xml index 253f7eb98d..9c24277245 100644 --- a/OsmAnd/res/values-be/phrases.xml +++ b/OsmAnd/res/values-be/phrases.xml @@ -2790,7 +2790,7 @@ Прызначэнне Тып Тып - Тып + Тып Сталіца Продаж лекаў па рэцэптам Спецыялізацыя diff --git a/OsmAnd/res/values-bn/phrases.xml b/OsmAnd/res/values-bn/phrases.xml index 37ac51e682..0a0f54e79d 100644 --- a/OsmAnd/res/values-bn/phrases.xml +++ b/OsmAnd/res/values-bn/phrases.xml @@ -80,7 +80,7 @@ রাজধানী পরিসেবা নগদ উত্তোলন - ধরণ + ধরণ ধরণ ধরণ ভেন্ডিং টাইপ diff --git a/OsmAnd/res/values-br/phrases.xml b/OsmAnd/res/values-br/phrases.xml index 99e82229df..7854237f3d 100644 --- a/OsmAnd/res/values-br/phrases.xml +++ b/OsmAnd/res/values-br/phrases.xml @@ -32,7 +32,7 @@ Anv Seurt Seurt - Seurt + Seurt Kêrbenn Ordrenañs Arbennigiezh diff --git a/OsmAnd/res/values-ca/phrases.xml b/OsmAnd/res/values-ca/phrases.xml index 126959dfec..5a20a8aa4c 100644 --- a/OsmAnd/res/values-ca/phrases.xml +++ b/OsmAnd/res/values-ca/phrases.xml @@ -2118,7 +2118,7 @@ Calefacció Tipus Tipus - Tipus + Tipus Capital Especialitat Característica diff --git a/OsmAnd/res/values-cs/phrases.xml b/OsmAnd/res/values-cs/phrases.xml index fc5bfd5892..b0e0e22791 100644 --- a/OsmAnd/res/values-cs/phrases.xml +++ b/OsmAnd/res/values-cs/phrases.xml @@ -2692,7 +2692,7 @@ Typ Typ Typ - Typ + Typ Typ Typ Typ diff --git a/OsmAnd/res/values-da/phrases.xml b/OsmAnd/res/values-da/phrases.xml index 9f26ab3b43..7f1eb79c21 100644 --- a/OsmAnd/res/values-da/phrases.xml +++ b/OsmAnd/res/values-da/phrases.xml @@ -2805,7 +2805,7 @@ Betegnelse Type Type - Type + Type Hovedstad Udlevering Speciale diff --git a/OsmAnd/res/values-de/phrases.xml b/OsmAnd/res/values-de/phrases.xml index 4999a997a0..e9f39131f9 100644 --- a/OsmAnd/res/values-de/phrases.xml +++ b/OsmAnd/res/values-de/phrases.xml @@ -2795,7 +2795,7 @@ Bezeichnung Art Art - Art + Art Hauptstadt Signalton U-Bahnstation diff --git a/OsmAnd/res/values-el/phrases.xml b/OsmAnd/res/values-el/phrases.xml index ceec6766ec..affc4dc152 100644 --- a/OsmAnd/res/values-el/phrases.xml +++ b/OsmAnd/res/values-el/phrases.xml @@ -32,7 +32,7 @@ Περιγραφή Τύπος Τύπος - Τύπος + Τύπος Πρωτεύουσα Διανομή Ειδικότητα diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml index d1757bea9d..99dda63d74 100644 --- a/OsmAnd/res/values-eo/phrases.xml +++ b/OsmAnd/res/values-eo/phrases.xml @@ -2786,7 +2786,7 @@ Apliko Speco de teleskopo Dresado de - Speco de diplomata oficejo + Speco de diplomata oficejo Ĉefurbo Medikamentoj je preskribo Kontraŭmedicino diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml index 20712137c0..c72ea55517 100644 --- a/OsmAnd/res/values-es-rAR/phrases.xml +++ b/OsmAnd/res/values-es-rAR/phrases.xml @@ -2804,7 +2804,7 @@ Designación Tipo de telescopio Tipo de amaestramiento - Tipo de embajada + Tipo de embajada Ciudad capital Receta médica Especialidad diff --git a/OsmAnd/res/values-es-rUS/phrases.xml b/OsmAnd/res/values-es-rUS/phrases.xml index 89b147ca4a..5f62bd195b 100644 --- a/OsmAnd/res/values-es-rUS/phrases.xml +++ b/OsmAnd/res/values-es-rUS/phrases.xml @@ -2805,7 +2805,7 @@ Designación Tipo de telescopio Tipo de amaestramiento - Tipo de embajada + Tipo de embajada Ciudad capital Receta médica Especialidad diff --git a/OsmAnd/res/values-es/phrases.xml b/OsmAnd/res/values-es/phrases.xml index 925fc45bb3..66f9099ee7 100644 --- a/OsmAnd/res/values-es/phrases.xml +++ b/OsmAnd/res/values-es/phrases.xml @@ -2794,7 +2794,7 @@ Designación Tipo Tipo - Tipo + Tipo Capital Especialidad Característica diff --git a/OsmAnd/res/values-et/phrases.xml b/OsmAnd/res/values-et/phrases.xml index 3989f35f69..97af8c5b8c 100644 --- a/OsmAnd/res/values-et/phrases.xml +++ b/OsmAnd/res/values-et/phrases.xml @@ -212,7 +212,7 @@ Määramine Liik Liik - Liik + Liik Pealinn Väljastamine Eriala diff --git a/OsmAnd/res/values-eu/phrases.xml b/OsmAnd/res/values-eu/phrases.xml index 5ed19a222f..0bb27ef42b 100644 --- a/OsmAnd/res/values-eu/phrases.xml +++ b/OsmAnd/res/values-eu/phrases.xml @@ -1208,7 +1208,7 @@ Izendapena Mota Mota - Mota + Mota Hiriburua Farmazia Espezialitatea diff --git a/OsmAnd/res/values-fa/phrases.xml b/OsmAnd/res/values-fa/phrases.xml index 28eb63e08b..e0dc84826b 100644 --- a/OsmAnd/res/values-fa/phrases.xml +++ b/OsmAnd/res/values-fa/phrases.xml @@ -646,7 +646,7 @@ ترمینال باربری نوع تلسکوپ نوع - نوع سفارت + نوع سفارت پایتخت تخصص مشخصات diff --git a/OsmAnd/res/values-fi/phrases.xml b/OsmAnd/res/values-fi/phrases.xml index 002a995140..1c7c0ec44a 100644 --- a/OsmAnd/res/values-fi/phrases.xml +++ b/OsmAnd/res/values-fi/phrases.xml @@ -60,7 +60,7 @@ Pumppu Tyyppi Tyyppi - Tyyppi + Tyyppi Pääkaupunki Erikoisuus Ominainen diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index 2141c47b39..40f35c26d0 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -1975,7 +1975,7 @@ Cargo Type Type - Type + Type Capitale Spécialité Caractéristiques diff --git a/OsmAnd/res/values-gl/phrases.xml b/OsmAnd/res/values-gl/phrases.xml index fece900054..cfb2bee6f2 100644 --- a/OsmAnd/res/values-gl/phrases.xml +++ b/OsmAnd/res/values-gl/phrases.xml @@ -1029,7 +1029,7 @@ Designación Tipo Tipo - Tipo + Tipo Capital Especialidade Característica diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index c20dc74cd4..f6fe9f9bfe 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -1849,7 +1849,7 @@ Szivattyú Típus Típus - Típus + Típus Főváros Szakosodás Jellemző diff --git a/OsmAnd/res/values-is/phrases.xml b/OsmAnd/res/values-is/phrases.xml index f90741b80d..9a88f1bc7c 100644 --- a/OsmAnd/res/values-is/phrases.xml +++ b/OsmAnd/res/values-is/phrases.xml @@ -183,7 +183,7 @@ Tilgangur Tegund Tegund - Tegund + Tegund Tegund Stjörnugjöf Trúarbrögð diff --git a/OsmAnd/res/values-it/phrases.xml b/OsmAnd/res/values-it/phrases.xml index 203079b8db..ea5752b771 100644 --- a/OsmAnd/res/values-it/phrases.xml +++ b/OsmAnd/res/values-it/phrases.xml @@ -729,7 +729,7 @@ Designazione Tipo Tipo - Tipo + Tipo Capitale Ricette Specialità diff --git a/OsmAnd/res/values-iw/phrases.xml b/OsmAnd/res/values-iw/phrases.xml index d593ffb9d0..7459854776 100644 --- a/OsmAnd/res/values-iw/phrases.xml +++ b/OsmAnd/res/values-iw/phrases.xml @@ -166,7 +166,7 @@ סוג סוג סוג - סוג + סוג בירה מומחיות מאפיינים diff --git a/OsmAnd/res/values-ja/phrases.xml b/OsmAnd/res/values-ja/phrases.xml index c4199b91d4..73c30df5e8 100644 --- a/OsmAnd/res/values-ja/phrases.xml +++ b/OsmAnd/res/values-ja/phrases.xml @@ -1989,7 +1989,7 @@ 望遠鏡 観測ドーム 動物訓練施設の種類 - 外交関連施設(領事館、大使住居等)の種類 + 外交関連施設(領事館、大使住居等)の種類 部品 販売 修理 diff --git a/OsmAnd/res/values-lt/phrases.xml b/OsmAnd/res/values-lt/phrases.xml index cfb73ccf2b..075634300c 100644 --- a/OsmAnd/res/values-lt/phrases.xml +++ b/OsmAnd/res/values-lt/phrases.xml @@ -133,7 +133,7 @@ Siurblys Tipas Tipas - Tipas + Tipas Sostinė Specializacija Tipas diff --git a/OsmAnd/res/values-lv/phrases.xml b/OsmAnd/res/values-lv/phrases.xml index 777503bce4..d1cd6ac408 100644 --- a/OsmAnd/res/values-lv/phrases.xml +++ b/OsmAnd/res/values-lv/phrases.xml @@ -31,7 +31,7 @@ Nozīmēšana Veids Veids - Veids + Veids Galvaspilsēta Zāles pret receptēm Specializācija diff --git a/OsmAnd/res/values-ml/phrases.xml b/OsmAnd/res/values-ml/phrases.xml index 52b3f27aa2..f19e515bb7 100644 --- a/OsmAnd/res/values-ml/phrases.xml +++ b/OsmAnd/res/values-ml/phrases.xml @@ -875,7 +875,7 @@ പദവി തരം തരം - തരം + തരം തലസ്ഥാനം വിതരണം സ്പെഷ്യാലിറ്റി diff --git a/OsmAnd/res/values-nb/phrases.xml b/OsmAnd/res/values-nb/phrases.xml index b77c5c96e8..984a2fef16 100644 --- a/OsmAnd/res/values-nb/phrases.xml +++ b/OsmAnd/res/values-nb/phrases.xml @@ -630,7 +630,7 @@ Pumpe Type Type - Type + Type Spesialitet Kjennetegn Type diff --git a/OsmAnd/res/values-nl/phrases.xml b/OsmAnd/res/values-nl/phrases.xml index 65a281ce68..b8dd90b484 100644 --- a/OsmAnd/res/values-nl/phrases.xml +++ b/OsmAnd/res/values-nl/phrases.xml @@ -1418,7 +1418,7 @@ Aanduiding Type Type - Type + Type Hoofdstad Apotheek Gespecialiseerd diff --git a/OsmAnd/res/values-oc/phrases.xml b/OsmAnd/res/values-oc/phrases.xml index 92139141e5..d581faf4bd 100644 --- a/OsmAnd/res/values-oc/phrases.xml +++ b/OsmAnd/res/values-oc/phrases.xml @@ -64,7 +64,7 @@ Servici Caufatge Tipe - Tipe + Tipe Tipe Valor en estèlas Tipe diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index 0d1fa62cc0..c3a1752338 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -2795,7 +2795,7 @@ Zastosowanie Rodzaj Tresura - Rodzaj + Rodzaj Stolica Recepty Specjalizacja diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index f9bb017fe2..cde5e0611b 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -2476,7 +2476,7 @@ Designação Tipo Tipo - Tipo + Tipo Capital Dispensa Especialidade diff --git a/OsmAnd/res/values-pt/phrases.xml b/OsmAnd/res/values-pt/phrases.xml index 2386f2f08a..eb04e28ff5 100644 --- a/OsmAnd/res/values-pt/phrases.xml +++ b/OsmAnd/res/values-pt/phrases.xml @@ -269,7 +269,7 @@ Designação Tipo Tipo - Tipo + Tipo Especialidade Característica Tipo diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index c75c0ac4ef..ff47fdaea2 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -2793,7 +2793,7 @@ Отсутствуют Исключительно Дорожное зеркало - Вид + Вид Консульство Генеральное консульство Почётное консульство diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index 7e589f3ab7..5dcc8b52d1 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -1782,7 +1782,7 @@ Pompa Casta Casta - Casta + Casta Capitale Ispetzialidade Caraterìstica diff --git a/OsmAnd/res/values-sk/phrases.xml b/OsmAnd/res/values-sk/phrases.xml index 01634dca7f..3a141ef175 100644 --- a/OsmAnd/res/values-sk/phrases.xml +++ b/OsmAnd/res/values-sk/phrases.xml @@ -1933,7 +1933,7 @@ Pumpa Typ Typ - Typ + Typ Hlavné mesto Výdaj na predpis Špecializácia diff --git a/OsmAnd/res/values-sl/phrases.xml b/OsmAnd/res/values-sl/phrases.xml index adf5079f05..53bb97f56f 100644 --- a/OsmAnd/res/values-sl/phrases.xml +++ b/OsmAnd/res/values-sl/phrases.xml @@ -422,7 +422,7 @@ Črpalka Vrsta Vrsta - Vrsta + Vrsta Glavno mesto Specializacija Vrsta diff --git a/OsmAnd/res/values-sr/phrases.xml b/OsmAnd/res/values-sr/phrases.xml index 983b3d4e35..f764fee95c 100644 --- a/OsmAnd/res/values-sr/phrases.xml +++ b/OsmAnd/res/values-sr/phrases.xml @@ -61,7 +61,7 @@ Пумпа Врста Врста - ТипВрста + ТипВрста Главни град Специјализација Особина diff --git a/OsmAnd/res/values-sv/phrases.xml b/OsmAnd/res/values-sv/phrases.xml index aa61340fcb..ab0e9a3e60 100644 --- a/OsmAnd/res/values-sv/phrases.xml +++ b/OsmAnd/res/values-sv/phrases.xml @@ -48,7 +48,7 @@ Beteckning Typ Typ - Typ + Typ Huvudstad Utskrivning Specialitet diff --git a/OsmAnd/res/values-tr/phrases.xml b/OsmAnd/res/values-tr/phrases.xml index a4b87bee1b..45103c30c5 100644 --- a/OsmAnd/res/values-tr/phrases.xml +++ b/OsmAnd/res/values-tr/phrases.xml @@ -1023,7 +1023,7 @@ Tür Tür Tür - Tür + Tür Tür Tür Tür diff --git a/OsmAnd/res/values-uk/phrases.xml b/OsmAnd/res/values-uk/phrases.xml index e3387de728..cc955e79c5 100644 --- a/OsmAnd/res/values-uk/phrases.xml +++ b/OsmAnd/res/values-uk/phrases.xml @@ -548,7 +548,7 @@ Призначення Вид Вид - Вид + Вид Столиця Продаж ліків за рецептами Спеціалізація diff --git a/OsmAnd/res/values-zh-rCN/phrases.xml b/OsmAnd/res/values-zh-rCN/phrases.xml index fb547e6724..189b28d2d2 100644 --- a/OsmAnd/res/values-zh-rCN/phrases.xml +++ b/OsmAnd/res/values-zh-rCN/phrases.xml @@ -21,7 +21,7 @@ 服务 无刷 类型 - 类型 + 类型 额外的 维基百科 用户自定义 diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index 8244b4067d..cd4ea85dee 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -2256,7 +2256,7 @@ 指示 類型 類型 - 類型 + 類型 類型 類型 類型 diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index 0ca39e1de6..360f1d8718 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -33,7 +33,7 @@ Designation Type Type - Type + Diplomatic institution Capital Dispensing Specialty @@ -138,6 +138,12 @@ Arrow Drinking water refill Departures board + Embassy + Consulate + Liaison + Non-immigrant visas + Immigrant visas + Citizen services Store @@ -4267,4 +4273,31 @@ Radar tower + Embassy + Liaison + + Headed by an ambassador + Branch + Delegation + High commission + Interests section + Mission + Nunciature + Residence + Headed by a consul + Consular agency + Consular office + Consulate general + Honorary consul + Office + Representative office + Subnational + + Yes + No + Yes + No + Yes + No + From 89d43ece792da108ae81c740d35722c68d725162 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Tue, 17 Nov 2020 23:15:14 +0200 Subject: [PATCH 055/198] Use dev url --- .../oauth/OsmOAuthAuthorizationClient.java | 28 +++++++++-- OsmAnd/build.gradle | 4 -- OsmAnd/res/values/strings.xml | 2 + OsmAnd/res/xml/osm_editing.xml | 8 ++++ .../src/net/osmand/plus/OsmAndConstants.java | 13 ++++-- .../plus/osmedit/OpenstreetmapRemoteUtil.java | 22 ++------- .../net/osmand/plus/osmedit/OsmBugsLayer.java | 9 +--- .../plus/osmedit/OsmBugsRemoteUtil.java | 22 ++------- .../plus/osmedit/OsmEditingFragment.java | 46 ++++++++++++++----- .../oauth/OsmOAuthAuthorizationAdapter.java | 24 +++++++--- .../plus/osmedit/oauth/OsmOAuthHelper.java | 7 ++- .../plus/settings/backend/OsmandSettings.java | 11 +++++ 12 files changed, 123 insertions(+), 73 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java b/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java index f1c718465e..cf2f5a5acc 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/oauth/OsmOAuthAuthorizationClient.java @@ -25,16 +25,16 @@ public class OsmOAuthAuthorizationClient { private final OsmAndJDKHttpClient httpClient; public final static Log log = PlatformUtil.getLog(OsmOAuthAuthorizationClient.class); - public OsmOAuthAuthorizationClient(String key, String secret) { + public OsmOAuthAuthorizationClient(String key, String secret, DefaultApi10a api) { httpClient = new OsmAndJDKHttpClient(JDKHttpClientConfig.defaultConfig()); service = new ServiceBuilder(key) .apiSecret(secret) .httpClient(httpClient) .callback("osmand-oauth://example.com/oauth") - .build(new OsmApi()); + .build(api); } - static class OsmApi extends DefaultApi10a { + public static class OsmApi extends DefaultApi10a { @Override public OAuth1SignatureType getSignatureType() { return OAuth1SignatureType.QUERY_STRING; @@ -56,6 +56,28 @@ public class OsmOAuthAuthorizationClient { } } + public static class OsmDevApi extends DefaultApi10a { + @Override + public OAuth1SignatureType getSignatureType() { + return OAuth1SignatureType.QUERY_STRING; + } + + @Override + public String getRequestTokenEndpoint() { + return "https://master.apis.dev.openstreetmap.org/oauth/request_token"; + } + + @Override + public String getAccessTokenEndpoint() { + return "https://master.apis.dev.openstreetmap.org/oauth/access_token"; + } + + @Override + protected String getAuthorizationBaseUrl() { + return "https://master.apis.dev.openstreetmap.org/oauth/authorize"; + } + } + public OsmAndJDKHttpClient getHttpClient() { return httpClient; } diff --git a/OsmAnd/build.gradle b/OsmAnd/build.gradle index c52dac72ad..bab0785bb8 100644 --- a/OsmAnd/build.gradle +++ b/OsmAnd/build.gradle @@ -207,14 +207,10 @@ android { buildTypes { debug { buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" signingConfig signingConfigs.development } release { buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" - buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" if (gradle.startParameter.taskNames.toString().contains("huawei")) { signingConfig signingConfigs.publishingHuawei } else { diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 6dc1b914d5..426f769d3a 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,8 @@ Thx - Hardy --> + Use dev.openstreetmap.org + Switch to use "dev.openstreetmap.org" instead of "openstreetmap.org" to testing uploading OSM Note / POI / GPX. Motorboat Kayak Search history diff --git a/OsmAnd/res/xml/osm_editing.xml b/OsmAnd/res/xml/osm_editing.xml index 469e841c36..8fd0883fc8 100644 --- a/OsmAnd/res/xml/osm_editing.xml +++ b/OsmAnd/res/xml/osm_editing.xml @@ -32,6 +32,14 @@ android:title="@string/offline_edition" tools:icon="@drawable/ic_action_offline" /> + + diff --git a/OsmAnd/src/net/osmand/plus/OsmAndConstants.java b/OsmAnd/src/net/osmand/plus/OsmAndConstants.java index 4e808ac947..16a5312405 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndConstants.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndConstants.java @@ -1,16 +1,21 @@ package net.osmand.plus; public interface OsmAndConstants { - - + + public int UI_HANDLER_MAP_VIEW = 3000; - + public int UI_HANDLER_MAP_CONTROLS = 4000; - + public int UI_HANDLER_LOCATION_SERVICE = 5000; public int UI_HANDLER_PROGRESS = 6000; public int UI_HANDLER_SEARCH = 7000; + String OSM_OAUTH_DEVELOPER_KEY = "v8G8r9NLJZGMV4he5lwbQlz620FNVARKjI9Bm5UJ"; + String OSM_OAUTH_DEVELOPER_SECRET = "jDvM95Ne1Bq2BDTmIfB6b3ZMxvdK87WGfp6DC07J"; + String OSM_OAUTH_CONSUMER_KEY = "Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y"; + String OSM_OAUTH_CONSUMER_SECRET = "lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM"; + } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java index 8940093c19..98256d0635 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapRemoteUtil.java @@ -66,33 +66,19 @@ public class OpenstreetmapRemoteUtil implements OpenstreetmapUtil { @Override public EntityInfo getEntityInfo(long id) { - if(entityInfoId != null && entityInfoId.getId().longValue() == id) { + if (entityInfoId != null && entityInfoId.getId().longValue() == id) { return entityInfo; } return null; } - private static String getSiteApi() { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - - String RETURN_API; - - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - RETURN_API = "https://api.openstreetmap.org/"; - } else { - RETURN_API = "http://api.openstreetmap.org/"; - } - - // RETURN_API = "http://api06.dev.openstreetmap.org/"; - - return RETURN_API; + private String getSiteApi() { + return settings.getOsmUrl(); } - private final static String URL_TO_UPLOAD_GPX = getSiteApi() + "api/0.6/gpx/create"; - public String uploadGPXFile(String tagstring, String description, String visibility, File f) { OsmOAuthAuthorizationAdapter adapter = new OsmOAuthAuthorizationAdapter(ctx); - String url = URL_TO_UPLOAD_GPX; + String url = getSiteApi() + "api/0.6/gpx/create"; Map additionalData = new LinkedHashMap(); additionalData.put("description", description); additionalData.put("tags", tagstring); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java index 78b356fd03..71f7f112ec 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java @@ -248,15 +248,8 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider } protected List loadingBugs(double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude) { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - String SITE_API; - - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - SITE_API = "https://api.openstreetmap.org/"; - } else { - SITE_API = "http://api.openstreetmap.org/"; - } + String SITE_API = activity.getMyApplication().getSettings().getOsmUrl(); List bugs = new ArrayList<>(); StringBuilder b = new StringBuilder(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java index a6e2dd5ca8..f2fba4c52d 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java @@ -26,26 +26,12 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { private static final String GET = "GET"; private static final String POST = "POST"; - static String getNotesApi() { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - String RETURN_API; - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - RETURN_API = "https://api.openstreetmap.org/api/0.6/notes"; - } else { - RETURN_API = "http://api.openstreetmap.org/api/0.6/notes"; - } - return RETURN_API; + String getNotesApi() { + return settings.getOsmUrl() + "api/0.6/notes"; } - static String getUserDetailsApi() { - final int deviceApiVersion = android.os.Build.VERSION.SDK_INT; - String RETURN_API; - if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { - RETURN_API = "https://api.openstreetmap.org/api/0.6/user/details"; - } else { - RETURN_API = "http://api.openstreetmap.org/api/0.6/user/details"; - } - return RETURN_API; + String getUserDetailsApi() { + return settings.getOsmUrl() + "api/0.6/user/details"; } private OsmandApplication app; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index d6156bfcfb..d7000e5811 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -43,6 +43,7 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer private static final String OPEN_OSM_EDITS = "open_osm_edits"; public static final String OSM_LOGIN_DATA = "osm_login_data"; private static final String OSM_EDITING_INFO = "osm_editing_info"; + private static final String USE_DEV_URL = "use_dev_url"; private OsmOAuthAuthorizationAdapter authorizationAdapter; @@ -61,6 +62,7 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer setupLogoutPref(); setupOfflineEditingPref(); + setupUseDevUrlPref(); setupOsmEditsDescrPref(); setupOsmEditsPref(); } @@ -129,6 +131,13 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer offlineEditingPref.setIcon(icon); } + private void setupUseDevUrlPref() { + Drawable icon = getPersistentPrefIcon(R.drawable.ic_action_laptop); + SwitchPreferenceEx useDevUrlPref = findPreference(settings.USE_DEV_URL.getId()); + useDevUrlPref.setDescription(getString(R.string.use_dev_url_descr)); + useDevUrlPref.setIcon(icon); + } + private void setupOsmEditsDescrPref() { String menu = getString(R.string.shared_string_menu); String myPlaces = getString(R.string.shared_string_my_places); @@ -152,6 +161,18 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer createProfile.setIcon(getActiveIcon(R.drawable.ic_action_folder)); } + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + String prefId = preference.getKey(); + if (USE_DEV_URL.equals(prefId) && newValue instanceof Boolean) { + settings.USE_DEV_URL.set((Boolean) newValue); + osmLogout(); + authorizationAdapter = app.getOsmOAuthHelper().updateAdapter(); + return true; + } + return super.onPreferenceChange(preference, newValue); + } + @Override public boolean onPreferenceClick(Preference preference) { String prefId = preference.getKey(); @@ -172,22 +193,25 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer return true; } } else if (OSM_LOGOUT.equals(prefId)) { - if (isValidToken()) { - settings.USER_ACCESS_TOKEN.resetToDefault(); - settings.USER_ACCESS_TOKEN_SECRET.resetToDefault(); - - authorizationAdapter.resetToken(); - } else { - settings.USER_NAME.resetToDefault(); - settings.USER_PASSWORD.resetToDefault(); - } - app.showShortToastMessage(R.string.osm_edit_logout_success); - updateAllSettings(); + osmLogout(); return true; } return super.onPreferenceClick(preference); } + private void osmLogout() { + if (isValidToken()) { + settings.USER_ACCESS_TOKEN.resetToDefault(); + settings.USER_ACCESS_TOKEN_SECRET.resetToDefault(); + authorizationAdapter.resetToken(); + } else { + settings.USER_NAME.resetToDefault(); + settings.USER_PASSWORD.resetToDefault(); + } + app.showShortToastMessage(R.string.osm_edit_logout_success); + updateAllSettings(); + } + @Override public void onPreferenceChanged(String prefId) { updateAllSettings(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java index 7c2562b580..0dc7733b16 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java @@ -5,6 +5,7 @@ import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; +import com.github.scribejava.core.builder.api.DefaultApi10a; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; @@ -13,7 +14,7 @@ import com.github.scribejava.core.model.Verb; import net.osmand.PlatformUtil; import net.osmand.osm.oauth.OsmOAuthAuthorizationClient; -import net.osmand.plus.BuildConfig; +import net.osmand.plus.OsmAndConstants; import net.osmand.plus.OsmandApplication; import org.xmlpull.v1.XmlPullParser; @@ -27,15 +28,25 @@ public class OsmOAuthAuthorizationAdapter { private static final int THREAD_ID = 10101; private static final String OSM_USER = "user"; private static final String DISPLAY_NAME = "display_name"; - private static final String OSM_USER_DETAILS_URL = "https://api.openstreetmap.org/api/0.6/user/details"; - private OsmandApplication app; - private OsmOAuthAuthorizationClient client = - new OsmOAuthAuthorizationClient(BuildConfig.OSM_OAUTH_CONSUMER_KEY, BuildConfig.OSM_OAUTH_CONSUMER_SECRET); + private final OsmOAuthAuthorizationClient client; public OsmOAuthAuthorizationAdapter(OsmandApplication app) { TrafficStats.setThreadStatsTag(THREAD_ID); this.app = app; + DefaultApi10a api10a; + String key; + String secret; + if (app.getSettings().USE_DEV_URL.get()) { + api10a = new OsmOAuthAuthorizationClient.OsmDevApi(); + key = OsmAndConstants.OSM_OAUTH_DEVELOPER_KEY; + secret = OsmAndConstants.OSM_OAUTH_DEVELOPER_SECRET; + } else { + api10a = new OsmOAuthAuthorizationClient.OsmApi(); + key = OsmAndConstants.OSM_OAUTH_CONSUMER_KEY; + secret = OsmAndConstants.OSM_OAUTH_CONSUMER_SECRET; + } + client = new OsmOAuthAuthorizationClient(key, secret, api10a); restoreToken(); } @@ -104,7 +115,8 @@ public class OsmOAuthAuthorizationAdapter { } public Response getOsmUserDetails() throws InterruptedException, ExecutionException, IOException { - return performRequest(OSM_USER_DETAILS_URL, Verb.GET.name(), null); + String osmUserDetailsUrl = app.getSettings().getOsmUrl() + "api/0.6/user/details"; + return performRequest(osmUserDetailsUrl, Verb.GET.name(), null); } public String parseUserName(Response response) throws XmlPullParserException, IOException { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java index d13bf624f2..d58f62fa01 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java @@ -19,13 +19,18 @@ public class OsmOAuthHelper { private final OsmandApplication app; - private final OsmOAuthAuthorizationAdapter authorizationAdapter; + private OsmOAuthAuthorizationAdapter authorizationAdapter; public OsmOAuthHelper(@NonNull OsmandApplication app) { this.app = app; authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); } + public OsmOAuthAuthorizationAdapter updateAdapter(){ + authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); + return authorizationAdapter; + } + public void startOAuth(ViewGroup view) { authorizationAdapter.startOAuth(view); } diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index a574e0d0fd..065fd2113a 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -1133,6 +1133,17 @@ public class OsmandSettings { // this value boolean is synchronized with settings_pref.xml preference offline POI/Bugs edition public final OsmandPreference OFFLINE_EDITION = new BooleanPreference(this, "offline_osm_editing", true).makeGlobal().makeShared(); + public final OsmandPreference USE_DEV_URL = new BooleanPreference(this, "use_dev_url", false).makeGlobal().makeShared(); + + public String getOsmUrl() { + String osmUrl; + if (USE_DEV_URL.get()) { + osmUrl = "https://master.apis.dev.openstreetmap.org/"; + } else { + osmUrl = "https://api.openstreetmap.org/"; + } + return osmUrl; + } // this value string is synchronized with settings_pref.xml preference name public final CommonPreference DAYNIGHT_MODE = From fe375c91f1e759f88da49a0cc495d9bcf8298689 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Wed, 18 Nov 2020 12:08:15 +0200 Subject: [PATCH 056/198] Fix progress dialog from my places --- OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java | 5 ++--- .../plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java | 3 +-- .../plus/osmedit/dialogs/SendPoiBottomSheetFragment.java | 3 +-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 7aff0a604f..dff223e4d7 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -62,7 +62,6 @@ import net.osmand.plus.osmedit.FileTypeBottomSheetDialogFragment.FileTypeFragmen import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener; import net.osmand.plus.osmedit.OsmPoint.Group; import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment; -import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.PoiUploaderType; import net.osmand.util.Algorithms; import org.xmlpull.v1.XmlSerializer; @@ -638,12 +637,12 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo && !Algorithms.isEmpty(settings.USER_PASSWORD.get()); if (hasPoiGroup(points)) { if (isLogged) { - SendPoiBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), points); + SendPoiBottomSheetFragment.showInstance(getChildFragmentManager(), points); } else { LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), this); } } else { - SendOsmNoteBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), points); + SendOsmNoteBottomSheetFragment.showInstance(getChildFragmentManager(), points); } } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java index 8cd61909e4..c488ad9149 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java @@ -25,7 +25,6 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; -import net.osmand.plus.dialogs.ProgressDialogFragment; import net.osmand.plus.osmedit.OsmNotesPoint; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter; @@ -177,7 +176,7 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen Activity activity = getActivity(); if (activity instanceof MapActivity) { progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) activity); - } else if (getParentFragment() instanceof ProgressDialogFragment) { + } else if (getParentFragment() instanceof ProgressDialogPoiUploader) { progressDialogPoiUploader = (ProgressDialogPoiUploader) getParentFragment(); } if (progressDialogPoiUploader != null) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index dd862d0608..676a1063ff 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -21,7 +21,6 @@ import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; -import net.osmand.plus.dialogs.ProgressDialogFragment; import net.osmand.plus.osmedit.OpenstreetmapPoint; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.settings.backend.OsmandSettings; @@ -115,7 +114,7 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { Activity activity = getActivity(); if (activity instanceof MapActivity) { progressDialogPoiUploader = new SimpleProgressDialogPoiUploader((MapActivity) activity); - } else if (getParentFragment() instanceof ProgressDialogFragment) { + } else if (getParentFragment() instanceof ProgressDialogPoiUploader) { progressDialogPoiUploader = (ProgressDialogPoiUploader) getParentFragment(); } if (progressDialogPoiUploader != null) { From 8709798f6ddc81a82314ded5df79613192b07de4 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Wed, 18 Nov 2020 14:30:57 +0300 Subject: [PATCH 057/198] Fix HW signing --- OsmAnd/build.gradle | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/OsmAnd/build.gradle b/OsmAnd/build.gradle index c52dac72ad..c837c89867 100644 --- a/OsmAnd/build.gradle +++ b/OsmAnd/build.gradle @@ -40,15 +40,6 @@ android { keyAlias "osmand" keyPassword System.getenv("OSMAND_APK_PASSWORD") } - - publishingHuawei { - storeFile file("/var/lib/jenkins/osmand_hw_key") - storePassword System.getenv("OSMAND_HW_APK_PASSWORD") - keyAlias "osmand" - keyPassword System.getenv("OSMAND_HW_APK_PASSWORD") - v1SigningEnabled true - v2SigningEnabled true - } } defaultConfig { @@ -215,11 +206,7 @@ android { buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" - if (gradle.startParameter.taskNames.toString().contains("huawei")) { - signingConfig signingConfigs.publishingHuawei - } else { - signingConfig signingConfigs.publishing - } + signingConfig signingConfigs.publishing } } From d2b030d5d9645475c3a999d98e22685697ed8286 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Wed, 18 Nov 2020 14:12:39 +0200 Subject: [PATCH 058/198] Separate account details, osm create/modify textfield style --- OsmAnd/res/layout/account_details.xml | 59 +++++++ OsmAnd/res/layout/open_osm_note_text.xml | 36 +++++ OsmAnd/res/layout/send_gpx_fragment.xml | 60 +------ OsmAnd/res/layout/send_osm_note_fragment.xml | 151 ++++++------------ OsmAnd/res/layout/send_poi_fragment.xml | 60 +------ .../osmedit/dialogs/BugBottomSheetDialog.java | 2 +- 6 files changed, 151 insertions(+), 217 deletions(-) create mode 100644 OsmAnd/res/layout/account_details.xml create mode 100644 OsmAnd/res/layout/open_osm_note_text.xml diff --git a/OsmAnd/res/layout/account_details.xml b/OsmAnd/res/layout/account_details.xml new file mode 100644 index 0000000000..9e6e4497d7 --- /dev/null +++ b/OsmAnd/res/layout/account_details.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/open_osm_note_text.xml b/OsmAnd/res/layout/open_osm_note_text.xml new file mode 100644 index 0000000000..a6bdcc5178 --- /dev/null +++ b/OsmAnd/res/layout/open_osm_note_text.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/send_gpx_fragment.xml b/OsmAnd/res/layout/send_gpx_fragment.xml index 18c871e671..795b169300 100644 --- a/OsmAnd/res/layout/send_gpx_fragment.xml +++ b/OsmAnd/res/layout/send_gpx_fragment.xml @@ -141,63 +141,13 @@ - + - - - - - - - - - - - - + \ No newline at end of file diff --git a/OsmAnd/res/layout/send_osm_note_fragment.xml b/OsmAnd/res/layout/send_osm_note_fragment.xml index d98e60b260..12205d77bb 100644 --- a/OsmAnd/res/layout/send_osm_note_fragment.xml +++ b/OsmAnd/res/layout/send_osm_note_fragment.xml @@ -30,7 +30,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:imeOptions="actionDone" - android:lineSpacingExtra="5sp"/> + android:lineSpacingExtra="5sp" /> + + + + + + - - - - - - - - - - - - - - - - - - + android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" + android:paddingStart="@dimen/content_padding" + android:paddingLeft="@dimen/content_padding" + android:paddingTop="@dimen/content_padding_small" + android:paddingEnd="@dimen/content_padding" + android:paddingRight="@dimen/content_padding" + android:paddingBottom="@dimen/content_padding_small" + android:text="@string/osm_login_descr" + android:textColor="?android:textColorPrimary" + android:textSize="@dimen/default_list_text_size" + osmand:typeface="@string/font_roboto_regular" /> - + - - - - - - - + + diff --git a/OsmAnd/res/layout/send_poi_fragment.xml b/OsmAnd/res/layout/send_poi_fragment.xml index d81aa9cdda..751c0b1fe8 100644 --- a/OsmAnd/res/layout/send_poi_fragment.xml +++ b/OsmAnd/res/layout/send_poi_fragment.xml @@ -64,64 +64,14 @@ - + - + - - - - - - - - - - - diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/BugBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/BugBottomSheetDialog.java index a865d0962c..3793196ce0 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/BugBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/BugBottomSheetDialog.java @@ -55,7 +55,7 @@ public class BugBottomSheetDialog extends MenuBottomSheetDialogFragment { items.add(new TitleItem(getString(titleTextId))); View osmNoteView = View.inflate(UiUtilities.getThemedContext(app, nightMode), - R.layout.track_name_edit_text, null); + R.layout.open_osm_note_text, null); TextInputLayout textBox = osmNoteView.findViewById(R.id.name_text_box); int highlightColorId = nightMode ? R.color.list_background_color_dark : R.color.activity_background_color_light; textBox.setBoxBackgroundColorResource(highlightColorId); From 99f2cf270ee90b81d050402cf6c44adf813a6bec Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Wed, 18 Nov 2020 16:29:48 +0200 Subject: [PATCH 059/198] Remove unnecessary view --- OsmAnd/res/layout/open_osm_note_text.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/OsmAnd/res/layout/open_osm_note_text.xml b/OsmAnd/res/layout/open_osm_note_text.xml index a6bdcc5178..c3bb2dccd8 100644 --- a/OsmAnd/res/layout/open_osm_note_text.xml +++ b/OsmAnd/res/layout/open_osm_note_text.xml @@ -5,12 +5,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> - - Date: Wed, 18 Nov 2020 17:14:42 +0200 Subject: [PATCH 060/198] Fix my places send gpx OAuth --- .../net/osmand/plus/helpers/IntentHelper.java | 3 +- .../LoginBottomSheetFragment.java | 6 +++- .../plus/myplaces/AvailableGPXFragment.java | 17 ++++++++-- .../osmand/plus/osmedit/OsmEditingPlugin.java | 4 +-- .../osmand/plus/osmedit/OsmEditsFragment.java | 32 ++++++++++++++----- .../SendOsmNoteBottomSheetFragment.java | 12 +++++-- .../oauth/OsmOAuthAuthorizationAdapter.java | 15 +++------ .../plus/osmedit/oauth/OsmOAuthHelper.java | 29 ++++++++++++++--- 8 files changed, 86 insertions(+), 32 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java index 25cc6dcc30..a7d6dd7f79 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java @@ -297,7 +297,8 @@ public class IntentHelper { Uri uri = intent.getData(); if (uri.toString().startsWith("osmand-oauth")) { String oauthVerifier = uri.getQueryParameter("oauth_verifier"); - app.getOsmOAuthHelper().authorize(oauthVerifier, getOnAuthorizeListener()); + app.getOsmOAuthHelper().addListener(getOnAuthorizeListener()); + app.getOsmOAuthHelper().authorize(oauthVerifier); mapActivity.setIntent(null); return true; } diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/LoginBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/LoginBottomSheetFragment.java index 3276bb2aa8..2b50ea6b2f 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/LoginBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/LoginBottomSheetFragment.java @@ -24,7 +24,7 @@ import net.osmand.plus.settings.bottomsheets.OsmLoginDataBottomSheet; import org.apache.commons.logging.Log; import static net.osmand.plus.osmedit.OsmEditingFragment.OSM_LOGIN_DATA; -import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.*; +import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener; public class LoginBottomSheetFragment extends MenuBottomSheetDialogFragment implements OsmAuthorizationListener { @@ -89,6 +89,10 @@ public class LoginBottomSheetFragment extends MenuBottomSheetDialogFragment impl protected void onThirdBottomButtonClick() { View view = getView(); if (view != null) { + Fragment fragment = getTargetFragment(); + if (fragment instanceof OsmAuthorizationListener) { + osmOAuthHelper.addListener((OsmAuthorizationListener) fragment); + } osmOAuthHelper.startOAuth((ViewGroup) view); } } diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java index 31cb5375fe..6bac2a31ea 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java @@ -80,11 +80,12 @@ import net.osmand.plus.activities.TrackActivity; import net.osmand.plus.base.OsmandExpandableListFragment; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType; +import net.osmand.plus.helpers.enums.TracksSortByMode; import net.osmand.plus.mapmarkers.CoordinateInputDialogFragment; import net.osmand.plus.monitoring.OsmandMonitoringPlugin; import net.osmand.plus.osmedit.OsmEditingPlugin; +import net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener; import net.osmand.plus.settings.backend.OsmandSettings; -import net.osmand.plus.helpers.enums.TracksSortByMode; import java.io.File; import java.text.DateFormat; @@ -112,7 +113,7 @@ import static net.osmand.util.Algorithms.objectEquals; import static net.osmand.util.Algorithms.removeAllFiles; public class AvailableGPXFragment extends OsmandExpandableListFragment implements - FavoritesFragmentStateHolder { + FavoritesFragmentStateHolder, OsmAuthorizationListener { public static final Pattern ILLEGAL_PATH_NAME_CHARACTERS = Pattern.compile("[?:\"*|<>]"); public static final int SEARCH_ID = -1; @@ -922,6 +923,18 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement public void restoreState(Bundle bundle) { } + @Override + public void authorizationCompleted() { + Bundle bundle = new Bundle(); + bundle.putInt(TAB_ID, GPX_TAB); + + Intent intent = new Intent(app, app.getAppCustomization().getFavoritesActivity()); + intent.putExtra(MapActivity.INTENT_PARAMS, bundle); + intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK); + + app.startActivity(intent); + } + public class LoadGpxTask extends AsyncTask> { private List result; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index a2ca2f0a61..6382acb107 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -461,10 +461,10 @@ public class OsmEditingPlugin extends OsmandPlugin { String pwd = settings.USER_PASSWORD.get(); String authToken = settings.USER_ACCESS_TOKEN.get(); if ((Algorithms.isEmpty(name) || Algorithms.isEmpty(pwd)) && Algorithms.isEmpty(authToken)) { - LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), fragment.getTargetFragment()); + LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), fragment); return false; } else { - SendGpxBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), fragment.getTargetFragment(), info); + SendGpxBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), fragment, info); return true; } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index dff223e4d7..3c1733f7ac 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -42,11 +42,6 @@ import net.osmand.osm.edit.Entity; import net.osmand.osm.edit.Node; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.measurementtool.LoginBottomSheetFragment; -import net.osmand.plus.osmedit.dialogs.SendOsmNoteBottomSheetFragment; -import net.osmand.plus.osmedit.dialogs.SendPoiBottomSheetFragment; -import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.Version; import net.osmand.plus.activities.ActionBarProgressActivity; @@ -55,13 +50,20 @@ import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.base.OsmAndListFragment; import net.osmand.plus.dialogs.ProgressDialogFragment; import net.osmand.plus.helpers.AndroidUiHelper; +import net.osmand.plus.measurementtool.LoginBottomSheetFragment; import net.osmand.plus.myplaces.FavoritesActivity; import net.osmand.plus.myplaces.FavoritesFragmentStateHolder; import net.osmand.plus.osmedit.ExportOptionsBottomSheetDialogFragment.ExportOptionsFragmentListener; import net.osmand.plus.osmedit.FileTypeBottomSheetDialogFragment.FileTypeFragmentListener; +import net.osmand.plus.osmedit.OpenstreetmapLocalUtil.OnNodeCommittedListener; import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener; import net.osmand.plus.osmedit.OsmPoint.Group; -import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment; +import net.osmand.plus.osmedit.dialogs.SendOsmNoteBottomSheetFragment; +import net.osmand.plus.osmedit.dialogs.SendPoiBottomSheetFragment; +import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader; +import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter; +import net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener; +import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; import org.xmlpull.v1.XmlSerializer; @@ -79,8 +81,8 @@ import java.util.Map; import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID; import static net.osmand.plus.osmedit.OsmEditingPlugin.OSM_EDIT_TAB; -public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialogFragment.ProgressDialogPoiUploader, OpenstreetmapLocalUtil.OnNodeCommittedListener, - FavoritesFragmentStateHolder { +public class OsmEditsFragment extends OsmAndListFragment implements ProgressDialogPoiUploader, + OnNodeCommittedListener, FavoritesFragmentStateHolder, OsmAuthorizationListener { public static final int EXPORT_TYPE_ALL = 0; public static final int EXPORT_TYPE_POI = 1; @@ -104,6 +106,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo private final static int MODE_DELETE = 100; private final static int MODE_UPLOAD = 101; + private OsmandApplication app; private OsmEditingPlugin plugin; private View footerView; @@ -144,6 +147,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + app = getMyApplication(); if (savedInstanceState != null) { exportType = savedInstanceState.getInt(EXPORT_TYPE_KEY); } @@ -647,6 +651,18 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo } } + @Override + public void authorizationCompleted() { + Bundle bundle = new Bundle(); + bundle.putInt(TAB_ID, OSM_EDIT_TAB); + + Intent intent = new Intent(app, app.getAppCustomization().getFavoritesActivity()); + intent.putExtra(MapActivity.INTENT_PARAMS, bundle); + intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK); + + app.startActivity(intent); + } + boolean hasPoiGroup(OsmPoint[] points) { boolean hasPoiGroup = false; for (OsmPoint p : points) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java index 628d693578..5046165ba7 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java @@ -13,6 +13,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import com.google.android.material.textfield.TextInputLayout; @@ -38,8 +39,10 @@ import org.apache.commons.logging.Log; import static net.osmand.plus.UiUtilities.setupDialogButton; import static net.osmand.plus.osmedit.OsmEditingFragment.OSM_LOGIN_DATA; -import static net.osmand.plus.osmedit.ValidateOsmLoginDetailsTask.*; -import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.*; +import static net.osmand.plus.osmedit.ValidateOsmLoginDetailsTask.ValidateOsmLoginListener; +import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.OPENSTREETMAP_POINT; +import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader; +import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.SimpleProgressDialogPoiUploader; public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragment implements ValidateOsmLoginListener, OsmAuthorizationListener { @@ -89,7 +92,10 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - OsmandApplication app = requiredMyApplication(); + Fragment fragment = getParentFragment(); + if (fragment instanceof OsmAuthorizationListener) { + app.getOsmOAuthHelper().addListener((OsmAuthorizationListener) fragment); + } app.getOsmOAuthHelper().startOAuth((ViewGroup) v); } }); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java index 726a1e1b37..a224d93fa0 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthAuthorizationAdapter.java @@ -26,8 +26,6 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.concurrent.ExecutionException; -import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.*; - public class OsmOAuthAuthorizationAdapter { private static final int THREAD_ID = 10101; @@ -99,8 +97,8 @@ public class OsmOAuthAuthorizationAdapter { return client.performRequestWithoutAuth(url, method, body); } - public void authorize(String oauthVerifier, final OsmOAuthHelper helper, final OsmAuthorizationListener listener) { - new AuthorizeAsyncTask(helper, listener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, oauthVerifier); + public void authorize(String oauthVerifier, OsmOAuthHelper helper) { + new AuthorizeAsyncTask(helper).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, oauthVerifier); } private class StartOAuthAsyncTask extends AsyncTask { @@ -120,17 +118,14 @@ public class OsmOAuthAuthorizationAdapter { protected void onPostExecute(@NonNull OAuth1RequestToken requestToken) { loadWebView(rootLayout, client.getService().getAuthorizationUrl(requestToken)); } - } private class AuthorizeAsyncTask extends AsyncTask { private final OsmOAuthHelper helper; - private final OsmAuthorizationListener listener; - public AuthorizeAsyncTask(OsmOAuthHelper helper, OsmAuthorizationListener listener) { + public AuthorizeAsyncTask(OsmOAuthHelper helper) { this.helper = helper; - this.listener = listener; } @Override @@ -143,9 +138,7 @@ public class OsmOAuthAuthorizationAdapter { @Override protected void onPostExecute(Void result) { - if (listener != null) { - listener.authorizationCompleted(); - } + helper.notifyAndRemoveListeners(); } public void updateUserName() { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java index a9ff75c6b5..f444c03030 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/oauth/OsmOAuthHelper.java @@ -6,26 +6,47 @@ import androidx.annotation.NonNull; import net.osmand.plus.OsmandApplication; +import java.util.HashSet; +import java.util.Set; + public class OsmOAuthHelper { + private final OsmandApplication app; private final OsmOAuthAuthorizationAdapter authorizationAdapter; + private final Set listeners = new HashSet<>(); public OsmOAuthHelper(@NonNull OsmandApplication app) { + this.app = app; authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); } - public void startOAuth(ViewGroup view) { - authorizationAdapter.startOAuth(view); + public void addListener(OsmAuthorizationListener listener) { + listeners.add(listener); } - public void authorize(String oauthVerifier, OsmAuthorizationListener listener) { - authorizationAdapter.authorize(oauthVerifier, this, listener); + public void removeListener(OsmAuthorizationListener listener) { + listeners.remove(listener); } public OsmOAuthAuthorizationAdapter getAuthorizationAdapter() { return authorizationAdapter; } + public void startOAuth(@NonNull ViewGroup view) { + authorizationAdapter.startOAuth(view); + } + + public void authorize(@NonNull String oauthVerifier) { + authorizationAdapter.authorize(oauthVerifier, this); + } + + public void notifyAndRemoveListeners() { + for (OsmAuthorizationListener listener : listeners) { + listener.authorizationCompleted(); + } + listeners.clear(); + } + public interface OsmAuthorizationListener { void authorizationCompleted(); } From b7980ff511eaba4844add3cca33cfc188a6d8225 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 17 Nov 2020 07:34:26 +0000 Subject: [PATCH 061/198] Translated using Weblate (German) Currently translated at 99.9% (3554 of 3555 strings) --- OsmAnd/res/values-de/strings.xml | 35 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index a17e9b39de..00fc2b7047 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1928,7 +1928,7 @@ Die App darf nun auf den externen Speicher schreiben, dazu ist aber ein manueller Neustart nötig. Verschieben ↑ Verschieben ↓ - Dateiname beinhaltet nicht erlaubte Zeichen + Nicht erlaubte Zeichen im Dateinamen Keine Wegpunkte gefunden Bitte Kartenmarkierungen über die Karte hinzufügen Fein @@ -2646,7 +2646,7 @@ Ort/POI-Name kopieren Unbenannter Ort Geschlossene Notizen anzeigen - OSM-Notizen auf der Karte ein-/ausblenden. + OSM-Notizen auf der Karte ein- oder ausblenden. GPX - geeignet für den Export in JOSM oder andere OSM-Editoren. OSC - geeignet für den Export nach OSM. GPX-Datei @@ -3104,13 +3104,13 @@ Extrem schwere Routen, mit gefährlichen Hindernissen und schwieriger Umgebung. Nur klassische Routen zulassen Bevorzugter Schwierigkeitsgrad - Ski Alpin/Abfahrtslauf + Ski Alpin und Abfahrtslauf Pisten für Ski Alpin oder Abfahrtslauf und Zugang zu den Skiliften. OsmAnd Download-Dienst Magenta Symbol Erfasste Daten - Skilanglauf/Nordischer Skisport + Skilanglauf und Nordischer Skisport Loipen für Skilangläufer und Nordische Skiläufer. Routen dieser Schwierigkeit bevorzugen, obwohl bei kürzerer Routenführung schwierigere oder einfachere Pisten immer noch möglich sind. Abseits der Piste @@ -3373,7 +3373,7 @@ Startpunkt Schätzt die Ankunftszeit für unbekannte Straßentypen und begrenzt die Geschwindigkeit für alle Straßen (kann die Navigation beeinflussen) Track gespeichert - Dateiname ist leer + Leerer Dateiname Zurücksetzen %1$s löschen\? Vorgeschlagene Karten @@ -3579,7 +3579,7 @@ Eine Schaltfläche zum Ein- und Ausblenden der Geländeebene auf der Karte. Gelände einblenden Gelände ausblenden - Gelände ein- / ausblenden + Gelände ein- oder ausblenden Relief Zoomstufen Transparenz @@ -3697,11 +3697,11 @@ Sie können auf diese Aktionen zugreifen, indem Sie auf die Schaltfläche \"%1$s\" tippen. Öffentliche Verkehrsmittel ausblenden Öffentliche Verkehrsmittel anzeigen - Öffentliche Verkehrsmittel anzeigen/ausblenden + Öffentliche Verkehrsmittel anzeigen oder ausblenden Schaltfläche zum Ein- oder Ausblenden der öffentlichen Verkehrsmittel auf der Karte. - POI erstellen / bearbeiten + POI erstellen oder bearbeiten Parkpositionen - Favorit hinzufügen / bearbeiten + Favorit hinzufügen oder bearbeiten Standard-Reihenfolge der Elemente wiederherstellen Zurück zur Bearbeitung Die Aktionsschaltfläche schaltet zwischen den ausgewählten Profilen um. @@ -3878,7 +3878,7 @@ Track Route Track Datei zum Folgen auswählen, oder vom Gerät importieren. Die GPX-Aufzeichnung wird angehalten, wenn OsmAnd beendet wird (über „zuletzt verwendete Apps“). (Die Hintergrunddienst-Anzeige verschwindet aus der Android-Benachrichtigungsleiste.) - Aufzeichnungsintervall für die generelle Track-Aufzeichnung festlegen (via Schaltfläche \'GPX\' auf dem Kartenbildschirm). + Aufzeichnungsintervall für die generelle Track-Aufzeichnung festlegen (wird über die Schaltfläche \'Routenaufzeichung\' auf dem Kartenbildschirm angeschaltet). Als nächstes können Sie Ihren Track mit einem Ihrer Navigationsprofile auf die nächstgelegene erlaubte Straße einrasten lassen, um diese Option zu nutzen. Track-Wegpunkt hinzufügen %s Track Dateien ausgewählt @@ -3895,7 +3895,7 @@ Wiederholen • Aktualisierte Funktion zum Planen einer Route: erlaubt die Verwendung verschiedener Navigationstypen pro Segment und die Einbeziehung von Tracks \n -\n • Neues Menü zum Erscheinungsbild von Tracks: Wählen Sie Farbe, Dicke, Richtungspfeile, Start-/Ziel-Symbole +\n • Neues Menü zum Erscheinungsbild von Tracks: Wählen Sie Farbe, Dicke, Richtungspfeile, Start- und Zielsymbole \n \n • Verbesserte Darstellung von Fahrradknotenpunkten. \n @@ -3911,7 +3911,7 @@ Zuletzt geändert Name: Z – A Name: A – Z - Start-/Ziel-Symbole + Start- und Zielsymbole Vielen Dank für den Kauf von \'Höhenlinien\' Das Abonnement wird pro ausgewähltem Zeitraum berechnet. Sie können das Abonnement jederzeit über die AppGallery kündigen. Die Bezahlung wird Ihrem AppGallery-Konto bei der Bestätigung des Kaufs belastet. @@ -3969,10 +3969,10 @@ Historie der Marker GPX-Datei an OpenStreetMap senden Geben Sie durch Komma getrennte Tags ein. - Öffentlich bedeutet, dass der Track in Ihren GPS-Tracks und in GPS-Track Verzeichnissen öffentlich angezeigt wird. Die über die API bereitgestellten Daten verweisen nicht auf Ihre Track-Seite. Die Zeitstempel der Trackpunkte sind nicht über die öffentliche GPS-API verfügbar, und die Punkte sind nicht chronologisch geordnet. Andere Benutzer können jedoch nach wie vor den Rohtrack aus der öffentlichen Trackliste und alle darin enthaltenen Zeitstempel herunterladen. - Identifizierbar bedeutet, dass der Track in Ihren GPS-Tracks und in öffentlichen GPS-Track Verzeichnissen angezeigt wird. Andere Benutzer können den Rohtrack herunterladen und mit Ihrem Benutzernamen verknüpfen. Daten, die über die Trackpunkte-API geliefert werden, verweisen auf Ihre ursprüngliche Track-Seite. Die Zeitstempel der Trackpunkte sind über die öffentliche GPS-API verfügbar. - Privat bedeutet, dass der Track nicht in öffentlichen Verzeichnissen auftaucht. Punkte des Tracks werden weiterhin über die öffentliche GPS-API ohne Zeitstempel verfügbar sein, aber nicht chronologisch geordnet. - Verfolgbar bedeutet, dass der Track in keiner öffentlichen Auflistung auftaucht, aber Trackpunkte weiterhin über die öffentliche GPS API mit Zeitstempel verfügbar sein werden. Andere Benutzer werden nur verarbeitete Trackpunkte Ihres Tracks herunterladen können, die nicht direkt mit Ihnen in Verbindung gebracht werden können. + \"Öffentlich\" bedeutet, dass der Track öffentlich in Ihren GPS-Tracks und in öffentlichen GPS-Track Verzeichnissen mit Zeitstempeln in Rohform angezeigt wird. Die über die API bereitgestellten Daten verweisen nicht auf Ihre Track-Seite. Die Zeitstempel der Trackpunkte sind nicht über die öffentliche GPS API verfügbar, und die Trackpunkte sind nicht chronologisch geordnet. + \"Identifizierbar\" bedeutet, dass der Track in Ihren GPS-Tracks und in öffentlichen GPS-Track Verzeichnissen angezeigt wird, d.h. andere Benutzer können den Track herunterladen und mit Ihrem Benutzernamen verknüpfen. Öffentliche, mit Zeitstempel versehene Trackpunkt-Daten von der GPS API, die über die Trackpunkt API bereitgestellt werden, verweisen auf Ihre ursprüngliche Trackseite. + \"Privat\" bedeutet, dass der Track nicht in öffentlichen Verzeichnissen auftaucht, aber seine Trackpunkte in nicht chronologischer Reihenfolge über die öffentliche GPS API ohne Zeitstempel verfügbar sind. + \"Verfolgbar\" bedeutet, dass die Spur nicht in öffentlichen Auflistungen auftaucht, aber verarbeitete Trackpunkte mit Zeitstempeln davon (die nicht direkt mit Ihnen in Verbindung gebracht werden können) durch Downloads von der öffentlichen GPS API. OSM Notiz schließen OSM Notiz kommentieren Sie können sich mit der sicheren OAuth-Methode anmelden oder Ihren Benutzernamen und Passwort verwenden. @@ -3982,4 +3982,7 @@ Fotos werden vom offenen Datenprojekt OpenPlaceReviews.org zur Verfügung gestellt. Um Ihre Fotos hochladen zu können, müssen Sie sich auf der Website anmelden. Neues Konto erstellen Ich habe bereits ein Konto + Suchverlauf + Kajak + Motorboot \ No newline at end of file From 52875d89f25fa6a8922207e8ce0d20474d5b73ea Mon Sep 17 00:00:00 2001 From: solokot Date: Wed, 18 Nov 2020 19:17:26 +0000 Subject: [PATCH 062/198] Translated using Weblate (Russian) Currently translated at 99.6% (3543 of 3555 strings) --- OsmAnd/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 66894bb368..90979d5476 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -398,7 +398,7 @@ Флуоресцентные цвета Использовать флуоресцентные цвета для отображения треков и маршрутов. Локальное редактирование - Всегда использовать редактирование на устройстве. + Если используется редактирование на устройстве, то изменения будут сохранены локально и загружены на сервер только по запросу, иначе они будут загружаться немедленно. Изменение POI в приложении не меняет POI загруженные из интернета, однако все изменения сохраняются в локальный файл на устройстве. Отправка… {0} POI/заметок отправлено From 3e44bed0b0955cc272a9a3e50f77472854dfdbc6 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 17 Nov 2020 20:16:08 +0000 Subject: [PATCH 063/198] Translated using Weblate (Russian) Currently translated at 99.6% (3543 of 3555 strings) --- OsmAnd/res/values-ru/strings.xml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 90979d5476..6f13c99ab5 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -3107,7 +3107,7 @@ Режим пользователя, полученный из: %s Повторяющееся имя BRouter (локально) - Горнолыжные спуски + Альпийские и горные лыжи Склоны для катания и спуска на горных лыжах и доступ к подъёмникам. Лыжные туры Сани @@ -3334,7 +3334,7 @@ Правки OSM Поменять местами %1$s и %2$s Трек сохранён - Не указано имя файла + Пустое имя файла Очистить %1$s\? Узловые сети Предлагаемые карты @@ -3561,7 +3561,7 @@ Пересчитывать маршрут в случае отклонения %1$s из %2$s Настройка минимального и максимального уровней масштабирования, при которых слой будет отображаться. - Показать/скрыть рельеф + Показать или скрыть рельеф Переключатель, чтобы показать или скрыть слой рельефа местности на карте. Показать рельеф Скрыть рельеф @@ -3691,8 +3691,8 @@ Скрыть общественный транспорт Показать общественный транспорт Показать/скрыть общественный транспорт - Добавить/изменить место - Создать/изменить POI + Добавить или изменить избранное + Создать или изменить POI Возврат к редактированию Парковки Переключатель, чтобы показать или скрыть общественный транспорт на карте. @@ -3961,4 +3961,12 @@ Подписка OsmAnd Live приостановлена История маркеров Отправить GPX-файл в OpenStreetMap + Закрыть заметку OSM + Добавить фото + Зарегистрироваться на +\nOpenPlaceReviews.org + Создать новый аккаунт + У меня уже есть аккаунт + История поиска + Моторная лодка \ No newline at end of file From c99ef9d4b27946c33bcc9a4b02d531577283d5ac Mon Sep 17 00:00:00 2001 From: Moo Date: Wed, 18 Nov 2020 00:00:57 +0000 Subject: [PATCH 064/198] Translated using Weblate (Lithuanian) Currently translated at 60.2% (2141 of 3555 strings) --- OsmAnd/res/values-lt/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index 36989898e7..049ac26e8c 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -2777,4 +2777,7 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka. Pridėtas taškas nebus matomas žemėlapyje, nes pasirinkta grupė yra paslėpta, ją galite rasti \"%s\". Pasirinkite intervalą nuo kurio taškas su atstumu ar laiku bus pavaizduojamas ekrane ant trasos. Pasirinkite norima dalinimo variantą: pagal laiką arba pagal atstumą. + Pridėti nuotrauką + Sukurti naują paskyrą + Aš jau turiu paskyrą \ No newline at end of file From bf68391ff2e11a38d4eb4f619e06633feb3d804b Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Tue, 17 Nov 2020 00:35:00 +0000 Subject: [PATCH 065/198] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-uk/strings.xml | 47 +++++++++++++++++--------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 4abd682cde..61ff054492 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -59,7 +59,7 @@ Видимість Теги Опис - Для вивантаження GPX-файлів, будь ласка, вкажіть Ваше ім\'я користувача і пароль в OSM. + Для вивантаження GPX-файлів вкажіть ваше ім\'я користувача і пароль в OSM. Підтримка Підтримати розробку нових функцій Відображати масштаб @@ -1946,7 +1946,7 @@ Це потрібно, щоб надавати Вам відомості про зміни на мапі. Прилюдне імʼя Територія - Будь ласка, введіть прилюдне ім\'я + Введіть загальнодоступне ім\'я Дякуємо за підтримку OsmAnd! \nЩоб задіяти усі нові можливості Вам потрібно перезапустити застосунок. Частина коштів буде спрямована землеписцям OSM, що внесли зміни до мапи в цьому місці. @@ -1956,7 +1956,7 @@ \nЯкщо Вам подобається OsmAnd та OSM, і хочете підтримати і бути підтриманими ними, це ідеальний спосіб зробити це. Надішліть Вашу OSM-нотатку таємно, або скориставшись обліковим записом на OSM.org. Надіслати нотатку в OSM - Ім\'я файлу містить неприпустимі знаки + Неприпустимі знаки в назві файлу Слідкуйте за нами Звукові напрямки Індикація звуком напряму на цільову точку. @@ -2243,7 +2243,7 @@ Рівень масштабування: %1$s Назва групи Зміна кольору - Редагувати ім\'я + Змінити ім\'я Огляд Виберіть вулицю у %1$s @@ -2433,7 +2433,7 @@ Перезавантажити Перезавантажити тайли, щоб переглянути актуальні дані. Тайловий кеш - Невірне ім\'я користувача + Неправильне ім\'я користувача до від Показувати лише додані зображення @@ -2464,7 +2464,7 @@ Перегляньте мапу і додайте точки Вимірювання відстані Необхідно додати хоча б одну точку. - Ім’я GPX файлу: + Назва GPX файлу: Показати на мапі після збереження Додати шляхову точку Зберегти GPX-точку шляху @@ -2633,7 +2633,7 @@ Додає першу зупинку Пересунути призначення далі і створити його Показати закриті нотатки - Показати/приховати OSM-нотатки на мапі. + Показати чи приховати примітки OSM на мапі. GPX — підходить для експорту в JOSM та інші OSM-редактори. OSC — підходить для експорту в OSM. GPX-файл @@ -2663,7 +2663,7 @@ Зх Пд Пн - Необов\'язкове ім\'я точки + Необов\'язкова назва точки Близькі маршрути в межах В межах Відстань: спочатку найдальше @@ -3122,7 +3122,7 @@ Змінюйте масштабування мапи прокручуванням колеса вгору і вниз. Клавіша Escape поверне вас до додатку WunderLINQ. Використовувати WunderLINQ для контролю Потрібно додати принаймні одну річ до списку у налаштуваннях \'Швидкої дії\' - Високогір\'я / гірські лижі + Альпійські та гірські лижі Траси для високогірних і гірських лиж та доступ до лижних підіймачів. Бездоріжжя Налаштувати профіль @@ -3132,7 +3132,7 @@ Оберіть налаштування навігації для профілю Вкажіть верхню межу змін Кількість змін - Бігові лижі / скандинавська ходьба + Бігові лижі та скандинавські лижі Траси для скандинавської ходьби або бігу на лижах. Лижні тури Маршрути для лижних турів. @@ -3364,7 +3364,7 @@ Змінити місцями %1$s та %2$s Початкова точка Трек збережено - Ім\'я файлу порожнє + Порожня назва файлу Повернутися Показати мережеві маршрути циклу вузлів Очистити %1$s\? @@ -3574,7 +3574,7 @@ Пагорб %1$s з %2$s Схили - Показати / приховати місцевість + Показати чи приховати рельєф Сховати місцевість Показати місцевість Кнопка для відображення або приховування шару місцевості на мапі. @@ -3691,10 +3691,10 @@ Розташування припаркованого авто Приховати громадський транспорт Показати громадський транспорт - Показати/приховати громадський транспорт + Показати чи приховати громадський транспорт Кнопка показу або приховування громадського транспорту на мапі. - Створити / змінити POI - Додати / правити вибране + Створити чи змінити POI + Додати чи змінити вибране Відновити усталене впорядкування Повернутися до редагування Ви можете отримати доступ до цих дій, торкнувшись кнопки “%1$s”. @@ -3863,7 +3863,7 @@ Обрізати після Змінити вид маршруту раніше Змінити вид маршруту після - Вкажіть інтервал для загального запису поїздки (включається через віджет запису подорожі на мапі). + Вкажіть інтервал для загального запису поїздки (увімкнено через віджет «Запис подорожі» на мапі). Усталена системна Всі наступні сегменти Попередній сегмент @@ -3884,7 +3884,7 @@ Повторити • Оновлено функції планування маршруту: дозволено застосувати різні типи переходів для кожного сегмента і прив\'язати будь-який трек до доріг \n -\n• Нове меню вигляду треків: вибір кольору, товщина, вигляд стрілки напрямку, значки початку/завершення +\n• Нове меню вигляду треків: вибір кольору, товщина, вигляд стрілки напрямку, піктограми початку та завершення \n \n• Покращено оглядовість велосипедних вузлів \n @@ -3900,7 +3900,7 @@ Востаннє змінено За назвою: Я — А За назвою: А — Я - Значки початку/завершення + Піктограми початку та завершення Дякуємо за придбання «Горизонталей» Що нового Передплата стягується за вибраний період. Скасуйте її в AppGallery у будь-який час. @@ -3961,10 +3961,10 @@ Історія маркерів Надіслати файл GPX на OpenStreetMap Введіть мітки через коми. - Загальнодоступне означає, що трасування буде показано загальнодоступно у ваших GPS-трасуваннях та у загальнодоступних списках GPS-трасування. Дані, що подаються через API, не посилаються на вашу сторінку трасування. Мітки часу точок трасування недоступні через загальнодоступний API GPS і не впорядковані хронологічно. Однак інші користувачі все ще можуть завантажувати необроблену трасування із загальнодоступного списку трасування та будь-які часові позначки, що містяться всередині. - Приватне означає, що трасування не з\'являтиметься в жодному загальнодоступному списку, але контрольні точки з нього все одно будуть доступні через загальнодоступний API GPS без позначок часу та не впорядковані за хронологією. - Ідентифікований означає, що трасування буде показано публічно у вашому трасуванні GPS і в загальнодоступних списках трасування GPS, тобто інші користувачі зможуть завантажити необроблене трасування та пов\'язати його з вашим ім\'ям користувача. Дані, подані за допомогою API точок відстеження, посилаються на вихідну сторінку трасування. Позначки часу точок трасування доступні через загальнодоступний GPS API. - Відстежуваний означає, що трасування не з\'явиться в жодному загальнодоступному списку, але точки від нього все одно будуть доступні через загальнодоступний API GPS із позначками часу. Інші користувачі зможуть завантажувати лише оброблені контрольні точки з вашого трасування, які не можуть бути безпосередньо пов’язані з вами. + «Загальнодоступне» означає, що трасування показано загальнодоступно у ваших GPS-трасуваннях та у загальнодоступних списках GPS-трасування, а також у загальнодоступному списку трасування з позначками часу в необробленому вигляді.. Дані, що подаються через API, не посилаються на вашу сторінку трасування. Мітки часу точок трасування недоступні через загальнодоступний API GPS і не впорядковані хронологічно. + «Приватне» означає, що трасування не з\'являється в жодному загальнодоступному списку, але контрольні точки з нього в нехронологічному порядку доступні через загальнодоступний API GPS без позначок часу. + «Ідентифікований» означає, що трасування буде показано публічно у вашому трасуванні GPS і в загальнодоступних списках трасування GPS, тобто інші користувачі зможуть завантажити необроблене трасування та пов\'язати його з вашим ім\'ям користувача. Загальнодоступні дані трасування з GPS API, що обслуговуються за допомогою API точок відстеження, посилаються на початкову сторінку трасування. + «Відстежуваний» означає, що трек не з\'явиться в жодному загальнодоступному списку, але обробка точок з позначками часу від нього (які не можуть бути безпосередньо пов’язані з вами) виконується за допомогою завантажень із загальнодоступного API GPS. Закрити примітку OSM Коментувати примітку OSM Ви можете увійти за допомогою безпечного методу OAuth або застосувавши свої ім\'я користувача й пароль. @@ -3974,4 +3974,7 @@ Світлини надаються проєктом відкритих даних OpenPlaceReviews.org. Щоб завантажити світлини зареєструйтеся на сайті. Створити обліковий запис У мене вже є обліковий запис + Журнал пошуку + Каяк + Моторний човен \ No newline at end of file From b29bbffd1b2b0c0a769e4f6c5c4b67f43147b38f Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Wed, 18 Nov 2020 20:10:19 +0000 Subject: [PATCH 066/198] Translated using Weblate (Italian) Currently translated at 89.1% (3171 of 3555 strings) --- OsmAnd/res/values-it/strings.xml | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index d46ef2e3c1..f7bb74d54c 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -3417,7 +3417,7 @@ Note fotografiche Ricalcolo del percorso Nome utente e password - Queste impostazioni del plugin sono globali e si applicano a tutti i profili. + Queste impostazioni del plugin sono globali e si applicano a tutti i profili Modifica di OpenStreetMap È possibile visualizzare tutte le modifiche non caricate o le note OSM in %1$s. I punti caricati non vengono visualizzati in OsmAnd. OSM @@ -3945,7 +3945,7 @@ Sport Emergenza Viaggio - Devi aggiungere almeno due punti. + Devi aggiungere almeno due punti Chiudi la nota OSM Commenta la nota OSM Puoi autenticarti con il metodo sicuro OAuth o utilizzare le tue credenziali. @@ -3955,4 +3955,28 @@ Le foto sono fornite dal progetto a sorgente aperto OpenPlaceReviews.org. Per contribuire delle tue foto devi registrarti nel sito. Crea un nuovo account Ho già un account + Cronologia di ricerca + Kayak + Motoscafo + Connettiti a OpenStreetMap + Connettiti a OpenStreetMap.org + Registrati con OpenStreetMap + Devi fare il login per inviare nuove modifiche o dei cambiamenti. +\n +\nPuoi fare login utilizzando il metodo sicuro OAuth o il nomeutente e password. + Usa login e password + Account + Entra + Gestisci la sottoscrizione + C\'è un problema con la tua sottoscrizione. Clicca sul pulsante per andare alle impostazioni di sottoscrizione di Google Play per correggere il tuo metodo di pagamento. + La sottoscrizione di OsmAnd Live è terminata + La sottoscrizione di OsmAnd Live è stata messa in pausa + La sottoscrizione di OsmAnd Live è in sospeso + Cronologia dei marcatori + Invia il file GPX a OpenStreetMap + Immetti le etichette separate dalla virgola. + \"Pubblico\" significa che la traccia è visualizzata pubblicamente nelle tue tracce GPS, nelle liste pubbliche di tracce GPS con le informazioni temporali in forma grezza. I dati forniti attraverso le API non conducono alla tua pagina delle tracce. Le informazioni temporali dei punti traccia non sono disponibili attraverso le API GPS pubbliche, e i punti della traccia non sono ordinati cronologicamente. + \"Privato\" significa che la traccia non è visualizzabile in alcuna lista pubblica ma i suoi punti, in ordine non cronologico, sono disponibili attraverso le API GPS senza le informazioni temporali. + \"Identificabile\" significa che la traccia è visualizzabile nelle Mie tracce GPS e nelle liste pubbliche, es. gli altri utenti potranno scaricare la traccia grezza e associarla con il tuo nome utente. I punti della traccia, con le loro informazioni temporali, saranno riconducibili, attraverso le API GPS, alla tua traccia originale. + \"Tracciabile\" significa che la traccia non è visualizzabile in alcuna lista pubblica, ma solo i suoi punti, processati, con le informazioni temporali (che non possono essere direttamente associati a te) attraverso le API GPS pubbliche. \ No newline at end of file From b7af5a2e16973d9e5d626de6c96843925f849b5c Mon Sep 17 00:00:00 2001 From: ace shadow Date: Tue, 17 Nov 2020 23:17:56 +0000 Subject: [PATCH 067/198] Translated using Weblate (Slovak) Currently translated at 99.8% (3551 of 3555 strings) --- OsmAnd/res/values-sk/strings.xml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 2f0404d1dc..2b246edb29 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -1919,7 +1919,7 @@ Aplikácia teraz má povolenie zapisovať do externého úložiska, ale je potrebný reštart aplikácie. Podrobný prehľad Meno a heslo pre OSM - Názov súboru obsahuje nepovolený znak + Nepovolený znak v názve súboru Tenké Stredné Tučné @@ -2636,7 +2636,7 @@ Kopírovať názov bodu/umiestnenia Nepomenované miesto Zobraziť uzavreté poznámky - Zobraziť/skryť OSM poznámky na mape. + Zobraziť alebo skryť OSM poznámky na mape. GPX - vhodné na export do JOSM a iných editorov OSM. OSC - vhodné na export do OSM. Súbor GPX @@ -3080,7 +3080,7 @@ Zmeňte priblíženie mapy pomocou posúvania kolieskom nahor a nadol. Esc vás vráti do aplikácie WunderLINQ. Použiť WunderLINQ na približovanie Pridajte aspoň jednu položku do zoznamu v nastaveniach \'Rýchlej akcie\' - Alpské/zjazdové lyžovanie + Alpské alebo zjazdové lyžovanie Svahy pre alpské a zjazdové lyžovanie a prístup k vlekom. Bežkovanie Trasy pre beh na lyžiach. @@ -3346,7 +3346,7 @@ Zameniť %1$s a %2$s Východzí bod Stopa uložená - Názov súboru je prázdny + Prázdny názov súboru Vrátiť späť Zobraziť sieť cyklotrás Vymazať %1$s\? @@ -3574,7 +3574,7 @@ Trasa bude prepočítaná ak vzdialenosť od trasy k aktuálnej polohe je väčšia ako zvolená hodnota. %1$s z %2$s Sklony svahov - Zobraziť / skryť terén + Zobraziť alebo skryť terén Skryť terén Zobraziť terén Tlačidlo pre zobrazenie alebo skrytie vrstvy terénu na mape. @@ -3693,11 +3693,11 @@ \n Skryť verejnú dopravu Zobraziť verejnú dopravu - Zobraziť/skryť verejnú dopravu + Zobraziť alebo skryť verejnú dopravu Tlačidlo na zobrazenie alebo skrytie verejnej dopravy na mape. - Vytvoriť / Upraviť bod záujmu + Vytvoriť alebo upraviť bod záujmu Parkovacie miesta - Pridať / Upraviť obľúbený bod + Pridať alebo upraviť obľúbený bod Obnoviť predvolené poradie položiek Naspäť k úpravám K týmto akciám sa dostanete stlačením tlačidla “%1$s”. @@ -3904,7 +3904,7 @@ Naposledy zmenené Názov: Z – A Názov: A – Z - Ikony štartu/cieľa + Ikony štartu a cieľa Ďakujeme za zakúpenie modulu \'Vrstevnice\' Predplatné bude spoplatnené v zvolenom intervale. Predplatné zrušte kedykoľvek na AppGallery. Platba bude stiahnutá z vášho účtu AppGallery po potvrdení nákupu. @@ -3974,4 +3974,7 @@ Fotografie sú poskytované projektom OpenPlaceReviews.org s otvorenými dátami. Na odoslanie vašich fotiek sa musíte zaregistrovať na webovej stránke. Vytvoriť nový účet Už mám účet + História hľadania + Kajak + Motorový čln \ No newline at end of file From c71d71e5359c22c0a0fbb61a2237af03f6200437 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Tue, 17 Nov 2020 09:12:31 +0000 Subject: [PATCH 068/198] Translated using Weblate (Hebrew) Currently translated at 99.9% (3552 of 3555 strings) --- OsmAnd/res/values-iw/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index 81122d590f..5e3f1a1567 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -3982,4 +3982,5 @@ היסטוריית חיפוש קיאק סירת מנוע + מגדהי \ No newline at end of file From bc8980520ac863700bbfa19745b575fd6de4c550 Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Tue, 17 Nov 2020 10:00:42 +0000 Subject: [PATCH 069/198] Translated using Weblate (Arabic) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 26b1bd66e3..07aaf2352e 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -2454,7 +2454,7 @@ تصفح الخريطة وإضافة نقاط قياس المسافة الرجاء إضافة نقطة واحدة على الأقل. - اسم مسار الـGPX : + اسم مسار GPX : عرض على الخريطة بعد الحفظ إضافة نقطة حفظ نقطة GPX From ded33a229aa4444db16645648a004b087dc58b1c Mon Sep 17 00:00:00 2001 From: iman Date: Wed, 18 Nov 2020 16:24:10 +0000 Subject: [PATCH 070/198] Translated using Weblate (Persian) Currently translated at 98.8% (3513 of 3555 strings) --- OsmAnd/res/values-fa/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index f08461e509..e657b192aa 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -3980,4 +3980,11 @@ خصوصی یا Private به این معنی است که رد در هیچ‌یک از لیست‌های عمومی نشان داده نمی‌شود اما نقاط رد از طریق API جی‌پی‌اس‌های عمومی بدون مهر زمان و بدون ترتیب زمانی دست‌یافتنی است. قابل‌شناسایی یا Identifiable به این معنی است که رد به‌صورت عمومی در لیست ردهای جی‌پی‌اس شما و لیست عمومی ردهای جی‌پی‌اس نمایش داده می‌شود، یعنی سایر کاربران می‌توانند رد خام را دانلود کنند و بدانند که مربوط به نام کاربری شماست. دادهٔ نقاط رد که از طریق API در دسترس قرار می‌گیرد، به صفحهٔ ردهای شما ارجاع می‌دهد. مهر زمان نقاط رد از طریق API جی‌پی‌اس‌های عمومی دست‌یافتنی است. قابل‌ردیابی یا Trackable به این معنی است که رد در هیچ‌یک از لیست‌های عمومی نشان داده نمی‌شود اما نقاط رد + مهر زمان نقاط از طریق API جی‌پی‌اس‌های عمومی دست‌یافتنی است. سایر کاربران فقط می‌توانند نقاط پردازش‌شدهٔ رد شما را دانلود کنند که مستقیماً امکان ارجاع به نام کاربری شما را ندارد. + افزودن عکس + عکس‌ها از طریق پروژهٔ داده‌باز OpenPlaceReviews.org ارائه می‌شود. برای آپلود عکس‌های خود لازم است در این وبگاه ثبت نام کنید. + ثبت نام در +\nOpenPlaceReviews.org + ساخت حساب جدید + حساب کاربری دارم + تاریخچهٔ جست‌وجو \ No newline at end of file From 8a880d72dfa221c62e82359c69a3dc240d009822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Tue, 17 Nov 2020 15:29:57 +0000 Subject: [PATCH 071/198] Translated using Weblate (Czech) Currently translated at 88.1% (3132 of 3555 strings) --- OsmAnd/res/values-cs/strings.xml | 110 ++++++++++++++++--------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 374d0b113a..c23e4be8e6 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -1521,7 +1521,7 @@ Délka %2$s Výškové omezení Zadejte výšku vozidla, která musí být povolena na cestách. Inteligentní přepočítávání trasy - Pro dlouhé cesty přepočítat pouze počáteční úsek trasy. + Přepočítá pouze počáteční úsek trasy. Může se hodit pro dlouhé trasy. Odhlásit Importovat do OsmAnd Přečíst celý článek (on-line) @@ -3090,15 +3090,15 @@ Zobrazená oblast: %1$s x %2$s Terénní Nastavit profil Profil si udrží své vlastní nastavení - Vybrat výchozí nastavení mapy u profilu - Vybrat výchozí nastavení obrazovky u profilu - Vybrat výchozí nastavení navigace u profilu + Zvolte nastavení mapy pro profil + Zvolte nastavení obrazovky pro profil + Zvolte nastavení navigace pro profil Určete maximální počet přestupů Počet přestupů Probudit na odbočce - Nastavte čas, po který bude obrazovka zapnutá. + Nastavte, jak dlouho bude obrazovka zapnutá. Použít senzor přiblížení - Zamávejte rukou přes horní část obrazovky pro zapnutí obrazovky při navigování. + Zamávání rukou nad obrazovkou ji zapne. 1. třída 2. třída 3. třída @@ -3110,7 +3110,7 @@ Zobrazená oblast: %1$s x %2$s Obecná klávesnice WunderLINQ Parrot - Prosíme, zapněte alespoň jeden profil aplikace, pro použití tohoto nastavení. + Pro použití tohoto nastavení zapněte prosím alespoň jeden profil aplikace. Zimní cesta Ledová cesta Zimní a ledové cesty @@ -3159,7 +3159,7 @@ Zobrazená oblast: %1$s x %2$s Nainstalované moduly Nastavení navigace Vzhled aplikace, jednotky, oblast - Upozornění jsou zobrazena vlevo dole během navigace. + Upozornění zobrazená vlevo dole během navigace. Jazyk a výstup Obnovit do základního nastavení Spravovat profily aplikace… @@ -3170,14 +3170,14 @@ Zobrazená oblast: %1$s x %2$s Mapa během navigace Mapa během navigace Další - Hmotnost, výška, rychlost + Hmotnost, výška, délka, rychlost Parametry vozidla Hlasová oznámení se přehrávají pouze během navigace. Navigační pokyny a oznámení Hlasová oznámení Konfigurace parametrů trasy Parametry trasy - Použito pro odhadnutí času příjezdu u cest s neznámým povrchem a pro omezení rychlosti u všech cest (může ovlivnit trasu) + Odhaduje času příjezdu u cest s neznámým povrchem a omezuje rychlost na všech cestách (může ovlivnit trasu) Nastavení profilu: OsmAnd používá UTM Standard, který je podobný, ale nikoliv identický s UTM NATO formátem. Příklad @@ -3210,8 +3210,8 @@ Zobrazená oblast: %1$s x %2$s Zadejte cestu k adresáři s OsmAnd daty Změnit adresář pro OsmAnd data\? Přesunout do nového umístění - Vnitřní úložiště, skryté před uživateli a aplikacemi, přístupné výhradně pro OsmAnd - Změnit adresář úložiště dat + Vnitřní úložiště pro OsmAnd (skryté před uživateli a jinými aplikacemi). + Změnit složku pro ukládání dat Typ sjezdovky Nováček Začátečník @@ -3240,44 +3240,44 @@ Zobrazená oblast: %1$s x %2$s Opravdu chcete aktualizovat všechny mapy (%1$d)\? Sdíleno Upřednostňovat nezpevněné cesty - Upřednostňovat nezpevněné cesty. + Pro navigaci upřednostňovat nezpevněné cesty před zpevněnými. OSM úpravy Exportovat profil OsmAnd profil: %1$s - Profil „%1$s“ již existuje. Přepsat\? + \'%1$s\' již existuje. Přepsat\? Profil nelze exportovat. - Import profilu: + Importovat profil Přidejte profil otevřením jeho souboru pomocí OsmAnd. %1$s chyba importu: %2$s - Úspěšně importováno: %1$s + %1$s importován. Prohodit %1$s a %2$s Počáteční bod Trasa uložena - Název souboru je prázdný + Prázdný název souboru Vrátit zpět Vyčistit %1$s\? Dialog stahování map Dialogy a oznámení - Správa vyskakovacích upozornění, oznámení a dialogů zobrazovaných aplikací OsmAnd. + Správa vyskakovacích upozornění, dialogů a oznámení. Navrhované mapy - Tyto mapy je třeba používat s modulem + Tyto mapy jsou potřebné pro modul. Přidané profily - Nový profil přidaný do OsmAnd modulem + Profily přidané modulem Vypnout Přidán nový modul - Přidat nový profil „%1$s“\? + Přidat nový profil \'%1$s\'\? Trasy upravené pro klasické lyžování bez bruslení. Zahrnuje trasy upravené menšími sněžnými vozidly a stopy vytvořené samotnými lyžaři. Povolit pouze trasy pro bruslení na lyžích Sněžný skútr Vlastní modul pro OsmAnd - Změny aplikovány na profil %1$s. - Nelze přečíst %1$s. - Nelze zapsat %1$s. - Nelze importovat %1$s. + Změny aplikovány na profil \'%1$s\'. + Nepodařilo se přečíst z \'%1$s\'. + Nelze zapsat do \'%1$s\'. + Nelze importovat z \'%1$s\'. Stínování svahů Terén Stínované svahy používají tmavé odstíny pro vyjádření svahů, vrcholů a nížin. - Svahy jsou barevné vizualizace terénu. + Svahy využívají barvy k vizualizaci strmosti terénu. Nastavte minimální a maximální úroveň přiblížení, při které bude vrstva zobrazená. Pro zobrazení stínování kopců jsou potřeba další mapy. Pro zobrazení svahů jsou potřeba další mapy. @@ -3285,7 +3285,7 @@ Zobrazená oblast: %1$s x %2$s Průhlednost Úrovně přiblížení Legenda - Zapněte pro zobrazení stínovaných svahů. O tomto typu map se dozvíte více na našich stránkách + Zapněte pro zobrazení stínovaných svahů nebo sklonu svahů. O těchto typech map se dozvíte více na našich stránkách. Všechna data z %1$s jsou naimportovaná, můžete použít tlačítka níže k otevření části aplikace pro jejich správu. Import dokončen Položky přidány @@ -3304,7 +3304,7 @@ Zobrazená oblast: %1$s x %2$s Trasa bude přepočítaná pokud vzdálenost od trasy k aktuální poloze je větší než zvolená hodnota. %1$s z %2$s Svahy - Zobrazit/skrýt terén + Zobrazit nebo skrýt terén Skrýt terén Zobrazit terén Tlačítko pro zobrazení nebo skrytí vrstvy terénu na mapě. @@ -3316,7 +3316,7 @@ Zobrazená oblast: %1$s x %2$s Osmiúhelník Čtverec Min - Nahradit jiný bod tímto + Nahradit jiný bod tímto. Lyžařské okruhy Úhel Úhel: %s° @@ -3333,7 +3333,7 @@ Zobrazená oblast: %1$s x %2$s \nModul zůstane v zařízení i po odstranění aplikace OsmAnd. Modul vypnutý Otevřít nastavení - Vypnout přepočítávání + Žádné přepočítávání Zadejte prosím název profilu Vyberte data k importu. Některé položky již existují @@ -3359,12 +3359,12 @@ Zobrazená oblast: %1$s x %2$s Některé články Wikipedie nemusí být dostupné ve vašem jazyce. Zvolte jazyky, v nichž se články Wikipedie objeví na mapě. \nBěhem čtení článku budete moci přepínat mezi všemi dostupnými jazyky. Pro zobrazení bodů zájmu Wikipedie jsou potřeba další mapy. - Hlavní akce mohou obsahovat pouze 4 tlačítka. + Obsahuje pouze 4 tlačítka. Hlavní akce Položky můžete přesouvat pouze v rámci této kategorie. Modul pro vývojáře Položky - Zvolte jazyky, v nichž se články Wikipedie zobrazí na mapě. Při čtení článku můžete přepínat mezi všemi dostupnými jazyky. + Zvolte jazyky článků Wikipedie na mapě. Při čtení článku můžete přepínat mezi všemi dostupnými jazyky. Některé články Wikipedie nemusí být dostupné ve vašem jazyce. Kantonština Jižní min @@ -3397,9 +3397,9 @@ Zobrazená oblast: %1$s x %2$s %1$s / %2$s Platba bude stržena z vašeho účtu Google Play po potvrzení nákupu. \n -\nPředplatné se automaticky prodlužuje, pokud ho před termínem obnovení nezrušíte. Platba za předplatné (měsíc/tři měsíce/rok) bude stržena vždy jen v den obnovení. +\n Předplatné se automaticky prodlužuje, pokud ho před termínem obnovení nezrušíte. Platba za předplatné (měsíc/tři měsíce/rok) bude stržena vždy jen v den obnovení. \n -\nSvé předplatné můžete spravovat nebo zrušit v nastavení Google Play. +\n Své předplatné můžete spravovat nebo zrušit v nastavení Google Play. Hledat typy bodů zájmu Zkombinujte body zájmu různých kategorií. Klepnutím na přepínač vyberete všechny, klepnutím na levou stranu vyberete kategorie. Další mapy @@ -3447,12 +3447,12 @@ Zobrazená oblast: %1$s x %2$s Mercatorovo zobrazení Formát uložení Nastavte minimální a maximální úroveň přiblížení, při níž se zobrazí nebo načte online mapa. - Tyto parametry ovlivňují zobrazení při použití jako mapy nebo překryvu/podkladu. + Ovlivňuje zobrazení při použití jako mapy nebo překryvu/podkladu. \n -\n%1$s: Zobrazení mapy bude omezeno na vybrané úrovně přiblížení. +\n%1$s: Mapa bude omezena na vybrané úrovně přiblížení. \n -\n%2$s: Úrovně přiblížení, při nichž budou zobrazeny původní dlaždice. Mimo tyto hodnoty se dlaždice přeškálují. - Čas obnovení v minutách. Dlaždice v mezipaměti budou znovu načteny po uplynutí zadaného času. Necháte-li toto pole prázdné, dlaždice z tohoto zdroje se nebudou obnovovat nikdy. +\n%2$s jsou úrovně přiblížení, při nichž budou zobrazeny původní dlaždice. Mimo tyto hodnoty se dlaždice přeškálují. + Dlaždice v mezipaměti budou znovu načteny po uplynutí zadaného počtu minut. Necháte-li toto pole prázdné, dlaždice z tohoto zdroje se nebudou obnovovat nikdy. \n \nJeden den má 1440 minut. \nJeden týden má 10 080 minut. @@ -3465,7 +3465,7 @@ Zobrazená oblast: %1$s x %2$s Pro pokračování je potřeba nastavit pracovní dny Trasa mezi body Naplánovat trasu - Přidat k trase + Přidat ke stopě Zobrazit ikony startu a cíle Zvolte šířku Vyberte interval pro zobrazování značek na trase se vzdáleností nebo časem. @@ -3476,12 +3476,12 @@ Zobrazená oblast: %1$s x %2$s Importovat trasu Otevřít existující trasu Vytvořit novou trasu - Vyberte trasu k otevření. + Vyberte stopu k otevření. Hotovo Zadejte prosím název bodu Současný cílový bod na trase bude smazán. Jestliže to je poslední cíl, navigace se zastaví. Stáhnout Wikipedia mapy - Získejte informace o zájmových bodech z Wikipedie. Je to váš offline kapesní průvodce - zapněte Wikipedia plugin a užívejte si články o objektech okolo Vás. + Získejte informace o zájmových bodech z Wikipedie. Je to váš offline kapesní průvodce - zapněte modul Wikipedia a užívejte si články o objektech okolo vás. Přidaný bod nebude na mapě vidět, protože vybraná skupina je skrytá. Můžete jej najít v \"%s\". Enduro motorka Motorový skútr @@ -3493,7 +3493,7 @@ Zobrazená oblast: %1$s x %2$s Uložit jako soubor trasy Sledovat trasu Zvolte soubor trasy, kterou chcete sledovat - Zvolte soubor trasy, kterou chcete sledovat, nebo jej importujte ze zařízení. + Zvolte soubor stopy, kterou chcete sledovat, nebo jej importujte ze svého zařízení. Zvolit jinou trasu Navigovat z mé polohy k trase Bod trasy pro navigování @@ -3518,12 +3518,12 @@ Zobrazená oblast: %1$s x %2$s Omezení délky Azimut %1$s smazáno - Ke kompletnímu smazání dat o rychlostních radarech je nutný restart. + Restartovat aplikaci pro kompletní smazání dat o rychlostních radarech. Odinstalovat a restartovat Toto zařízení nemá rychlostní kamery. Inline brusle - Smazat následující cílový bod - Umožní ovládat úroveň přiblížení mapy pomocí tlačítek hlasitosti zařízení. + Smazat nejbližší cílový bod + Ovládat úroveň přiblížení mapy pomocí tlačítek hlasitosti zařízení. Tlačítka hlasitosti pro přibližování Mezní vzdálenost Navigační profil @@ -3576,7 +3576,7 @@ Zobrazená oblast: %1$s x %2$s Naposledy změněno Název: Z – A Název: A – Z - Ikony startu/cíle + Ikony startu a cíle Děkujeme za zakoupení modulu \'Vrstevnice\' Přihlásit se pomocí OAuth pro použití funkcí editace OSM Přihlásit pomocí OAuth @@ -3692,11 +3692,11 @@ Zobrazená oblast: %1$s x %2$s Úvodní panel Skrýt veřejnou dopravu Zobrazit veřejnou dopravu - Zobrazit/skrýt veřejnou dopravu + Zobrazit nebo skrýt veřejnou dopravu Tlačítko pro zobrazení nebo skrytí veřejné dopravy na mapě. - Vytvořit / upravit bod zájmu + Vytvořit nebo upravit bod zájmu Parkovací místa - Přidat / upravit oblíbený bod + Přidat nebo upravit oblíbený bod Obnovit výchozí pořadí položek Zpět k úpravám Tlačítko akce přepne mezi zvolenými profily. @@ -3722,7 +3722,7 @@ Zobrazená oblast: %1$s x %2$s Tlačítko napájení Senzor přiblížení Zvolte časový limit vypnutí obrazovky po probuzení (\"%1$s\" znamená bez časového limitu.) - Musíte přidat aspoň dva body. + Musíte přidat aspoň dva body Spravovat předplatné S vaším předplatným je problém. Klikněte na tlačítko pro přechod do nastavení předplatného v Google Play a opravte způsob platby. Předplatné OsmAnd Live skončilo @@ -3902,8 +3902,8 @@ Zobrazená oblast: %1$s x %2$s Účet Přihlašovací jméno Historie značek - Veřejná znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras. Data poskytnutá prostřednictvím API nebudou odkazovat na vaši stránku s trasou. Časová razítka bodů trasy nebudou dostupná prostřednictvím veřejného GPS API a body nebudou chronologicky seřazeny. Ostatní uživatelé si ale stále budou moci stáhnout nezpracovanou trasu z veřejného seznamu spolu se všemi časovými razítky, které obsahuje. - Soukromá znamená, že trasa se neobjeví v žádném veřejném seznamu a body trasy budou dostupném prostřednictvím veřejného GPS API bez časových razítek, ale nebudou chronologicky seřazeny. + \"Veřejná\" znamená, že trasa je veřejně dostupná ve vašich GPS trasách, ve veřejných seznamech GPS tras a také ve veřejném seznamu stop s nezpracovanými časovými razítky. Data poskytnutá prostřednictvím API nebudou odkazovat na vaši stránku s trasou. Časová razítka bodů trasy nebudou dostupná prostřednictvím veřejného GPS API a body nebudou chronologicky seřazeny. + \"Soukromá\" znamená, že trasa se neobjeví v žádném veřejném seznamu a body trasy budou dostupné prostřednictvím veřejného GPS API bez časových razítek a nebudou chronologicky seřazeny. Odeslat soubor GPX do OpenStreetMap Zadejte značky oddělené čárkou. Sledovatelná znamená, že trasa se neobjeví v žádném veřejném seznamu, ale body trasy budou dostupné prostřednictvím veřejného GPS API s časovými razítky. Ostatní uživatelé si budou moci stáhnout zpracované body z vaší trasy, které ale nebude možné přímo spojit s vámi. @@ -3942,4 +3942,10 @@ Zobrazená oblast: %1$s x %2$s Ve výchozím stavu vypnuto: běží-li OsmAnd na popředí, obrazovka se nevypne. \n \nJe-li zapnuto, OsmAnd vypne obrazovku podle systémového limitu. + Tyto akce jsou dostupné po stisknutí tlačítka “%1$s”. + Importovat nebo nahrát soubory stop + Zadejte interval ukládání pro obecný záznam trasy (aktivovaný přes widget Záznam trasy na mapové obrazovce). + Historie vyhledávání + Kajak + Motorový člun \ No newline at end of file From aefc4df036161418ff9f3438248242bcdf09b4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Tue, 17 Nov 2020 11:38:07 +0000 Subject: [PATCH 072/198] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 50.9% (1811 of 3555 strings) --- OsmAnd/res/values-nb/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index 8ccc84ede3..5863aba29d 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -1692,7 +1692,7 @@ \n \n OsmAnd utvikles aktivt, og prosjektet vårt og dets videre framdrift avhenger av finansielle bidrag for å drive utviklingen og testingen av nye funksjoner. Overvei å kjøpe OsmAnd+ eller støtte spesifikke nye funksjoner eller bidra med en generell donasjon på https://osmand.net. Last opp ditt OSM-notat anonymt eller ved å bruke din profil hos OpenStreetMap.org. - Du har ingen sporfiler ennå + Du har ingen sporfiler enda Du kan også legge til sporfiler i mappen Legg til flere… Skru på hurtigopptak @@ -1792,7 +1792,7 @@ Start nettbasert sporing Stopp nettbasert sporing Fant ikke noe. Hvis du ikke finner din region, kan du lage den selv (se https://osmand.net). - Spesifiser først en GPX-fil med et langt trykk. + Spesifiser en GPX-fil med et langt trykk først. Oppdelingsintervall Nedstigning/stigning: %1$s Tidsrom: %1$s @@ -3887,7 +3887,7 @@ Nødsfall Reise Du må legge til minst to punkter. - Sporbar betyr at sporet ikke vil vises i offentlige lister, men punkter fra det vil fremdeles ikke være tilgjengelige gjennom det offentlige GPS-API-et med tidsstempel. Andre brukere vil kun ha mulighet til å laste ned behandlede punkter fra ditt spor, noe som ikke kan tilknyttes deg direkte. + \"Sporbar\" betyr at sporet ikke vil vises i offentlige lister, men bearbeidede sporpunkter med tidsstempel (som ikke direkte kan knyttes til deg) vil være tilgjengelig gjennom nedlastinger fra det offentlige GPS-API-et. Logg inn med OpenStreetMap Bruk innlogging og passord Konto From b2c2b438c48badf8c25fcdc528cee1fefaf1d86b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1ns?= Date: Thu, 19 Nov 2020 00:21:42 +0000 Subject: [PATCH 073/198] Translated using Weblate (Galician) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-gl/strings.xml | 48 ++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml index f0d735e36c..8b24fe075a 100644 --- a/OsmAnd/res/values-gl/strings.xml +++ b/OsmAnd/res/values-gl/strings.xml @@ -753,7 +753,7 @@ Sobreposicións fluorescentes Empregar cores fluorescentes para amosar as pistas e rutas. Edición sen conexión - Empregar sempre a edición sen conexión. + Se se activa a edición sen conexión, as modificacións serán gardadas de xeito local primeiro e serán cargadas por solicitude, do contrario as modificacións serán cargadas de xeito inmediato. As modificacións nos puntos de interese (PDI) dentro da aplicación non afectan ós ficheiros dos mapas baixados, pois esas modificacións gárdanse coma un ficheiro no teu dispositivo. Estase a subir… {0} PDI/notas subidos @@ -2063,7 +2063,7 @@ Lon %2$s Número de colaboradores Número de edicións Informe para - O nome do ficheiro contén un carácter incorrecto + Caráter ilegal no nome do ficheiro Acción rápida Acción %d Pantalla %d @@ -2365,7 +2365,7 @@ Lon %2$s Engade unha parada intermedia Engade a primeira parada do percorrido Move o destino cara enriba e crea un novo - Amosar/agochar as notas do OSM no mapa. + Amosar ou agochar as notas do OSM no mapa. GPX - axeitado para exportar a JOSM ou outros editores do OSM. OSC - axeitado para exportar ó OSM. Ficheiro GPX @@ -3115,9 +3115,9 @@ Lon %2$s Muda o achegamento do mapa desprazando a roda cara arriba e abaixo. A tecla «Esc» volta á aplicación WunderLINQ. Controlar co WunderLINQ Engadir polo menos un elemento á listaxe nos axustes de \'Acción rápida\' - Esquí alpino/de descendemento + Esquí alpino e de descendemento Pistas de esquí alpino ou de descendemento e acceso a remontes mecánicos. - Esquí de travesía/nórdico + Esquí de travesía e nórdico Pistas para esquí nórdico ou de travesía. Esquí de travesía Roteiros para esquí de travesía. @@ -3385,7 +3385,7 @@ Lon %2$s Trocar %1$s e %2$s Punto de comezo Pista gardada - O nome do ficheiro está baleiro + Nome do ficheiro baleiro Reverter Un botón para facer que a pantalla se centre no punto de partida. Despois define o destino ou activa o cálculo da ruta. Amosar os nós da rede de sendas ciclistas @@ -3450,7 +3450,7 @@ Lon %2$s Nome de usuario e contrasinal Os axustes deste complemento son globais e aplícanse a todos os perfís Edición do OSM - Podes ollar todas as túas edición non subidas ou erros do OSM en %1$s. Os puntos subidos non se amosan no OsmAnd. + Podes ollar todas as túas edicións aínda non subidas ou erros do OSM en %1$s. Os puntos subidos non se amosan no OsmAnd. OSM A icona amósase mentres se navega ou se move pola pantalla. A icona amósase en asueto. @@ -3647,7 +3647,7 @@ Lon %2$s A ruta será recalculada se a distancia á localización actual é maior que o valor escollido. %1$s de %2$s Pendentes - Amosar / agochar terreo + Amosar ou agochar terreo Agochar terreo Amosar terreo Un botón que amosa ou agocha a capa do terreo no mapa. @@ -3716,11 +3716,11 @@ Lon %2$s Podes acceder a estas accións premendo no botón “%1$s”. Agochar transporte público Amosar transporte público - Amosar/agochar transporte público + Amosar ou agochar transporte público Botón que amosa ou agocha o transporte público no mapa. - Crear / Editar PDI + Crear ou editar PDI Posicións de aparcamento - Engadir / Editar favorito + Engadir ou editar favorito Restabelecer a orde dos elementos predefinidos Voltar á edición O botón de acción troca entre os perfís escollidos. @@ -3854,7 +3854,7 @@ Lon %2$s Refacer • Actualizouse a función \"Planificar ruta\": permite empregar diferentes tipos de navegación por segmento e o engadido de pistas \n -\n • Novo menú coa aparencia das pistas: escoller a cor, o grosor, amosar as frechas de dirección e as iconas de comezo/final. +\n • Novo menú coa aparencia das pistas: escoller a cor, o grosor, amosar as frechas de dirección e as iconas de inicio e final. \n \n • Melloras na visibilidade dos nós de bicicleta. \n @@ -3924,11 +3924,11 @@ Lon %2$s %s ficheiros de pista seleccionados Gravar A gravación da pista deterase ó pechar a aplicación (mediante aplicacións recentes). (A indicación de fondo do OsmAnd, desaparecerá da barra de notificacións do Android.) - Especifica o intre de gravación xeral para pistas (habilitado a través do trebello de gravación no mapa). + Especifica o intre de gravación xeral para pistas (habilitado a través do trebello de \'Gravación no mapa\'). Última modificación Nome: Z – A Nome: A – Z - Iconas de comezo/final + Iconas de inicio e fin Grazas por mercar \'Curvas de nivel\' Subscrición cobrada por período escollido. Cancélaa na AppGallery en calquera intre. O pagamento será cargado na túa conta da AppGallery no mesmo intre da confirmación da compra. @@ -3977,7 +3977,7 @@ Lon %2$s A subscrición do OsmAnd Live expirou A subscrición do OsmAnd Live foi detida A subscrición do OsmAnd Live está en espera - Público significa que a pista amosarase de xeito público na túa listaxe de pistas e nas listaxes de pistas GPS públicas. Os datos servidos a través da API non farán referencia á túa páxina de pistas. As marcaxes de tempo dos puntos da pista non estarán dispoñíbeis a través da API pública de GPS, aínda que os puntos ordénanse de xeito cronolóxico. Porén, outros usuarios poderán baixar a pista en bruto da listaxe de pistas públicas e as marcaxes de tempo que contén. + \"Público\" significa que a pista amosarase de xeito público na túa listaxe de pistas e nas listaxes de pistas GPS públicas con marcas de tempo en bruto. Os datos servidos a través da API no farán referencia á túa pácina de pistas. As marcaxes de tempo dos puntos da pista non estarán dispoñíbeis a través da API pública de GPS, aínda que os puntos son ordenados de xeito cronolóxico. Iniciar sesión no OpenStreetMap Entrar ó OpenStreetMap.org Entrar co OpenStreetMap @@ -3990,7 +3990,19 @@ Lon %2$s Historial de marcaxes Enviar ficheiro GPX ó OpenStreetMap Insire etiquetas separadas por comas. - Privado significa que a pista non aparecerá en ningunha listaxe pública, mais o conxunto de puntos seguirá estando dispoñíbel en orde cronolóxica a través da API pública de GPS e sen marcaxes de tempo. - Rastrexábel (ou trazábel) significa que a pista non aparecerá en ningunha listaxe pública pero o conxunto de puntos estarán dispoñíbeis a través da API pública de GPS e con marcaxes de tempo. Outros usuarios só poderán baixar o conxunto de puntos procesados da túa pista que non se poden asociar directamente contigo. - Identificábel significa que a pista amosarase de xeito público na túa listaxe de pistas e na listaxe de pistas GPS públicas, é dicir que outros usuarios poderán baixar a pista en bruto e asociala co teu nome de usuario. Os datos servidos a través da API de conxunto de puntos fará referencia á páxina orixinal da pista. As marcaxes de tempo dos puntos da traza estarán dispoñíbeis a través da API pública de GPS. + \"Privado\" significa que a pista non aparecerá en ningunha listaxe pública, pero o conxunto de puntos seguirá estando dispoñíbel en orde cronolóxica a través da API pública de GPS e sen marcas de tempo. + \"Rastrexábel\" (ou \"trazábel\") significa que a pista non aparece en ningunha listaxe pública, pero o conxunto de puntos procesados con marcas de tempo (non se poden asociar directamente contigo) estarán dispoñíbeis a través da API pública de GPS. + \"Identificábel\" significa que a pista amosarase de xeito público na túa listaxe de pistas e na listaxe de pistas GPS públicas, é dicir que outros usuarios poderán baixar a pista en bruto e asociala co seu nome de usuario. Os datos servidos a través da API de conxunto de puntos fará referencia á páxina orixinal da pista. + Pechar nota do OSM + Comentar nota do OSM + Podes iniciar a sesión co método seguro do OAuth ou empregar o nome de usuario e contrasinal. + Engadir imaxe + Rexistrarse no +\nOpenPlaceReviews.org + As imaxes son fornecidas polo proxecto de datos abertos OpenPlaceReviews.org. Para subir imaxes tes que rexistrarte no sitio web. + Crear nova conta + Xa teño unha conta + Historial de procura + Caiac + Lancha a motor \ No newline at end of file From 1bbaf4fed819686fa29f51d99f68378ee0e25105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1ns?= Date: Wed, 18 Nov 2020 23:55:29 +0000 Subject: [PATCH 074/198] Translated using Weblate (Galician) Currently translated at 100.0% (3830 of 3830 strings) --- OsmAnd/res/values-gl/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-gl/phrases.xml b/OsmAnd/res/values-gl/phrases.xml index fece900054..bc344c6287 100644 --- a/OsmAnd/res/values-gl/phrases.xml +++ b/OsmAnd/res/values-gl/phrases.xml @@ -796,7 +796,7 @@ Lámpadas eléctricas Poliéster Escola - Universidade + Educación superior Pediatría Tiro con arco Salón de tiro From da2db5ebe2d7afd5a14457a6a92fc346c1c880c0 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Tue, 17 Nov 2020 00:03:05 +0000 Subject: [PATCH 075/198] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 35 +++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 802205f9e0..75fe84842c 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -2389,7 +2389,7 @@ \n O plugin de mapas de ski Skiing OsmAnd permite que você veja pistas de ski com nível de complexidade e algumas informações adicionais, como localização de elevadores e outras facilidades. Buffer de tempo para rastreamento on-line O nome contém muitas letras maiúsculas. Continuar\? - O nome do arquivo contém caracteres ilegais + Caráter ilegal no nome do arquivo Ação rápida Ação %d Tela %d @@ -2551,7 +2551,7 @@ \n Laociano Mostrar notas encerradas - Mostrar/ocultar notas OSM no mapa. + Mostrar ou ocultar notas OSM no mapa. Arquivo GPX Arquivo OSC Selecione o tipo de arquivo @@ -3078,9 +3078,9 @@ Altere o zoom do mapa rolando a roda para cima e para baixo. Escape retorna para o aplicativo WunderLINQ. Use o WunderLINQ para controle Adicionar ao menos um item à lista nas configurações de \'Ação rápida\' - Esqui alpino/de declínio + Esqui alpino e downhill Pistas de esqui alpino ou de declínio e acesso a teleféricos. - Cross country/esqui nórdico + Cross country e esqui nórdico Trilhas para esqui nórdico ou cross-country. Turismo de esqui Rotas para passeios de esqui. @@ -3359,7 +3359,7 @@ Ponto de partida Estima a hora de chegada de tipos de estradas desconhecidas e limita a velocidade de todas as estradas (pode afetar o roteamento) Trilha salva - O nome do arquivo está vazio + Nome de arquivo vazio Reverter Um botão para fazer com que a tela centralize o ponto de partida. Em seguida, solicitará para definir o destino ou acionar o cálculo da rota. Mostrar os nós da rede de ciclovias @@ -3569,7 +3569,7 @@ Sombras de relevo %1$s de %2$s Encostas - Mostrar / ocultar terreno + Mostrar ou ocultar terreno Ocultar terreno Mostrar terreno Um botão para mostrar ou ocultar a camada do terreno no mapa. @@ -3686,11 +3686,11 @@ Você pode acessar essas ações tocando no botão “%1$s”. Ocultar transporte público Mostrar transporte público - Mostrar/ocultar transporte público + Mostrar ou ocultar transporte público Botão que mostra ou oculta o transporte público no mapa. - Criar / Editar POI + Criar ou editar POI Posições de estacionamento - Adicionar / Editar favorito + Adicionar ou editar favoritos Restaurar ordem de itens padrão Voltar à edição Retomar @@ -3867,7 +3867,7 @@ Nome do arquivo %s arquivos de trilha selecionados Pausará o registro de rastreamento quando o aplicativo for encerrado (por meio de aplicativos recentes). (A indicação de uso em segundo plano do OsmAnd desaparece da barra de notificação do Android.) - Especifique o intervalo de registro para a gravação geral da trilha (habilitado por meio do widget Gravação de viagem no mapa). + Especifique o intervalo de registro para a gravação geral da trilha (ligado por meio do widget de \'gravação de viagem\' no mapa). Pausar gravação de viagem Retomar a gravação da viagem Padrão do sistema @@ -3883,7 +3883,7 @@ Refazer "• Função de planejamento de rota atualizada: permite o uso de diferentes tipos de navegação por segmento e a inclusão de trilhas \n -\n • Novo menu de aparência para trilhas: selecione cor, espessura, setas de direção de exibição, ícones de início / término +\n • Novo menu de aparência para trilhas: selecione cor, espessura, setas de direção de exibição, ícones de início e término \n \n • Melhor visibilidade dos nós da bicicleta. \n @@ -3899,7 +3899,7 @@ Última modificação Nome: Z – A Nome: A – Z - Ícones de início/término + Ícones de início e término Obrigado por adquirir \'curvas de nível\' Assinatura cobrada por período selecionado. Cancele no AppGallery a qualquer momento. O pagamento será cobrado em sua conta AppGallery na confirmação da compra. @@ -3960,10 +3960,10 @@ Histórico de marcadores Enviar arquivo GPX para OpenStreetMap Insira as etiquetas separadas por vírgula. - Público significa que o traçado será mostrado publicamente em Seus traços de GPS e em listas públicas de traços de GPS. Os dados fornecidos por meio da API não fazem referência à sua página de rastreamento. Os carimbos de data/hora dos pontos de rastreamento não estão disponíveis por meio da API GPS pública e os pontos não são ordenados cronologicamente. No entanto, outros usuários ainda podem fazer o download do rastreamento bruto da lista pública de rastreamento e de quaisquer carimbos de data/hora contidos nela. - Privado significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de trilha dele ainda estarão disponíveis por meio da API GPS pública sem carimbos de data/hora, mas não serão ordenados cronologicamente. - Identificável significa que o traço será mostrado publicamente em Seus traços de GPS e em listas públicas de traços de GPS, ou seja, outros usuários poderão fazer download do traço bruto e associá-lo ao seu nome de usuário. Os dados fornecidos por meio da API de pontos de trilha farão referência à sua página de rastreamento original. Os carimbos de data/hora dos pontos de rastreamento estão disponíveis por meio da API GPS pública. - Rastreável significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de trilha dele ainda estarão disponíveis por meio da API GPS pública com carimbos de data/hora. Outros usuários só poderão baixar pontos de trilha processados de seu trace, que não podem ser associados a você diretamente. + \"Público\" significa que o traçado é mostrado publicamente em seus traços GPS e em listagens públicas de traços GPS e na lista pública de traços com carimbos de data/hora em formato bruto. Os dados fornecidos por meio da API não fazem referência à sua página de rastreamento. Os carimbos de data/hora do ponto de rastreamento não estão disponíveis por meio da API GPS pública e os pontos de rastreamento não são ordenados cronologicamente. + \"Privado\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de trilha dele em ordem não sincronizada estão disponíveis por meio da API GPS pública sem carimbos de data/hora. + \"Identificável\" significa que o traço será mostrado publicamente em Seus traços de GPS e em listas públicas de traços de GPS, ou seja, outros usuários poderão fazer download do traço bruto e associá-lo ao seu nome de usuário. Os dados de pontos de rastreamento com carimbo de data/hora públicos da API GPS servidos por meio da API de pontos de rastreamento farão referência à sua página de rastreamento original. + \"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de trilha processados com carimbos de data/hora (que não podem ser associados a você diretamente) são feitos por meio de downloads da API GPS pública. Fechar nota do OSM Comentário de nota do OSM Você pode entrar usando o método OAuth seguro ou usar sua entrada e senha. @@ -3973,4 +3973,7 @@ As fotos são fornecidas pelo projeto de dados abertos do OpenPlaceReviews.org. Para carregar suas fotos você precisa se inscrever no site. Criar nova conta Eu já tenho uma conta + Histórico de busca + Caiaque + Lancha \ No newline at end of file From 441afb44bda9de116826fd65a7872edce1323ac9 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Wed, 18 Nov 2020 12:17:05 +0000 Subject: [PATCH 076/198] Translated using Weblate (Esperanto) Currently translated at 99.5% (3539 of 3555 strings) --- OsmAnd/res/values-eo/strings.xml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index ea11a3cdb0..2246163a37 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -3966,15 +3966,18 @@ Enigu etikedojn disigitajn per komo (,). “Publika” signifas, ke la GPX‑spuro estos publika videbla en “miaj spuroj” kaj en la publika listo de spuro (GPS‑spuroj). Datumoj liverataj per la API ne ligos al paĝo de via spuro. Tempindikoj de punktoj ne estos akireblaj per la publika API GPS, kaj la punktoj ne estos ordigitaj laŭtempe. Tamen aliaj uzantoj plue povos elŝuti la nepritraktitan spuron el la publika listo de spuroj kune kun ĉiuj ampleksitaj tempindikoj. “Privata” signifas, ke la GPX‑spuro montriĝos en neniu publika listo, sed ĝiaj punktoj plue estos akireblaj per la publika API GPS sen tempindikoj, sed tiuj punktoj estos ordigitaj laŭtempe. - “Identigebla” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj), aliaj uzantoj povos elŝuti vian nepritraktitan spuron kaj ligi ĝin al via uzantnomo. Datumoj liveritaj per la API de spuroj ligos al originala paĝo de via spuro. Tempindikoj de la spuro estos akireblaj per la publika API GPS. - “Spurebla” signifas, ke la GPX‑spuro ne estos montrata en publikaj listoj, sed punktoj el ĝi plue estos akireblaj per la publika API GPS kune kun tempindikoj. Aliaj uzantoj povos elŝuti nur pritraktitajn punktojn el via spuro, kiuj ne povos esti senpere ligitaj al vi. + “Identigebla” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj), aliaj uzantoj povos elŝuti vian nepritraktitan spuron kaj ligi ĝin al via uzantnomo. Publikaj datumoj kun tempindikoj el la API GPS akireblaj per la API de spur‑punktoj indikos al originala paĝo de via spuro. + “Spurebla” signifas, ke la GPX‑spuro ne montriĝos en publikaj listoj, sed pritraktitaj punktoj kun tempindikoj el ĝi (kiuj ne povos esti senpere ligitaj al vi) estos elŝuteblaj per la publika API GPS. Fermi OSM-rimarkon Komenti OSM-rimarkon - Vi povas ensaluti per l sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. + Vi povas ensaluti per la sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. Aldoni foton Registri ĉe \nOpenPlaceReviews.org Fotoj estas liverataj de la malferm‑datuma projekto OpenPlaceReviews.org. Por alŝuti viajn fotojn, vi devas registri ĉe la retejo. Krei novan konton Mi jam havas konton + Serĉi en historio + Kajako + Motorboato \ No newline at end of file From e7ef5e9ba2dd8b8b47d069a3aad8a0228d0324ec Mon Sep 17 00:00:00 2001 From: abdullah abdulrhman Date: Wed, 18 Nov 2020 19:32:48 +0000 Subject: [PATCH 077/198] Translated using Weblate (Arabic) Currently translated at 93.5% (3582 of 3830 strings) --- OsmAnd/res/values-ar/phrases.xml | 668 ++++++++++++++++++++++++++++++- 1 file changed, 646 insertions(+), 22 deletions(-) diff --git a/OsmAnd/res/values-ar/phrases.xml b/OsmAnd/res/values-ar/phrases.xml index d8372de23f..8581321bd9 100644 --- a/OsmAnd/res/values-ar/phrases.xml +++ b/OsmAnd/res/values-ar/phrases.xml @@ -382,7 +382,7 @@ الوصول إلى المراحيض بالكراسي المتحركة: نعم الوصول إلى المراحيض بالكراسي المتحركة: لا الوصول إلى دورة المياة: العملاء فقط - طاولة تغيير الحفائض + طاولة تغيير حفائض الأطفال لا توجد طاولة تغيير الحفاض غرفة تغيير الحفاضات الوقت المحدد لوقوف السيارات @@ -563,7 +563,7 @@ مساحة تجارية حقل عنب مزرعة - مرعى أو مرج + مرعى/مرج/روضة قناة مراقبة مرصد @@ -1396,7 +1396,7 @@ كافتيريا الخدمات نوع الدراجة النارية - موحد + قياسية النوع محطة Aerialway رافعة بالكرسي @@ -1437,7 +1437,7 @@ مسار الزحلقة الحيوانات المسموح بها الغرض - الوجهة: مدخل + الاتجاه: المدخل قوارب مأجرة بئر نفط شبكات الكريكيت @@ -1569,32 +1569,32 @@ دولفين مكان لتغذية الحيوان قدرة تحمل المكان للماء: متين - بروز - تماس - التماس غير مقبول + بروز طبقات الأرض (تفجر أرضي) + تلامس + لا يتم قبول التلامس خطر خطر مواد نووية - خطر التآكل - خطر الانهيار - طريق زلقة + خطر الهيار/التعرية الأرضية + خطر الانهيار الجليدي + طريق زلق خطر فيضانات حقل الغام - أطلال + أطلال/أنقاض/خرائب فئات الترخيص تل تصليح أحذية نعم فقط - خط أنابيب فرعية - الإرسال + محطة فرعية لخطوط الأنابيب + ‌الإرسال/الدفع التوزيع توزيع ثانوي صناعية - مرحلة انتقالية - جر + ناقل + تغذية النقل (المترو/القطار ..) محول التعويض - ضغط + الضغط قياس صمام مجموعة صمامات @@ -1602,14 +1602,14 @@ ميدان تجمع إنتاج حلويات متجر جملة - مختبرات طبية + مختبر طبي التبرع بالدم قصص مصورة أثري ديني أكاديمي أطفال - جزر مرجانية + جزيرة مرجانية جهاز ارسال رسوم الكترونية رعاية أطفال معلم طبيعي @@ -1618,7 +1618,7 @@ قطار باص مترو انفاق - HOV + مركبات فيها أكثر من شخص ترام عبّارة مصدر الطاقة: الكتلة الحيوية @@ -2170,7 +2170,7 @@ رطب صعب المشي فيه،قصب اهوار مستنقع - مرعى أو مرج رطب طوال العام + مرعى/مرج رطب طوال العام الطفة البركانية القصدير حجر @@ -2179,7 +2179,7 @@ النوع: ساحة الطوب النوع: زراعة النوع: متلف/محطم السيارات - النوع: مستودع + النوع: مخزن النوع: مصفاة النوع: خشب النوع: صناعة الغاز @@ -2620,7 +2620,7 @@ النوع: قطع الصخور النوع: رمل النوع: قبر حرب - رِجّم (صخور مركومة) علامة + رِجْم، رجوم (صخور مركومة) عتبات مختلفة أو مائلة عتبات غير متساوية عتبات متساوية @@ -2961,4 +2961,628 @@ تركي عالمي تايلندي + برج رادار + (منطقة وقوف جانب الطريق) + سقيفة + على السطح + بنك ميغروس + بطاقة ما بعد التمويل + السحب النقدي: البطاقات الأجنبية + السحب النقدي: الحد الأدنى للشراء + رسوم السحب النقدي: لا + رسوم السحب النقدي: نعم + السحب النقدي: لا يتطلب الشراء + السحب النقدي: لابد من الشراء + عملة السحب النقدي + حد السحب النقدي + نوع السحب النقدي: الدفع الذاتي + نوع السحب النقدي: الدفع + مشغل السحب النقدي + سحب نقدي + السحب النقدي: نعم + العناية بالحيوانات الأليفة + شحن + نجار/صانع أثاث + مخبز + مبلط/تبليط/أرضيات + نجار + مقاولات/بناء + الغذاء الصحي + مدخل القبو + المعينه/المحدد + نعم + المعينه/المحدد + نعم + للتسليم والتوصيل فقط + المعينه/المحدد + للوصول للوجهة فقط + نعم + المعينه/المحدد + نعم + المعينه/المحدد + نعم + المعينه/المحدد + للوصول للوجهة فقط + نعم + المعينه/المحدد + نعم + المعينه/المحدد + نعم + المعينه/المحدد + نعم + المعينه/المحدد + نعم + خاص مسموح بدخوله + المعينه/المحدد + نعم + السماح بدخول المعاقين: لا + الخيول غير مسموح بها + مسموح بالخيول + السماح بدخول مركبات الأجرة: لا + السماح بدخول مركبات الأجرة: محدد + السماح بدخول مركبات الأجرة: نعم + السماح بدخول المركبات الزراعية: لا + السماح بدخول المركبات الزراعية: نعم + السماح بدخول الزلاجات الآلية: لا + السماح بدخول الزلاجات الآلية: خاص + السماح بدخول الزلاجات: لا + السماح بدخول الزلاجات: نعم + السماح بدخول مدربي القيادة: لا + السماح بدخول مدربي القيادة: نعم + السماح بدخول حافلات السياح: نعم + السماح بدخول حافلات السياح: لا + السماح بدخول حافلات السياح: محدد + السماح بدخول الحافلات: لا + السماح بدخول مركبات الخدمات العامة: لا + السماح بدخول مركبات الخدمات العامة: محدد + السماح بدخول مركبات الخدمات العامة: لا + السماح بدخول المقطورات: لا + السماح بدخول البيوت المتنقلة: لا + السماح بدخول الكرفانات: لا + السماح بدخول المشاة: للعملاء فقط + السماح بدخول المشاة: للعبور إلى الوجهة فقط + السماح بدخول المشاة: لا + السماح بدخول المشاة: خاص + السماح بدخول المشاة: نعم + السماح بدخول الخيول: الخاصة بالغابات + السماح بدخول الخيول: للعبور إلى الوجهة + السماح بدخول الخيول: خاص + السماح بدخول الدراجات: للعملاء فقط + السماح بدخول الدراجات: للعبور إلى الوجهة + السماح بدخول الدراجات: بدون قيادتها (سحبها مشياً) + السماح بدخول الدراجات:خاص + السماح بدخول الدراجات الآلية:لا + السماح بدخول الدبابات الصغيرة:لا + السماح بدخول الدراجات النارية:لا + السماح بدخول الدراجات النارية:خاص + السماح بدخول المركبات الصغيرة:لا + السماح بدخول المركبات الكبيرة:غير ملائم + السماح بدخول المركبات الكبيرة:غير مناسب + السماح بدخول المركبات الكبيرة:الزراعية + السماح بدخول المركبات الكبيرة:لا + السماح بدخول المركبات الكبيرة:خاص + السماح بدخول المركبات الآلية:الزراعية + السماح بدخول المركبات الآلية:الخاصة بالغابات + السماح بدخول المركبات الآلية: للتسليم فقط + السماح بدخول المركبات الآلية:العسكرية + السماح بدخول المركبات الآلية:العملاء فقط + السماح بدخول المركبات الآلية:للوصول إلى الوجهة فقط + السماح بدخول المركبات الآلية:لا + السماح بدخول المركبات الآلية:خاص + السماح بدخول المركبات الآلية:نعم + السماح بدخول السيارات: الخاصة بالغابة + السماح بدخول السيارات: العملاء + ‏‏ خاص مسموح بدخوله + خاص مسموح بدخوله + السماح بدخول المشاة: خاص مسموح بدخوله + السماح بدخول الخيول: خاص مسموح بدخوله + السماح بدخول الدرجات: خاص مسموح بدخوله + السماح بدخول المركبات الآلية: خاص مسموح بدخوله + السماح بدخول السيارات: خاص مسموح بدخوله + السماح بدخول السيارات: للعبور للوجهة + السماح بدخول السيارات: لا + السماح بدخول السيارات:خاص + السماح بدخول السيارات: + السماح بدخول المركبات: الخاصة بالغابات + السماح بدخول المركبات: لتسليم الطلبات + السماح بدخول المركبات: العسكرية + السماح بدخول المركبات: العملاء فقط + السماح بدخول المركبات: خاص مسموح بدخوله + السماح بدخول المركبات: للعبور للوجهة + السماح بدخول المركبات: لا + السماح بدخول المركبات: خاص + السماح بدخول المركبات: نعم + مكتب سيارات الأجرة + رسوم على طاولة تغيير الأطفال: لا + رسوم على طاولة تغيير الأطفال: نعم + عدد طاولات تغيير الأطفال + موقع طاولة تغيير للأطفال: دورة مياة للجنسين + موقع طاولة تغيير للأطفال: دورة مياة النساء + موقع طاولة تغيير للأطفال: دورة مياة الرجال + موقع طاولة تغيير للأطفال: غرفة + طاولة تغيير للأطفال: محدودة (غير رسمية) + طاولة تغيير للأطفال: لا + طاولة تغيير للأطفال: نعم + الموقع (وصف المكان) + الخطر: التلوث + الخطر: حقل ألغام + الخطر: انهيار جليدي + الخطر: فيضان + الخطر: نووي + الخطر: سقوط الصخور + خطر: تآكل/تعرية + صندوق الطوارئ + كائن محذوف + شعلة الغاز ؛ مداخن مضيئة + 3B* + 3B + 3A* + 3A + 2B* + 2B + 2A* + 2A + 1B* + 1B + 1A* + 1A + n/c* + n/c + شوكو + نيما 14-50 + نيما 14-30 + نيما 5-20 + نيما 5-15R + تسلا رودستر + شاحن تسلا + معيار تسلا + شاديمو + النوع 3 + النوع 2 كومبو + النوع 2 + النوع 1 كومبو + النوع 1 + CEE الأحمر 125A + CEE الأحمر 64 أ + CEE الأحمر 32A + CEE الأحمر 16A + CEE الأزرق + متجر قوارب + متجر موقد/مشب + متجر زراعي + أغذية مجمدة + النوع: مرعى + النوع: انتقالي + النوع: دائم + النوع: زراعي + قطر القمة + محيط + طرق التسلق + تسلق قمة الجذوع: لا + تسلق قمة الجذوع: نعم + اتجاه الجدار: شمال غرب + اتجاه الجدار: غرب + اتجاه الجدار: جنوب غرب + اتجاه الجدار: جنوب + اتجاه الجدار: جنوب شرق + اتجاه الجدار: شرق + اتجاه الجدار: شمال شرق + اتجاه الجدار: شمال + المراسي الثابتة: لا + المراسي الثابتة: نعم + جودة التسلق: هشة + جودة التسلق: ثابت + تسلق الصخور: الرخام السماقي + تسلق الصخور: النيس + تسلق الصخور: الكوارتز + تسلق الصخور: الحجر الرملي + تسلق الصخور: الجرانيت + تسلق الصخور: الحجر الجيري + طول الحد الأقصى للتسلق + طول الحد الأدنى للتسلق + طول مساحة التسلق + التسلق الفردي في المياه العميقة: لا + التسلق الفردي في المياه العميقة: نعم + مختلط: لا + مختلط: نعم + الجليد: لا + الجليد: نعم + طرق متعددة : لا + طرق متعددة: نعم + تقليدي: لا + تقليدي: نعم + حبل علوي: لا + حبل علوي: نعم + بولدرينغ: لا + بولدرينغ: نعم + الرياضة: لا + الرياضة: نعم + الرمز البريدي + صندوق الرسائل + مستودع + حجم الخريطة: المنطقة + حجم الخريطة: المدينة + حجم الخريطة: الموقع + نوع الخريطة: الطبوغرافية التي توضح معالم الاتجاهات + نوع الخريطة: مخطط + نوع الخريطة: طبوغرافية + مخرج محطة الشحن + التيار/أمبير + رسوم وقوف السيارات: لا + رسوم وقوف السيارات: نعم + شاحنة: لا + شاحنة: نعم + المقبس: CEE الأحمر 32A: التيار + المقبس: CEE الأحمر 64A: التيار + ‍المقبس: CEE الأحمر 125A: التيار + مأخذ التوصيل: النوع 1: التيار + مأخذ التوصيل: نوع 1 التحرير والسرد: التيار + مأخذ التوصيل: النوع 2: التيار + المقبس: نوع 2 التحرير والسرد: التيار + مأخذ التوصيل: النوع 3: التيار + المقبس: CHAdeMO: التيار + المقبس: تيسلا رودستر: التيار + المقبس: نيما 14-50: التيار + المقبس: CEE الأحمر 16A: التيار + المقبس: CEE الأزرق: التيار + سكوتر: لا + سكوتر: نعم + الدراجة: لا + الدراجة: نعم + السيارة: لا + السيارة: نعم + المقبس: AS / NZS 3112: الإخراج + المقبس: AS / NZS 3112: التيار + المقبس: AS / NZS 3112 + المقبس: BS 1363: الإخراج + مأخذ التوصيل: BS 1363: التيار + المقبس: BS 1363 + المقبس: شوكو: الإخراج + المقبس: Schuko: التيار + المقبس: شوكو + المقبس: نيما 14-50: الإخراج + المقبس: نيما 14-30 + المقبس: نيما 14-30: الإخراج + المقبس: نيما 14-30: التيار + المقبس: نيما 14-30 + المقبس: نيما 5-20: الإخراج + المقبس: نيما 5-20: التيار + المقبس: نيما 5-20 + المقبس: نيما 5-15R: الإخراج + المقبس: نيما 5-15R: التيار + المقبس: نيما 5-15R + المقبس: تسلا رودستر: الإخراج + المقبس: تسلا رودستر + المقبس: تسلا شاحن: الإخراج + المقبس: تسلا شاحن: التيار + المقبس: تسلا سوبر تشارج + المقبس: معيار تسلا: الإخراج + المقبس: معيار تسلا: التيار + المقبس: معيار تسلا + مأخذ التوصيل: CHAdeMO: الإخراج + المقبس: شاديمو + مأخذ التوصيل: النوع 3: الإخراج + المقبس: النوع 3 + المقبس: النوع 2 التحرير والسرد: الإخراج + المقبس: نوع 2 كومبو + مأخذ التوصيل: نوع 2: الإخراج + المقبس: النوع 2 + المقبس: نوع 1 التحرير والسرد: الإخراج + المقبس: نوع 1 كومبو + مأخذ التوصيل: النوع 1: الإخراج + المقبس: النوع 1 + المقبس: CEE الأحمر 125A: الإخراج + المقبس: CEE الأحمر 125A + المقبس: CEE الأحمر 64A: الإخراج + المقبس: CEE الأحمر 64A + المقبس: CEE الأحمر 32A: الإخراج + المقبس: CEE الأحمر 16A + المقبس: CEE الأحمر 16A: الإخراج + المقبس: CEE الأحمر 16A + المقبس: CEE الأزرق: الإخراج + المقبس: CEE الأزرق + عائلات متعددة + العائلة + المجتمع + مياه معبأة + خزان ماء + نقل المياه بالشاحنات + الثقب + مضخة + المياه الجارية + خط انابيب + بئر ماء + أكواتابس + التناضح العكسي + الكلور + بدون + نقطة GPX + الغاز الطبيعي المسال + متجر البندق + خلية نحل + الجدول الزمني + في الوقت الحقيقي + تأخير + نعم + لوحة المغادرين: لا + مصعد + كتلة المدينة + محافظة + صندوق العطايا + أسهم: لا + نعم + نعم + الاهتزاز: لا + حالة المضخة: شعاع مفقود + شفط + مضغوط + مياه جوفية + أنابيب + شبكة تعبئة مياه الشرب + إعادة تعبئة مياه الشرب:لا + نعم + عائق + مستوى الماء: أقل من مستوى الماء + مستوى الماء: فوق متوسط مستوى الماء + مستوى الماء: عائم + مستوى الماء: فيضانات + منسوب الماء: متقاذف/متلاطم + مستوى الماء: يغطي + مستوى الماء: جاف + مستوى الماء: مغمور + مستوى الماء: جزء مغمور + غير صحيح + بدائي + متباين اللون + فقط عندما يسمح بالمشي + لا + نعم + نوع الكشك + كشك + لا + نعم + قاعدة الصيد + رقم مرجع الزحلقة + مركز البولينج + متجر الأمن + إنقاذ الجبال + بينتبول (كرة الطلاء) + دراجة الشبح + عدد الانفجارات + خامل + نشط + في سبات + منطفئ/خامد + آخر ثوران بركاني + طينيه + قبة الحمم البركانية + فوه بركانيه كبيرة + لكن + درع + ستراتوفوكانو + سكوريا + الرابط + أماكن لوقوف السيارات + قبر + جنس المجتمع: ذكر + جنس المجتمع: أنثى + لا + نعم + حمام القدم + بحيرة + نهر + حراري + حمام + أونسن + ينبوع ساخن + بوستبنك + جيروكارد + قدرة تحمل المكان للماء: للطوارئ + معطل + يحتاج إلى صيانة + مقيد + مغلق + مفتوح + الرؤية: المنطقة (أعلى من 50 متر) + الرؤية: الشارع (10-50 متر) + الرؤية: منزل (10 متر) + الموقع: المدخل + الموقع: الجدار + الموقع: الجسر + الموقع: كشك + الموقع: منصة + الموقع: داخلي + الموقع: في الهواء الطلق + الموقع: السطح + الموقع: السقف + الموقع: في الهواء + الموقع: فوق الأرض + الموقع: تحت الماء + الموقع: تحت الارض + شبكة معدنية + DecoTurf + العشب الصناعي + طرطان + طين + منطقة جبلية + أخدود/تلعة + الخدمات الاجتماعية + الضمان الاجتماعي + أرشيف + الشبكة + كانوي: لا + كانوي: نعم + زوارق الكاياك: لا + زوارق الكاياك: نعم + زورق: لا + زورق: نعم + المراكب الشراعية: لا + المراكب الشراعية: نعم + جيتسكي: لا + جيتسكي: نعم + الدواسات: لا + الدواسات: نعم + المراكب: لا + المراكب: نعم + القوارب: لا + القوارب: نعم + تأجير قوارب + أسرة/سرير + الحجز: للأعضاء فقط + الحجز: لا + الحجز: نعم + الحجز المسبق: موصى به + الحجز المسبق: مطلوب + غرفة الشتاء: لا + غرفة الشتاء: نعم + الاتجاه: لأسفل + اتجاه: لأعلى + الاتجاه: عكس اتجاه عقارب الساعة + الاتجاه: اتجاه عقارب الساعة + الاتجاه: للخلف + الاتجاه: إلى الأمام + الاتجاه: الشمال والشمال الغربي + الاتجاه: شمال غربي + الاتجاه: الغرب والشمال الغربي + الاتجاه: الغرب + الاتجاه: الغرب والجنوب الغربي + الاتجاه: جنوب غربي + الاتجاه: الجنوب والجنوب الغربي + الاتجاه: الجنوب + الاتجاه: جنوب-جنوب شرق + الاتجاه: جنوب شرق + الاتجاه: شرق وجنوب شرق + الاتجاه: شرق + الاتجاه: شرق - شمال شرق + الاتجاه: شمال شرقي + الاتجاه: الشمال والشمال الشرقي + الاتجاه: شمال + ميناء فضائي + إطلاق السراح: لا + إطلاق السراح: نعم + التبني: لا + التبني: نعم + مالك + مزدوج + الطرق الوعره + المروحيه + دراجة رياضية + سكوتر + ملابس الدراجات النارية: لا توجد + ملابس الدراجات النارية + إطارات: لا + اطارات + قطع غيار: لا + قطع غيار + إصلاح: لا + إصلاح + تأجير: لا + تأجير + المبيعات: مستعملة + المبيعات: نعم ، مستعملة + مبيعات: لا + مبيعات + منصة + زواحف + صقور + مطير (قفص) + طيور + حديقة سفاري + سياج + حديقة حيوانات برية + حديقة الحيوانات الأليفة + طوق النجاة + مدرسة لغة + مخيم للأطفال + إصلاح الإلكترونيات: الهاتف + إصلاح الإلكترونيات: الأجهزة + إصلاح الإلكترونيات: أجهزة الكمبيوتر + مكتب تجهيزات الطاقة + نعم + مساحة عمل مشتركة + محطة الشحن + البناء: مخفي + البناء: قبة + البناء: طبق + البناء: قائم بذاته + البناء: شبكة فولاذية + النوع: إسطبل مفتوح + النوع:مربط خيول + كومة فحم + متجر الأجهزة + تاريخ الانتهاء + صخرة + دورة + إلكتروني + إبرة + دفتر ملاحظات + رمز + نقطة الختم + نقطة تفتيش للمشاة/الهايكنق + متوسط الميلان + أدنى نقطة + أعلى نقطة + اللسان الجليدي + بقايا + الجرف + صخرة + انهيار الجليد + معلقة + جبل + مياه المد + منفذ + وادي + هضبة + الحقل الجليدي + الغطاء الجليدي + الصعوبة + رقم الكابل + فيا فيراتا (مسار الحديد) + مغامرة التسلق + المسار الإنزلاقي + كفرات/جنوط + الإطارات + إصلاح مكاين/محركات + إصلاح قير + ميزان/وزن أذرعة ومقصات + شكمان/كاتم صوت/دبات + تصليح شاحنات ومعدات ثقيلة + زجاج + الكهربائية + سمكرة وتعديل جسم السيارة + تبريد/مكيفات + بطاريات + قطع غيار السيارات + تشخيص/فحص + مبيعات السيارات الجديدة + فرامل + مبيعات السيارات المستعملة + تغيير زيت + إصلاح السيارات + مكتب مرافق المياه + شواية: نعم + نقطة تسليم المحل + اسم منحدرات النهر + فخار + متجر الأرضيات + منخفض + متوسط + عالي + منخفض + متوسط + عالي + منخفض + متوسط + عالي + منخفض + متوسط + عالي + منخفض + متوسط + عالي + منخفض + متوسط + عالي + AS/NZS 3112 + BS 1363 \ No newline at end of file From 8379b2bbd714f447595b6b53eef50d3774b86f1e Mon Sep 17 00:00:00 2001 From: Softmap Date: Tue, 17 Nov 2020 21:22:14 +0000 Subject: [PATCH 078/198] Translated using Weblate (Arabic) Currently translated at 93.5% (3582 of 3830 strings) --- OsmAnd/res/values-ar/phrases.xml | 74 ++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/OsmAnd/res/values-ar/phrases.xml b/OsmAnd/res/values-ar/phrases.xml index 8581321bd9..bfb222313c 100644 --- a/OsmAnd/res/values-ar/phrases.xml +++ b/OsmAnd/res/values-ar/phrases.xml @@ -3585,4 +3585,78 @@ عالي AS/NZS 3112 BS 1363 + طاولة نزهة + وجهة نظر + منطقة دينية + الوصول إلى الإنترنت: رسوم مفروضة + الوصول إلى الإنترنت: نعم + الوصول إلى الإنترنت: خدمة + الوصول إلى الإنترنت: عام + ولوج الإنترنت: سلكي + "ولوج الإنترنت: terminal" + ولوج الإنترنت: wlan + ماهايانا + ماروني + شينجون شو + ارثوذكسي قبطي + موحد + الأرثوذكسية الإثيوبية التوحيدية + الأرثوذكسية الرومانية + عالم + الأرثوذكسية الجورجية + كنيسة المسيح المتحدة + كنيسة المسيح + قديسي اليوم الأخير + اصلاح + رسولي + رسولي أرميني + روحاني + الأرثوذكسية الصربية + المؤمنون القدامى + تجمعي + ناصري + سبتي + غير طائفي + تجميعات الإله + الأرثوذكسية البلغارية + كواكر + مينونايت + توحيد + كنيسة إغليسيا ني كريستو + جيش الخلاص + كنيسة اسكتلندا + الكنيسة الإصلاحية الموحدة + التبت + كاثوليكي يوناني + متحد + الأسقفية + كنيسة إنجلترا + رسولي جديد + سبتي (مؤمن برجوع المسيح في اليوم السابع) + تم إصلاحه + الأرثوذكسية اليونانية + شهود يهوه + المورمون + الأنجليكانية + الزرادشتية + ديانة تينريكيو اليابانية + علم السايونتولوجيا + البهائية + الديانة الجاينية الهندية + التوحيد الكوني + قطار (سياحي) + أرجوحة ملاهي دوارة + التزحلق الصيفي + قطار الملاهي + متاهة + دائري + عجلة فيريس/ملاهي + حيوان (جذب) + جولة تسلية + شيء سياحي + جذب سياحى + منجم تاريخي + حطام سفينة + حجر الشاهد القائم الروني + دبابة تاريخية \ No newline at end of file From 92e014aa40f23e2642f3e3ecd4212cd61ad7c2ea Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 18 Nov 2020 19:59:14 +0000 Subject: [PATCH 079/198] Translated using Weblate (Azerbaijani) Currently translated at 53.8% (1914 of 3555 strings) --- OsmAnd/res/values-az/strings.xml | 86 ++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-az/strings.xml b/OsmAnd/res/values-az/strings.xml index dfafcf937d..42fe8796e1 100644 --- a/OsmAnd/res/values-az/strings.xml +++ b/OsmAnd/res/values-az/strings.xml @@ -1700,8 +1700,8 @@ Proqramı növbəti dəfə başlatdığınızda qrup yox olacaq. Xəritədə oxları göstər Xəritə işarələrindən sil - azalan - artan + Z-A + A-Z Əlavə edildi Sırala: Bütün xəritə işarələri tarixçəyə daşındı @@ -2069,7 +2069,7 @@ Vikisəyahət Üst panel %1$s düzəliş, cəmi %2$s mBTC - Ye + Yeni marşrut yarat Hazırdır Naviqasiya profili OsmAnd Live məlumatları @@ -2090,4 +2090,84 @@ İstifadəçi adı Şəkil əlavə et Yeni hesab yarat + Bərpa et + t + + Daşıma + Xəritələri daşı + %1$d fayl kopyalandı (%2$s). + %1$d fayl daşındı (%2$s). + GPS axtarılır + Proqram profilləri + Profil adı + İcazə ver + Xeyr, təşəkkürlər + İkon + %s saxlandı + Standart + Pulsuz + Üç ay + İl + İl + İl + Ay + Ay + Ay + Həftə + Həftə + Həftə + Gün + Gün + Gün + OsmAnd parametrləri + Qovluq… + %1$s GB boş (%2$s GB-dan) + %1$s kB + %1$s MB + %1$s GB + %1$s TB + Xəritələr + Hesabla + Bütün xəritələri yenilə + + %s endirilir + OSM + İstifadəçi adı və şifrə + Bildiriş + %1$s/%2$s + %1$s — %2$s — %3$s + Menyu + Parametrləri aç + Profillər + Bucaq + Bucaq: %s° + Xüsusi profil + Yeni profil saxlanılır + %2$s-dən %1$s + Dillər + Dil + Bütün dillər + Xüsusi rəng + %1$s / %2$s + OsmAnd + Mapillary + Favoritlər + Naviqasiya profilləri + Profil əlavə et + Proqram profilini dəyiş + Hər zaman + SQLiteDB faylı + Hamısı silinsin\? + Aktiv saxla + Sil + ton + metr + Mapillary-ni göstər/gizlət + Mapillary-ni gizlət + Mapillary-ni göstər + %1$s silindi + Sil və yenidən başlat + Vikipediya xəritələrini endir + Bağlanmış OSM qeydi + Xüsusi + Son düzəliş \ No newline at end of file From f5e5c36757af0f0bf208f27f9643853fa432b837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?= Date: Wed, 18 Nov 2020 10:43:24 +0000 Subject: [PATCH 080/198] Translated using Weblate (Icelandic) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-is/strings.xml | 44 ++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/OsmAnd/res/values-is/strings.xml b/OsmAnd/res/values-is/strings.xml index 00458a4f90..8af3d89837 100644 --- a/OsmAnd/res/values-is/strings.xml +++ b/OsmAnd/res/values-is/strings.xml @@ -1772,7 +1772,7 @@ Hve snemma viltu fá tilkynningu um komu? Ekki nægt vinnsluminni til að birta valið svæði Ónettengdar breytingar - Alltaf nota ónettengdar breytingar. + Ef ónettengdar breytingar eru virkar, þá eru breytingar fyrst vistaðar á tækinu og síðan sendar inn samkvæmt beiðni. Annars gerist þetta jafnóðum. Senda breytingu inn til OSM Ósamstilltar (async) OSM-breytingar: Þú getur sótt eða uppfært %1$s kort. @@ -2164,7 +2164,7 @@ Engar v1.9 leiðareglur Ekki nota leiðareglur sem komu til sögunnar í útgáfu 1.9. Leiðir deilileigubíla - Nafn GPX skráar: + Heiti GPX-skráar: Sýna í korti eftir vistun Mæla vegalengd Geyma skráða ferla í undirmöppum fyrir hvern skráningamánuð (svo sem 2018-01). @@ -2514,7 +2514,7 @@ Veldu skráartegund Öll gögn Sýna lokaða minnispunkta - Birta/fela OSM-minnispunkta á kortinu. + Birta eða fela OSM-minnispunkta á kortinu. GPX - hentar til útflutnings fyrir JOSM eða aðra OSM-ritla. OSC - hentar til útflutnings í OSM. Flytja út sem OSM-minnispunkta, merkisstaði, eða bæði. @@ -3086,7 +3086,7 @@ Veldu notkunarsnið sem eiga að vera sýnileg í forriti. Forritssnið Nota WunderLINQ við stýringu - Brun/svigskíði + Brun og svigskíði Ferðaleiðir á skíðum. Brekkur notaðar fyrir sleða. Leyfa millileiðir @@ -3105,7 +3105,7 @@ Breyttu aðdrætti á kort með skruni músarhjóls upp og niður. Escape fer aftur með þig inn í WunderLINQ forritið. Þú verður að skilgreina a.m.k. eitt atriði í listanum í stillingum flýtiaðgerða Brekkur fyrir svigskíði eða brun og aðgangur að skíðalyftum. - Gönguskíði/norræn fjallaskíði + Gönguskíði og norræn fjallaskíði Leiðir fyrir gönguskíði eða norræn fjallaskíði. Leiðir sem troðnar eru einungis fyrir klassískan stíl en án hluta fyrir skautun. Þetta telur einnig með leiðir sem troðnar eru með minni farartækjum og lausari sporum sem jafnvel eru gerð af skíðagöngufólkinu sjálfu. Kjósa leiðir á þessu erfiðleikastigi, þótt leiðarval um erfiðari eða auðveldari leiðir séu mögulegar ef um stutta búta sé að ræða. @@ -3237,7 +3237,7 @@ Birta kort á læsiskjá á meðan leiðsögn stendur. Stillingar leiðarvals í valda sniðinu \"%1$s\". Tímamörk eftir vöknun - Einingar og snið þeirra + Einingar og snið Útlit Útlit landakorts Útlit korts @@ -3374,7 +3374,7 @@ Upphafspunktur Notað til að áætla komutíma á óþekktum gerðum vega og til takmörkunar á hraða á öllum vegum (gæti breytt leiðarvali) Ferill vistaður - Skráarheiti er autt + Vantar skráarheiti Afturkalla Hnappur til að gera miðju skjásins að upphafsstað. Mun síðan spyrja um áfangastað eða setja í gang útreikning á leiðum. Birta hnútanetkerfi fyrir hjólaleiðir @@ -3582,7 +3582,7 @@ Virkja til að sjá hæðaskyggingar eða brekkur á korti. Þú getur lesið meira um þessa eiginleika á vefnum okkar. Hæðaskygging Brekkur - Birta/fela yfirborð + Birta eða fela yfirborð Fela yfirborð Sýna yfirborð Hnappur til að birta eða fela yfirborðslag á kortinu. @@ -3689,7 +3689,7 @@ Nota tímamörk kerfis fyrir skjá Breyta nettengdum gagnagjafa OsmAnd rekjari - Búa til / breyta merkisstað + Búa til eða breyta merkisstað Geymslusnið Rennur út Flýtiaðgerð @@ -3698,7 +3698,7 @@ Þú getur komist í þessar aðgerðir með því að ýta á \"%1$s\"-hnappinn. Áskrift - OsmAnd Live Alltaf - Birta/fela almenningssamgöngur + Birta eða fela almenningssamgöngur Endurheimta sjálfgefna röð atriða Óstudd tegund Leiðsagnarleiðbeiningar @@ -3707,7 +3707,7 @@ Leiðsagnarsnið Halda áfram OsmAnd + Mapillary - Bæta við / breyta eftirlæti + Bæta við eða breyta eftirlæti Birta almenningssamgöngur Sjálfgefin tímamörk fyrir skjá Hnappur til að birta eða fela almenningssamgöngur á kortinu. @@ -3895,7 +3895,7 @@ Síðast breytt Nafn: Ö – A Nafn: A – Ö - Tákn við upphaf/enda + Tákn við upphaf og enda Forðast gangstéttir Forðast gangstéttir Þróun @@ -3911,12 +3911,12 @@ Útskráning tókst %s GPX-skrár valdar Mun setja GPX-skráningu í bið þegar forritið er drepið (slökkt á því í gegnum skjáinn fyrir nýleg forrit - bakgrunnsvísir OsmAnd hverfur þar með úr tilkynningastiku Android-kerfisins.) - Veldu millibil skráninga í almenna leiðarskráningu (virkjað með viðmótshlutanum fyrir GPX-skráningu á kortinu). + Veldu millibil skráninga í almenna leiðarskráningu (virkjað með viðmótshlutanum \'Skráning ferðar\' á kortinu). Setja skráningu í bið Halda áfram með skráningu • Uppfærðar aðgerðir í skipulagningu leiða: mismunandi leiðsögn á hverjum bút auk slóða \n -\n • Ný útlitsvalmynd fyrir slóðir: val á lit, þykkt, birting stefnuörva, táknmynda við upphaf/endi +\n • Ný útlitsvalmynd fyrir slóðir: val á lit, þykkt, birting stefnuörva, táknmynda við upphaf og endi \n \n • Bættur sýnileiki hjólreiðahnúta. \n @@ -3975,4 +3975,20 @@ OsmAnd notar MGRS, sem er svipað og UTM-snið NATO. Sýsla með áskrift MGRS + \"Opinbert\" þýðir að ferillinn birtist í GPS-ferlunum þínum og á opinberum listum yfir GPS-ferla, þar sem ferilpunktar eru með tímamerkjum á frumsniði. Gögn sem eru sótt í gegnum opinbert GPS API-forritsviðmót vísa ekki í ferlasíðuna þína. Tímamerki ferilpunkta eru ekki tiltæk í gegnum opinbera GPS API-forritsviðmótið og er ekki raðað í tímaröð. + Kayak + Bæta við mynd + \"Auðkennanlegt\" þýðir að ferillinn birtist í GPS-ferlunum þínum og á opinberum listum yfir GPS-ferla, sem þýðir að aðrir notendur geta sútt frumferilinn og tengt þær upplýsingar við notandanafnið þitt. Opinberir ferilpunktar með tímamerkjum sem eru sóttir í gegnum opinbera GPS API-forritsviðmótið vísa í ferlasíðuna þína. + Leitarferill + \"Einka\" þýðir að ferillinn birtist ekki á neinum opinberum listum, en ferilpunktar í ótímasettri röð eru tiltækir í gegnum opinbert GPS API-forritsviðmót án tímamerkja. + Loka OSM-minnispunkti + Ég er nú þegar með notandaaðgang + Skráðu þig á +\nOpenPlaceReviews.org + Búa til nýjan notandaaðgang + Þú getur skráð þig inn með öruggu OAuth-aðferðinni eða notað notandanafn og lykilorð innskráningar. + Vélbátar + Ljósmyndir eru í boði frá opna gagnaverkefninu OpenPlaceReviews.org. Til að geta sent inn myndir þarftu að skrá þig á vefsvæðinu. + Gera athugasemd við OSM-minnispunkt + \"Rekjanlegt\" þýðir að ferillinn birtist ekki á neinum opinberum listum, en meðhöndlaðir ferilpunktar með tímamerkjum úr ferlinum (sem ekki er hægt að tengja beint við þig) munu birtast í gögnum sem eru sótt í gegnum opinbert GPS API-forritsviðmót. \ No newline at end of file From d7d3455c25733e83ff2cd887ce7f0b35d7254142 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 17 Nov 2020 01:58:35 +0000 Subject: [PATCH 081/198] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3555 of 3555 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 33 +++++++++++++++------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 0a000f7811..1636f2db70 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -1913,7 +1913,7 @@ 完整報告 OSM 的使用者名稱與密碼 報告 - 檔案名稱包含非法字元 + 檔案名稱中有非法字元 現在應用程式允許寫入外部記憶體。但是需要重新啟動程式。 請透過地圖增加地圖標記 未發現任何航點 @@ -2632,7 +2632,7 @@ 複製地點/POI 名稱 無名稱的位置 顯示已關閉的註解 - 在地圖上顯示/隱藏 OSM 的註解。 + 在地圖上顯示或隱藏 OSM 的註解。 GPX - 適合匯出到 JOSM 或其他 OSM 編輯。 OSC - 適合匯出到 OSM。 GPX 檔案 @@ -3078,7 +3078,7 @@ 透過向上或向下捲以變更地圖縮放。Esc 會將您帶回 WunderLINQ 應用程式。 使用 WunderLINQ 來控制 至少在「快速動作」設定中新增一個項目 - 高山/下坡滑雪 + 高山與下坡滑雪 適合高山或下山滑雪的斜坡與滑雪纜車。 越野滑雪 越野滑雪的路線。 @@ -3360,7 +3360,7 @@ 起點 估計未知道路類型的到達時間,並限制所有道路的速度(可能會影響路徑) 已儲存軌跡 - 檔案名稱為空 + 空的檔案名稱 還原 讓出發點置於畫面中央的按鈕。 顯示節點網路自行車路徑 @@ -3571,7 +3571,7 @@ 啟用以檢視地形陰影或坡度圖。您可以在我們的網站上閱讀更多關於這些地圖類型的資訊。 地形陰影 坡度 - 顯示/隱藏地形 + 顯示或隱藏地形 隱藏地形 顯示地形 用於顯示或隱藏地圖上地形圖層的按鈕。 @@ -3689,10 +3689,10 @@ 您可以透過點選「%1$s」按鈕存取這些動作。 隱藏大眾運輸 在地圖上顯示或隱藏大眾運輸的按鈕。 - 顯示/隱藏大眾運輸 - 建立/編輯 POI + 顯示或隱藏大眾運輸 + 建立或編輯 POI 停車位置 - 新增/編輯收藏 + 新增與編輯收藏 恢復預設項目排序 返回編輯 恢復 @@ -3867,7 +3867,7 @@ 檔案名稱 已選定 %s 軌跡檔案 將會在應用程式被砍除時(透過最近的應用程式)暫停軌跡錄製。(OsmAnd 背景指示會從 Android 通知列中消失。) - 指定一般軌跡錄製的記錄間隔(透過地圖上的旅程錄製小工具啟用)。 + 指定一般軌跡錄製的記錄間隔(透過地圖上的旅程錄製小工具開啟)。 暫停旅程錄製 恢復旅程錄製 系統預設 @@ -3883,7 +3883,7 @@ 重做 • 更新「規劃路線」功能:允許每個路段使用不同的導航類型並包含軌跡 \n -\n • 新的軌跡外觀選項:選取顏色、厚度、開啟方向箭頭與開始/結束圖示 +\n • 新的軌跡外觀選項:選取顏色、厚度、開啟方向箭頭與開始與結束圖示 \n \n • 改善自行車節點的能見度 \n @@ -3899,7 +3899,7 @@ 最後修改時間 名稱:Z – A 名稱:A – Z - 開始/結束圖示 + 開始與結束圖示 感謝您購買 \'Contour lines\' 按選定週期收取訂閱費用。隨時在 AppGallery 上取消。 確認購買後將會從您的 AppGallery 帳號中付款。 @@ -3960,10 +3960,10 @@ 標記歷史 傳送 GPX 檔案到 OpenStreetMap 輸入以逗號分隔的標籤。 - 公開代表軌跡將會公開顯示在您的 GPS 軌跡與公開的 GPS 軌跡清單中。透過 API 取得的 API 不會參考您的軌跡頁面。軌跡點的時間戳不會透過公開的 GPS API 提供,也不會按時間排序。不過,其他使用者仍可以從公開的軌跡清單下載原始軌跡與任何其中包含的時間戳。 - 私有代表了軌跡不會顯示在任何公開的清單中,但其軌跡點仍可透過公開的 GPS API 取得,但沒有時間戳,也不會按時間順序排列。 - 可識別代表軌跡將會在您的 GPS 軌跡與公開 GPS 軌跡清單中顯示,亦即其他使用者將可以下載原始軌跡並將其與您的使用者名稱相關聯。透過軌跡點 API 提供的資料將會參考您的原始軌跡頁面。軌跡點的時間戳可透過公開的 GPS API 取得。 - 可追蹤代表軌跡不會顯示在任何公開的清單中,但其追蹤點仍可以透過帶有時間戳的公開 GPS API 使用。其他使用者將只能從您的軌跡中下載處理過的追蹤點,但這些追蹤點無法直接與與您相關聯。 + 「公開」代表軌跡將會公開顯示在您的 GPS 軌跡與公開的 GPS 軌跡清單中,且在公開軌跡清單中會以帶有原始形式的時間戳顯示。透過 API 取得的資料不會引用您的軌跡頁面。軌跡點的時間戳不會透過公開的 GPS API 提供,也不會按時間排序。 + 「私有」代表軌跡不會顯示在任何公開的清單中,但其軌跡點仍可透過公開的 GPS API 取得,但沒有時間戳,也不會按時間順序排列。 + 「可識別」代表軌跡將會在您的 GPS 軌跡與公開 GPS 軌跡清單中顯示,亦即其他使用者將可以下載原始軌跡並將其與您的使用者名稱相關聯。透過追蹤點 API 提供的 GPS API 中帶有公開時間戳的追蹤點資料將會引用您的原始追蹤頁面。 + 「可追蹤」代表軌跡不會在任何公開的清單中顯示,但帶有時間戳(這並不會與您直接相關聯)的已處理追蹤點可從公開的 GPS API 下載。 關閉 OSM 註記 評論 OSM 註記 您可以使用安全的 OAuth 方式或是使用您的帳號與密碼來登入。 @@ -3973,4 +3973,7 @@ 照片由開放資料專案 OpenPlaceReviews.org 提供。為了上傳您的照片,您必須在網站上註冊。 建立新帳號 我已經有帳號了 + 搜尋歷史紀錄 + 皮艇 + 快艇 \ No newline at end of file From 5c25b22e57cbdc3c9698a359725e2f70a7699031 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 17 Nov 2020 02:00:53 +0000 Subject: [PATCH 082/198] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3830 of 3830 strings) --- OsmAnd/res/values-zh-rTW/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index 8244b4067d..f298b282cf 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -1579,7 +1579,7 @@ 玩具 冰淇淋 SIM 卡 - 分公司 + 分公司/分店 戰爭紀念碑 牌匾 雕像 From 5655b30d7c5be527e04cd19d78118f5da3a1b2e3 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 17 Nov 2020 19:37:18 +0000 Subject: [PATCH 083/198] Translated using Weblate (Russian) Currently translated at 100.0% (3830 of 3830 strings) --- OsmAnd/res/values-ru/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index c75c0ac4ef..de96911a16 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -3836,4 +3836,6 @@ Навесы Точка GPX Радиолокационная вышка + Придорожная стоянка + На крыше \ No newline at end of file From 02784da0e5a955f4afaf7691642344c6393660e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?= Date: Wed, 18 Nov 2020 10:43:15 +0000 Subject: [PATCH 084/198] Translated using Weblate (Icelandic) Currently translated at 100.0% (271 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/is/ --- OsmAnd-telegram/res/values-is/strings.xml | 25 ++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/OsmAnd-telegram/res/values-is/strings.xml b/OsmAnd-telegram/res/values-is/strings.xml index 6fa1ae4614..a915a2e4f4 100644 --- a/OsmAnd-telegram/res/values-is/strings.xml +++ b/OsmAnd-telegram/res/values-is/strings.xml @@ -43,8 +43,8 @@ Kílómetrar/metrar Síðasta uppfærsla frá Telegram: Fyrir %1$s síðan Vöktun er óvirk - Staða OsmAnd-rekjara - OsmAnd-rekjari + Staða OsmAnd-rakningar + OsmAnd-rakning Hópur mín/ml Netþjónn @@ -211,12 +211,12 @@ Ekki fundist ennþá Móttók GPX-punkta: %1$s Deili staðsetningu - Hvernig á að slökkva á OsmAnd-rekjaranum úr Telegram + Hvernig á að slökkva á OsmAnd-rakningu úr Telegram Ekki sent ennþá OsmAnd nettengdur GPS-rekjari - Skrá út úr OsmAnd-rekjara\? + Skrá út úr OsmAnd-rakningu\? Kveikt er á deilingu (slökkva) - Hvernig á að slökkva á OsmAnd-rekjaranum úr Telegram + Hvernig á að slökkva á OsmAnd-rakningu úr Telegram Virkjaðu \"Staðsetning\" í stillingunum stýrikerfisins Tengiliðir og hópar sem deila staðsetningu til þín. Tengstu við internetið til að geta skráð þig til fulls út úr Telegram. @@ -234,10 +234,10 @@ Veldu hvaða útgáfu OsmAnd þú vilt nota Gera alla deilingu óvirka Uppfærðu OsmAnd til að skoða gögn á kortinu - Veldu tímabelti til birtingar í staðsetningarskilaboðum þínum + Veldu tímabelti til birtingar í staðsetningarskilaboðum þínum. Veldu eina af staðsetningarþjónustunum til að deila staðsetningu þinni. Stilla tímabil þar sem allir eru sýnilegir - Veldu þá útgáfu OsmAnd sem OsmAnd-rekjarinn notar til að birta staðsetningar. + Veldu þá útgáfu OsmAnd sem OsmAnd-rakningin notar til að birta staðsetningar. Endilega settu upp Telegram og skráðu notandaaðgang. Settu inn Telegram-símanúmerið þitt á alþjóðlegu sniði Virkja vöktun til að vista allar staðsetningar í aðgerðaferli. @@ -260,4 +260,15 @@ Síðasta uppfærða staðsetning: Veldu nafn sem þú hefur ekki þegar notað Ekki mögulegt að senda á Telegram-spjöll: + Til að afturkalla heimildir til deilingar á staðsetningu, opnaðu Telegram, farðu í Stillingar → Gagnaleynd og öryggi → Setur, og bittu enda á setu OsmAnd-rakningar. + Þú getur útbúið og skoðað auðkenningu tækis (device ID) í Telegram-biðlaraforritinu með því að nota %1$s spjallvélmennið. %2$s + Ertu viss að þú viljir skrá þig út úr OsmAnd-rakningu þannig að þú getir ekki lengur deilt þinni staðsetningu eða séð staðsetningu annarra\? + Slokktu á bestun rafhlöðunýtingar fyrir OsmAnd-rakningu svo ekki slökkni á henni þegar forritið fer í bakgrunnsham (t.d. slökkt er á skjá). + OsmAnd-rakning er eitt af biðlaraforritunum sem nota opna Telegram-kerfið. Tengiliðirnir þínir geta notað eitthvað annað Telegram-biðlaraforrit. + OsmAnd-rakning gerir þér kleift að deila staðsetningu þinni og að sjá aðra í OsmAnd.

Forritið notar Telegram API-forritsviðmótið, þannig að þú verður að vera með Telegram-aðgang.
+ Ef þú ætlar að tengja mörg tæki við einn Telegram-notandaaðgang, þarftu að nota annað tæki til að deila staðsetningunni þinni. + Rauntíma + Breyta bestunarstillingum rafhlöðu til að auka stöðugleika í deilingu staðsetningar. + Veldu tímann sem valdir tengiliðir og hópar munu sjá staðsetningu þína í rauntíma. + Rauntíma núna \ No newline at end of file From ce498d7e04f958b9faefebf1d4e5fc6cdb81f515 Mon Sep 17 00:00:00 2001 From: nazar-kutz Date: Thu, 19 Nov 2020 13:30:52 +0200 Subject: [PATCH 085/198] don't show duplicates fragment for history search items --- .../plus/settings/backend/backup/CollectionSettingsItem.java | 4 ++++ .../settings/backend/backup/SearchHistorySettingsItem.java | 5 +++++ .../osmand/plus/settings/backend/backup/SettingsHelper.java | 5 +++-- .../plus/settings/fragments/ImportDuplicatesFragment.java | 4 ---- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/CollectionSettingsItem.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/CollectionSettingsItem.java index dea9d51bc8..7140c7826b 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/CollectionSettingsItem.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/CollectionSettingsItem.java @@ -68,6 +68,10 @@ public abstract class CollectionSettingsItem extends SettingsItem { return res; } + public boolean shouldShowDuplicates() { + return true; + } + public abstract boolean isDuplicate(@NonNull T item); @NonNull diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SearchHistorySettingsItem.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SearchHistorySettingsItem.java index a4af84f7ca..70e5db4ba5 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SearchHistorySettingsItem.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SearchHistorySettingsItem.java @@ -143,6 +143,11 @@ public class SearchHistorySettingsItem extends CollectionSettingsItem) { - List duplicates = ((CollectionSettingsItem) item).processDuplicateItems(); - if (!duplicates.isEmpty()) { + CollectionSettingsItem settingsItem = (CollectionSettingsItem) item; + List duplicates = settingsItem.processDuplicateItems(); + if (!duplicates.isEmpty() && settingsItem.shouldShowDuplicates()) { duplicateItems.addAll(duplicates); } } else if (item instanceof FileSettingsItem) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportDuplicatesFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportDuplicatesFragment.java index 6d5b74cef7..31255aac46 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportDuplicatesFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportDuplicatesFragment.java @@ -321,10 +321,6 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment { duplicates.add(getString(R.string.markers_history)); duplicates.addAll(markersHistoryGroups); } - if (!historyEntries.isEmpty()) { - duplicates.add(getString(R.string.shared_string_search_history)); - duplicates.addAll(historyEntries); - } return duplicates; } From 10c24781539430bd9e94f842aa041fc3646735ce Mon Sep 17 00:00:00 2001 From: nazar-kutz Date: Thu, 19 Nov 2020 14:21:48 +0200 Subject: [PATCH 086/198] Fix "Local wikipedia results don't show in search history" --- .../src/main/java/net/osmand/osm/MapPoiTypes.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java index e273fa4e7f..9bff39dcb1 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java @@ -205,6 +205,20 @@ public class MapPoiTypes { if (pt != null && !pt.isReference()) { return pt; } + if (pc.isWiki() && name.startsWith(WIKI_LANG)) { + return getPoiTypeForWiki(pc, name); + } + } + return null; + } + + public AbstractPoiType getPoiTypeForWiki(PoiCategory osmwiki, String name) { + for (PoiType pt : osmwiki.getPoiTypes()) { + for (PoiType wikiLangPt : pt.getPoiAdditionals()) { + if (wikiLangPt != null && Algorithms.objectEquals(wikiLangPt.getOsmTag(), name)) { + return wikiLangPt; + } + } } return null; } From f5c5ab03b436aaa0745775d63d17be8d152f3e3c Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Thu, 19 Nov 2020 12:14:20 +0000 Subject: [PATCH 087/198] Translated using Weblate (Hebrew) Currently translated at 99.9% (3558 of 3561 strings) --- OsmAnd/res/values-iw/strings.xml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index 5e3f1a1567..b2dcee50ed 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -3930,7 +3930,7 @@ יש להיכנס עם OAuth כדי להשתמש ביכולות של osmedit להיכנס דרך OAuth למחוק את אסימון ה־OAuth של OpenStreetMap - היציאה הצליחה + יצאת הקובץ כבר ייובא אל OsmAnd להשתמש באלגוריתם חישוב מסלול דו־שלבי A*‎ לנהיגה ברכבי שלג עם דרכים ומסלולים יעודיים. @@ -3952,18 +3952,18 @@ MGRS MGRS עליך להוסיף שתי נקודות לפחות - כניסה ל־OpenStreetMap - כניסה ל־OpenStreetMap.org + כניסה עבור OpenStreetMap + כניסה עבור OpenStreetMap.org כניסה עם OpenStreetMap - להשתמש בשם כניסה וססמה + להיכנס עם שם משתמש וססמה חשבון - כניסה + שם משתמש ניהול מינוי תוקף המינוי ל־OsmAnd Live פג המינוי ל־OsmAnd Live הושהה - עליך להיכנס כדי להעלות דברים חדשים או כאלו ששינית. + עליך להיכנס כדי להעלות שינויים חדשים או כאלו שנערכו. \n -\nניתן להיכנס בשיטת OAuth המאובטחת או להשתמש בשם הכניסה והססמה שלך. +\nאו עם OAuth או באמצעות שם המשתמש והססמה שלך. יש בעיה עם המינוי שלך. יש ללחוץ על הכפתור כדי לגשת להגדרות המינוי של Google Play ולתקן את שיטת התשלום שלך. המינוי ל־OsmAnd Live מוחזק היסטוריית סמנים @@ -3972,15 +3972,21 @@ „ניתן למעקב” משמעו שהמסלול לא מופיע ברישומים ציבוריים אך נקודות המעקב שעובדו עם חותמות זמן ממנו (שלא ניתן לשייך אליך ישירות) תהיינה דרך ההורדות מה־API הציבורי של ה־GPS. סגירת הערת OSM להגיב על הערת OSM - ניתן להיכנס באמצעות שיטת האימות המאובטחת OAuth או להיכנס עם שם הכניסה והססמה שלך. + ניתן להיכנס באמצעות שיטת האימות המאובטחת OAuth או להיכנס עם שם המשתמש והססמה שלך. הוספת תמונה יש להירשם בכתובת \nOpenPlaceReviews.org - תמונות מסופקות על ידי מיזם הנתונים הפתוחים OpenPlaceReviews.org. כדי להעלות את התמונות שלך עליך להירשם לאתר. + יש להיכנס לאתר מיזם הנתונים הפתוחים OpenPlaceReviews.org כדי להעלות אף יותר תמונות. יצירת חשבון חדש כבר יש לי חשבון היסטוריית חיפוש קיאק סירת מנוע מגדהי + משאבים + גודל קובץ משוערך + נא לבחור את הנתונים שייוצאו לקובץ. + נדרש לייבוא + במכשיר שלך יש רק %1$s פנויים. נא לפנות מקום או לבטל כמה מהפריטים לייצוא. + אין מספיק מקום \ No newline at end of file From 8848da646675039b4bc47a59b9e9a62ade564adf Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Thu, 19 Nov 2020 16:00:12 +0200 Subject: [PATCH 088/198] Fix "register on" fragment, add "add photos" bottom sheet --- OsmAnd/res/layout/fragment_opr_login.xml | 53 +++++------- OsmAnd/res/layout/opr_add_photo.xml | 40 +++++++++ OsmAnd/res/values/strings.xml | 3 + .../plus/mapcontextmenu/MenuBuilder.java | 6 +- .../AddPhotosBottomSheetDialogFragment.java | 85 +++++++++++++++++++ .../openplacereviews/OprStartFragment.java | 37 +++++--- 6 files changed, 181 insertions(+), 43 deletions(-) create mode 100644 OsmAnd/res/layout/opr_add_photo.xml create mode 100644 OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java diff --git a/OsmAnd/res/layout/fragment_opr_login.xml b/OsmAnd/res/layout/fragment_opr_login.xml index 3313679aec..59c31069b9 100644 --- a/OsmAnd/res/layout/fragment_opr_login.xml +++ b/OsmAnd/res/layout/fragment_opr_login.xml @@ -1,15 +1,16 @@ - + android:layout_height="match_parent" + android:focusable="true"> + app:srcCompat="@drawable/ic_img_logo_openplacereview" /> - + android:gravity="center_horizontal" /> + android:text="@string/register_on_openplacereviews_desc" /> - + android:layout_height="@dimen/dialog_button_height" + android:layout_marginBottom="@dimen/content_padding_small" /> - + android:layout_height="@dimen/dialog_button_height" /> diff --git a/OsmAnd/res/layout/opr_add_photo.xml b/OsmAnd/res/layout/opr_add_photo.xml new file mode 100644 index 0000000000..827fda4a16 --- /dev/null +++ b/OsmAnd/res/layout/opr_add_photo.xml @@ -0,0 +1,40 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index bde6a98173..8fa1c6ab03 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -17,6 +17,9 @@ Select the data to be exported to the file. Approximate file size Resources + OsmAnd shows photos from several sources:\nOpenPlaceReviews - POI photos;\nMapillary - street-level imagery;\nWeb / Wikimedia - POI photos specified in OpenStreetMap data. + Add to OpenPlaceReviews + Add to Mapillary Motorboat Kayak Search history diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index 1aa35b8589..35db3c821e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -46,7 +46,7 @@ import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard; import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCardsTask; import net.osmand.plus.mapcontextmenu.builders.cards.NoImagesCard; import net.osmand.plus.mapcontextmenu.controllers.TransportStopController; -import net.osmand.plus.openplacereviews.OprStartFragment; +import net.osmand.plus.openplacereviews.AddPhotosBottomSheetDialogFragment; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.render.RenderingIcons; import net.osmand.plus.transport.TransportStopRoute; @@ -316,7 +316,7 @@ public class MenuBuilder { b.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - OprStartFragment.showInstance(mapActivity.getSupportFragmentManager()); + AddPhotosBottomSheetDialogFragment.showInstance(mapActivity.getSupportFragmentManager()); } }); b.setTypeface(FontCache.getRobotoRegular(context)); @@ -337,7 +337,7 @@ public class MenuBuilder { b.setText(context.getResources().getString(R.string.shared_string_add_photo)); b.setBackgroundResource(R.drawable.btn_border_light); //TODO This feature is under development - b.setVisibility(View.GONE); + b.setVisibility(View.VISIBLE); b.setTextColor(ContextCompat.getColor(context, R.color.preference_category_title)); return b; } diff --git a/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java new file mode 100644 index 0000000000..4a55e9b425 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java @@ -0,0 +1,85 @@ +package net.osmand.plus.openplacereviews; + +import android.app.Activity; +import android.os.Bundle; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; + +import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; +import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.base.MenuBottomSheetDialogFragment; +import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemButton; +import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; +import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem; +import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem; + +public class AddPhotosBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { + + public static final String TAG = AddPhotosBottomSheetDialogFragment.class.getSimpleName(); + + @Override + public void createMenuItems(Bundle savedInstanceState) { + + View mainView = View.inflate(UiUtilities.getThemedContext(getMyApplication(), nightMode), + R.layout.opr_add_photo, null); + items.add(new SimpleBottomSheetItem.Builder() + .setCustomView(mainView) + .create()); + + DividerItem divider = new DividerItem(getContext()); + int contextPadding = getResources().getDimensionPixelSize(R.dimen.content_padding); + int contextPaddingSmall = getResources().getDimensionPixelSize(R.dimen.content_padding_small); + divider.setMargins(contextPadding, contextPadding, contextPadding, contextPaddingSmall); + items.add(divider); + + items.add(new BottomSheetItemButton.Builder() + .setTitle(getString(R.string.add_to_opr)) + .setLayoutId(R.layout.bottom_sheet_button) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + FragmentActivity activity = getActivity(); + if (activity != null) { + OprStartFragment.showInstance(activity.getSupportFragmentManager()); + } + dismiss(); + } + }) + .create()); + + items.add(new DividerSpaceItem(getContext(), contextPaddingSmall)); + + items.add(new BottomSheetItemButton.Builder() + .setButtonType(UiUtilities.DialogButtonType.SECONDARY) + .setTitle(getString(R.string.add_to_mapillary)) + .setLayoutId(R.layout.bottom_sheet_button) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Activity activity = getActivity(); + if (activity instanceof MapActivity) { + } + dismiss(); + } + }) + .create()); + + items.add(new DividerSpaceItem(getContext(), contextPaddingSmall)); + } + + @Override + protected int getDismissButtonTextId() { + return R.string.shared_string_cancel; + } + + public static void showInstance(@NonNull FragmentManager fragmentManager) { + if (!fragmentManager.isStateSaved()) { + AddPhotosBottomSheetDialogFragment fragment = new AddPhotosBottomSheetDialogFragment(); + fragment.show(fragmentManager, TAG); + } + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/openplacereviews/OprStartFragment.java b/OsmAnd/src/net/osmand/plus/openplacereviews/OprStartFragment.java index eecd0c3f32..19a4ba57be 100644 --- a/OsmAnd/src/net/osmand/plus/openplacereviews/OprStartFragment.java +++ b/OsmAnd/src/net/osmand/plus/openplacereviews/OprStartFragment.java @@ -1,6 +1,7 @@ package net.osmand.plus.openplacereviews; import android.content.Intent; +import android.graphics.Typeface; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; @@ -11,23 +12,41 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; + import net.osmand.PlatformUtil; import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; import net.osmand.plus.base.BaseOsmAndFragment; + import org.apache.commons.logging.Log; public class OprStartFragment extends BaseOsmAndFragment { - private static final String TAG = "fragment_oprstart"; + private static final String TAG = OprStartFragment.class.getSimpleName(); private static final Log LOG = PlatformUtil.getLog(OprStartFragment.class); private static final String openPlaceReviewsUrl = "OpenPlaceReviews.org"; @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + boolean nightMode = getMyApplication().getDaynightHelper().isNightModeForMapControls(); View v = inflater.inflate(R.layout.fragment_opr_login, container, false); - v.findViewById(R.id.register_opr_create_account).setOnClickListener(new View.OnClickListener() { + View createAccount = v.findViewById(R.id.register_opr_create_account); + v.findViewById(R.id.back_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + FragmentActivity activity = getActivity(); + if (activity != null) { + activity.getSupportFragmentManager().popBackStack(); + } + } + }); + UiUtilities.setupDialogButton(nightMode, createAccount, UiUtilities.DialogButtonType.PRIMARY, + R.string.register_opr_create_new_account); + createAccount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i = new Intent(requireContext(), OPRWebviewActivity.class); @@ -36,13 +55,10 @@ public class OprStartFragment extends BaseOsmAndFragment { startActivity(i); } }); - v.findViewById(R.id.back_button).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - getActivity().getSupportFragmentManager().popBackStack(); - } - }); - v.findViewById(R.id.register_opr_have_account).setOnClickListener(new View.OnClickListener() { + View haveAccount = v.findViewById(R.id.register_opr_have_account); + UiUtilities.setupDialogButton(nightMode, haveAccount, UiUtilities.DialogButtonType.SECONDARY, + R.string.register_opr_have_account); + haveAccount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i = new Intent(requireContext(), OPRWebviewActivity.class); @@ -71,9 +87,10 @@ public class OprStartFragment extends BaseOsmAndFragment { } @Override - public void updateDrawState(TextPaint ds) { + public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); + ds.setTypeface(Typeface.DEFAULT_BOLD); } } From 283673b6cf23a7105f2ae8031bf9fc80aebb0fb5 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 19 Nov 2020 15:33:18 +0100 Subject: [PATCH 089/198] Format imports --- .../src/main/java/net/osmand/data/Amenity.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 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 b0fe44ecfb..5b0079f03e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java @@ -1,16 +1,5 @@ package net.osmand.data; -import net.osmand.Location; -import net.osmand.osm.MapPoiTypes; -import net.osmand.osm.PoiCategory; -import net.osmand.util.Algorithms; - -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -21,9 +10,14 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; -import java.util.zip.GZIPInputStream; + +import org.json.JSONObject; import gnu.trove.list.array.TIntArrayList; +import net.osmand.Location; +import net.osmand.osm.MapPoiTypes; +import net.osmand.osm.PoiCategory; +import net.osmand.util.Algorithms; public class Amenity extends MapObject { From bcea2e4e0eb969563baf43f3e13d29ffa487f2d3 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 19 Nov 2020 15:43:49 +0100 Subject: [PATCH 090/198] Add method for keys --- OsmAnd-java/src/main/java/net/osmand/data/Amenity.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 5b0079f03e..13749ce706 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java @@ -1,6 +1,7 @@ package net.osmand.data; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -96,6 +97,13 @@ public class Amenity extends MapObject { } return additionalInfo; } + + public Collection getAdditionalInfoKeys() { + if (additionalInfo == null) { + return Collections.emptyList(); + } + return additionalInfo.keySet(); + } public void setAdditionalInfo(Map additionalInfo) { this.additionalInfo = null; From f6fd8defd499917cf0f409aae092bce3a666a2cc Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 19 Nov 2020 16:46:20 +0200 Subject: [PATCH 091/198] Fix markers export --- .../plus/mapmarkers/MapMarkersHelper.java | 1 + .../backup/HistoryMarkersSettingsItem.java | 11 ++++--- .../backend/backup/MarkersSettingsItem.java | 9 ++++-- .../fragments/DuplicatesSettingsAdapter.java | 20 ++++++------- .../fragments/ImportDuplicatesFragment.java | 29 +++++++++---------- .../fragments/ImportSettingsFragment.java | 7 +++-- 6 files changed, 42 insertions(+), 35 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersHelper.java b/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersHelper.java index 9839ccffda..3650f6d820 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersHelper.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersHelper.java @@ -1083,6 +1083,7 @@ public class MapMarkersHelper { String creationDateStr = point.getExtensionsToRead().get(CREATION_DATE); marker.visitedDate = parseTime(visitedDateStr, format); marker.creationDate = parseTime(creationDateStr, format); + marker.history = history; marker.nextKey = history ? MapMarkersDbHelper.HISTORY_NEXT_VALUE : MapMarkersDbHelper.TAIL_NEXT_VALUE; mapMarkers.add(marker); diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/HistoryMarkersSettingsItem.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/HistoryMarkersSettingsItem.java index cc152f7ad3..9f441b7ec8 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/HistoryMarkersSettingsItem.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/HistoryMarkersSettingsItem.java @@ -87,7 +87,7 @@ public class HistoryMarkersSettingsItem extends CollectionSettingsItem { public boolean isDuplicate(@NonNull MapMarker mapMarker) { for (MapMarker marker : existingItems) { if (marker.equals(mapMarker) - && Algorithms.objectEquals(marker.getOriginalPointDescription(), mapMarker.getOriginalPointDescription())) { + && Algorithms.objectEquals(marker.getOnlyName(), mapMarker.getOnlyName())) { return true; } } @@ -114,10 +114,13 @@ public class MarkersSettingsItem extends CollectionSettingsItem { int number = 0; while (true) { number++; - String name = item.getOnlyName() + "_" + number; + String name = item.getOnlyName() + " " + number; PointDescription description = new PointDescription(PointDescription.POINT_TYPE_LOCATION, name); - MapMarker renamedMarker = new MapMarker(item.point, description, item.getColor(), item.selected, item.index); + MapMarker renamedMarker = new MapMarker(item.point, description, item.colorIndex, item.selected, item.index); if (!isDuplicate(renamedMarker)) { + renamedMarker.history = false; + renamedMarker.visitedDate = item.visitedDate; + renamedMarker.creationDate = item.creationDate; renamedMarker.nextKey = MapMarkersDbHelper.TAIL_NEXT_VALUE; return renamedMarker; } diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java index 252b685bfc..fc6982a7a6 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java @@ -14,22 +14,22 @@ import net.osmand.IndexConstants; import net.osmand.PlatformUtil; import net.osmand.map.ITileSource; import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; -import net.osmand.plus.audionotes.AudioVideoNotesPlugin; -import net.osmand.plus.helpers.FileNameTranslationHelper; -import net.osmand.plus.helpers.GpxUiHelper; -import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; -import net.osmand.plus.settings.backend.ApplicationMode; -import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.audionotes.AudioVideoNotesPlugin; import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; -import net.osmand.plus.mapmarkers.MapMarkersGroup; +import net.osmand.plus.helpers.FileNameTranslationHelper; +import net.osmand.plus.helpers.GpxUiHelper; +import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; +import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.poi.PoiUIFilter; import net.osmand.plus.profiles.ProfileIconColors; import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources; import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.render.RenderingIcons; +import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -157,9 +157,9 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter duplicatesList, - List settingsItems, File file, Fragment targetFragment) { + List settingsItems, File file, Fragment targetFragment) { ImportDuplicatesFragment fragment = new ImportDuplicatesFragment(); fragment.setTargetFragment(targetFragment, 0); fragment.setDuplicatesList(duplicatesList); @@ -203,8 +202,8 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment { List ttsVoiceFilesList = new ArrayList<>(); List voiceFilesList = new ArrayList<>(); List mapFilesList = new ArrayList<>(); - List markersGroups = new ArrayList<>(); - List markersHistoryGroups = new ArrayList<>(); + List mapMarkers = new ArrayList<>(); + List mapMarkersGroups = new ArrayList<>(); List historyEntries = new ArrayList<>(); for (Object object : duplicatesList) { @@ -242,12 +241,12 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment { osmNotesPointList.add((OsmNotesPoint) object); } else if (object instanceof OpenstreetmapPoint) { osmEditsPointList.add((OpenstreetmapPoint) object); - } else if (object instanceof MapMarkersGroup) { - MapMarkersGroup markersGroup = (MapMarkersGroup) object; - if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) { - markersGroups.add(markersGroup); - } else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) { - markersHistoryGroups.add(markersGroup); + } else if (object instanceof MapMarker) { + MapMarker mapMarker = (MapMarker) object; + if (mapMarker.history) { + mapMarkers.add(mapMarker); + } else { + mapMarkersGroups.add(mapMarker); } } else if (object instanceof HistoryEntry) { historyEntries.add((HistoryEntry) object); @@ -313,13 +312,13 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment { duplicates.add(getString(R.string.local_indexes_cat_voice)); duplicates.addAll(voiceFilesList); } - if (!markersGroups.isEmpty()) { + if (!mapMarkers.isEmpty()) { duplicates.add(getString(R.string.map_markers)); - duplicates.addAll(markersGroups); + duplicates.addAll(mapMarkers); } - if (!markersHistoryGroups.isEmpty()) { + if (!mapMarkersGroups.isEmpty()) { duplicates.add(getString(R.string.markers_history)); - duplicates.addAll(markersHistoryGroups); + duplicates.addAll(mapMarkersGroups); } return duplicates; } diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java index 816d5517dc..9476470969 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java @@ -38,6 +38,7 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.SQLiteTileSource; import net.osmand.plus.UiUtilities; +import net.osmand.plus.UiUtilities.DialogButtonType; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.BaseOsmAndFragment; import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; @@ -54,7 +55,6 @@ import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem; import net.osmand.plus.settings.backend.backup.FavoritesSettingsItem; import net.osmand.plus.settings.backend.backup.FileSettingsItem; import net.osmand.plus.settings.backend.backup.GlobalSettingsItem; -import net.osmand.plus.settings.backend.backup.SearchHistorySettingsItem; import net.osmand.plus.settings.backend.backup.HistoryMarkersSettingsItem; import net.osmand.plus.settings.backend.backup.MapSourcesSettingsItem; import net.osmand.plus.settings.backend.backup.MarkersSettingsItem; @@ -63,12 +63,12 @@ import net.osmand.plus.settings.backend.backup.OsmNotesSettingsItem; import net.osmand.plus.settings.backend.backup.PoiUiFiltersSettingsItem; import net.osmand.plus.settings.backend.backup.ProfileSettingsItem; import net.osmand.plus.settings.backend.backup.QuickActionsSettingsItem; +import net.osmand.plus.settings.backend.backup.SearchHistorySettingsItem; import net.osmand.plus.settings.backend.backup.SettingsHelper; import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask; import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType; import net.osmand.plus.settings.backend.backup.SettingsItem; import net.osmand.plus.settings.backend.backup.SettingsItemType; -import net.osmand.plus.widgets.TextViewEx; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -134,7 +134,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { inflater = UiUtilities.getInflater(app, nightMode); View root = inflater.inflate(R.layout.fragment_import, container, false); Toolbar toolbar = root.findViewById(R.id.toolbar); - TextViewEx continueBtn = root.findViewById(R.id.continue_button); + View continueBtn = root.findViewById(R.id.continue_button); toolbarLayout = root.findViewById(R.id.toolbar_layout); expandableList = root.findViewById(R.id.list); buttonsContainer = root.findViewById(R.id.buttons_container); @@ -145,6 +145,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { description = header.findViewById(R.id.description); description.setText(R.string.select_data_to_import); expandableList.addHeaderView(header); + UiUtilities.setupDialogButton(nightMode, continueBtn, DialogButtonType.PRIMARY, getString(R.string.shared_string_continue)); continueBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { From 3fc2dd89b9221ad15b664e3730bd3e0f8271f751 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 19 Nov 2020 15:58:31 +0100 Subject: [PATCH 092/198] Refactor & hide internal method about additional info --- .../binary/BinaryMapPoiReaderAdapter.java | 12 ++---- .../main/java/net/osmand/data/Amenity.java | 37 +++++++++++++++++-- .../main/java/net/osmand/data/MapObject.java | 9 +++-- .../java/net/osmand/search/SearchUICore.java | 2 +- .../osmand/search/core/SearchCoreFactory.java | 4 +- 5 files changed, 46 insertions(+), 18 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java index 857eb4f4d3..cb348cf9b4 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java @@ -11,8 +11,6 @@ import java.util.Arrays; import java.util.Comparator; import java.util.LinkedList; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import net.osmand.Collator; import net.osmand.CollatorStringMatcher; @@ -576,13 +574,12 @@ public class BinaryMapPoiReaderAdapter { } } if (!matches) { - Map lt = am.getAdditionalInfo(); - for (Entry e : lt.entrySet()) { - if(!e.getKey().contains("_name") && - !e.getKey().equals("brand")) { + for (String key : am.getAdditionalInfoKeys()) { + if(!key.contains("_name") && + !key.equals("brand")) { continue; } - matches = matcher.matches(e.getValue()); + matches = matcher.matches(am.getAdditionalInfo(key)); if (matches) { break; } @@ -812,7 +809,6 @@ public class BinaryMapPoiReaderAdapter { } private boolean checkCategories(SearchRequest req, PoiRegion region) throws IOException { - StringBuilder subType = new StringBuilder(); while (true) { int t = codedIS.readTag(); int tag = WireFormat.getTagFieldNumber(t); 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 13749ce706..4af1596c2c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java @@ -91,13 +91,40 @@ public class Amenity extends MapObject { } - public Map getAdditionalInfo() { + // this method should be used carefully + public Map getInternalAdditionalInfoMap() { if (additionalInfo == null) { return Collections.emptyMap(); } return additionalInfo; } + public Collection getAdditionalInfoValues(boolean excludeZipped) { + if (additionalInfo == null) { + return Collections.emptyList(); + } + boolean zipped = false; + for(String v : additionalInfo.values()) { + if(isContentZipped(v)) { + zipped = true; + break; + } + } + if(zipped) { + List r = new ArrayList<>(additionalInfo.size()); + for(String str : additionalInfo.values()) { + if(excludeZipped && isContentZipped(str)) { + + } else { + r.add(unzipContent(str)); + } + } + return r; + } else { + return additionalInfo.values(); + } + } + public Collection getAdditionalInfoKeys() { if (additionalInfo == null) { return Collections.emptyList(); @@ -184,7 +211,7 @@ public class Amenity extends MapObject { } int maxLen = 0; String lng = defLang; - for (String nm : getAdditionalInfo().keySet()) { + for (String nm : getAdditionalInfoKeys()) { if (nm.startsWith(tag + ":")) { String key = nm.substring(tag.length() + 1); String cnt = getAdditionalInfo(tag + ":" + key); @@ -206,7 +233,7 @@ public class Amenity extends MapObject { public List getNames(String tag, String defTag) { List l = new ArrayList(); - for (String nm : getAdditionalInfo().keySet()) { + for (String nm : getAdditionalInfoKeys()) { if (nm.startsWith(tag + ":")) { l.add(nm.substring(tag.length() + 1)); } else if (nm.equals(tag)) { @@ -231,7 +258,7 @@ public class Amenity extends MapObject { if (!Algorithms.isEmpty(enName)) { return enName; } - for (String nm : getAdditionalInfo().keySet()) { + for (String nm : getAdditionalInfoKeys()) { if (nm.startsWith(tag + ":")) { return getAdditionalInfo(nm); } @@ -347,4 +374,6 @@ public class Amenity extends MapObject { } return a; } + + } diff --git a/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java b/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java index cb121cedfc..f9f9187223 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java @@ -13,7 +13,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -351,8 +350,8 @@ public abstract class MapObject implements Comparable { return json; } - public String unzipContent(String str) { - if (str != null && str.startsWith(" gz ")) { + String unzipContent(String str) { + if (isContentZipped(str)) { try { int ind = 4; byte[] bytes = new byte[str.length() - ind]; @@ -376,6 +375,10 @@ public abstract class MapObject implements Comparable { return str; } + boolean isContentZipped(String str) { + return str != null && str.startsWith(" gz "); + } + protected static void parseJSON(JSONObject json, MapObject o) { if (json.has("name")) { o.name = json.getString("name"); diff --git a/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java b/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java index becacd2775..e63870b1a7 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java @@ -741,7 +741,7 @@ public class SearchUICore { } } if (Algorithms.isEmpty(object.alternateName) && object.object instanceof Amenity) { - for (String value : ((Amenity) object.object).getAdditionalInfo().values()) { + for (String value : ((Amenity) object.object).getAdditionalInfoValues(true)) { if (phrase.getFirstUnknownNameStringMatcher().matches(value)) { object.alternateName = value; break; diff --git a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java index e5c791a780..c221d2ca77 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java @@ -602,7 +602,7 @@ public class SearchCoreFactory { sr.localeName = object.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()); if (!nm.matches(sr.localeName) && !nm.matches(sr.otherNames) - && !nm.matches(object.getAdditionalInfo().values())) { + && !nm.matches(object.getAdditionalInfoValues(false))) { return false; } sr.object = object; @@ -1059,7 +1059,7 @@ public class SearchCoreFactory { if (!poiAdditionals.isEmpty()) { boolean found = false; for (String add : poiAdditionals) { - if(object.getAdditionalInfo().containsKey(add)) { + if (object.getAdditionalInfoKeys().contains(add)) { found = true; break; } From 9fa21ef01c305364e507996cf681dacf4c136da7 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 19 Nov 2020 17:12:34 +0200 Subject: [PATCH 093/198] Fix compilation --- .../src/net/osmand/plus/OsmAndFormatter.java | 37 +++++++++---------- .../builders/AmenityMenuBuilder.java | 22 +++++------ .../controllers/AmenityMenuController.java | 21 ++++------- .../plus/osmedit/OpenstreetmapLocalUtil.java | 9 ++--- 4 files changed, 37 insertions(+), 52 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java b/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java index f9d3315bf5..92bcdef9a6 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java @@ -14,11 +14,11 @@ import net.osmand.osm.AbstractPoiType; import net.osmand.osm.MapPoiTypes; import net.osmand.osm.PoiCategory; import net.osmand.osm.PoiType; -import net.osmand.plus.settings.backend.ApplicationMode; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.helpers.enums.AngularConstants; import net.osmand.plus.helpers.enums.MetricsConstants; import net.osmand.plus.helpers.enums.SpeedConstants; +import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; import java.text.DateFormatSymbols; @@ -30,7 +30,6 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale; -import java.util.Map.Entry; import static net.osmand.data.PointDescription.getLocationOlcName; @@ -417,7 +416,7 @@ public class OsmAndFormatter { String typeName = amenity.getSubType(); if (pt != null) { typeName = pt.getTranslation(); - } else if(typeName != null){ + } else if (typeName != null) { typeName = Algorithms.capitalizeFirstLetterAndLowercase(typeName.replace('_', ' ')); } List res = new ArrayList<>(); @@ -426,7 +425,7 @@ public class OsmAndFormatter { for (String name : amenity.getAllNames(true)) { addPoiString(typeName, name, res); } - for (String name : amenity.getAdditionalInfo().values()) { + for (String name : amenity.getAdditionalInfoValues(false)) { addPoiString(typeName, name, res); } return res; @@ -444,36 +443,34 @@ public class OsmAndFormatter { public static String getAmenityDescriptionContent(OsmandApplication ctx, Amenity amenity, boolean shortDescription) { StringBuilder d = new StringBuilder(); - if(amenity.getType().isWiki()) { + if (amenity.getType().isWiki()) { return ""; } MapPoiTypes poiTypes = ctx.getPoiTypes(); - for(Entry e : amenity.getAdditionalInfo().entrySet()) { - String key = e.getKey(); - String vl = e.getValue(); - if(key.startsWith("name:")) { + for (String key : amenity.getAdditionalInfoKeys()) { + String vl = amenity.getAdditionalInfo(key); + if (key.startsWith("name:")) { continue; - } else if(vl.length() >= 150) { - if(shortDescription) { + } else if (vl.length() >= 150) { + if (shortDescription) { continue; } - } else if(Amenity.OPENING_HOURS.equals(key)) { + } else if (Amenity.OPENING_HOURS.equals(key)) { d.append(ctx.getString(R.string.opening_hours) + ": "); - } else if(Amenity.PHONE.equals(key)) { + } else if (Amenity.PHONE.equals(key)) { d.append(ctx.getString(R.string.phone) + ": "); - } else if(Amenity.WEBSITE.equals(key)) { + } else if (Amenity.WEBSITE.equals(key)) { d.append(ctx.getString(R.string.website) + ": "); } else { - AbstractPoiType pt = poiTypes.getAnyPoiAdditionalTypeByKey(e.getKey()); + AbstractPoiType pt = poiTypes.getAnyPoiAdditionalTypeByKey(key); if (pt != null) { - if(pt instanceof PoiType && !((PoiType) pt).isText()) { + if (pt instanceof PoiType && !((PoiType) pt).isText()) { vl = pt.getTranslation(); } else { - vl = pt.getTranslation() + ": " + amenity.unzipContent(e.getValue()); + vl = pt.getTranslation() + ": " + vl; } } else { - vl = Algorithms.capitalizeFirstLetterAndLowercase(e.getKey()) + - ": " + amenity.unzipContent(e.getValue()); + vl = Algorithms.capitalizeFirstLetterAndLowercase(key) + ": " + vl; } } d.append(vl).append('\n'); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java index f0d33b68dd..29fb2e578d 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java @@ -32,11 +32,11 @@ import net.osmand.plus.R; import net.osmand.plus.Version; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.FontCache; +import net.osmand.plus.helpers.enums.MetricsConstants; import net.osmand.plus.mapcontextmenu.CollapsableView; import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.osmedit.OsmEditingPlugin; import net.osmand.plus.poi.PoiUIFilter; -import net.osmand.plus.helpers.enums.MetricsConstants; import net.osmand.plus.views.layers.POIMapLayer; import net.osmand.plus.widgets.TextViewEx; import net.osmand.plus.widgets.tools.ClickableSpanTouchListener; @@ -344,12 +344,11 @@ public class AmenityMenuBuilder extends MenuBuilder { boolean osmEditingEnabled = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class) != null; - for (Map.Entry e : amenity.getAdditionalInfo().entrySet()) { + for (String key : amenity.getAdditionalInfoKeys()) { int iconId = 0; Drawable icon = null; int textColor = 0; - String key = e.getKey(); - String vl = e.getValue(); + String vl = amenity.getAdditionalInfo(key); if (key.equals("image") || key.equals("mapillary") @@ -460,7 +459,7 @@ public class AmenityMenuBuilder extends MenuBuilder { isCuisine = true; iconId = R.drawable.ic_action_cuisine; StringBuilder sb = new StringBuilder(); - for (String c : e.getValue().split(";")) { + for (String c : vl.split(";")) { if (sb.length() > 0) { sb.append(", "); sb.append(poiTypes.getPoiTranslation("cuisine_" + c).toLowerCase()); @@ -502,7 +501,6 @@ public class AmenityMenuBuilder extends MenuBuilder { isText = true; isDescription = iconId == R.drawable.ic_action_note_dark; textPrefix = pType.getTranslation(); - vl = amenity.unzipContent(e.getValue()); if (needIntFormatting) { vl = getFormattedInt(vl); } @@ -519,8 +517,7 @@ public class AmenityMenuBuilder extends MenuBuilder { } else if (poiType != null) { collectedPoiTypes.add(poiType); } else { - textPrefix = Algorithms.capitalizeFirstLetterAndLowercase(e.getKey()); - vl = amenity.unzipContent(e.getValue()); + textPrefix = Algorithms.capitalizeFirstLetterAndLowercase(key); } } @@ -782,11 +779,10 @@ public class AmenityMenuBuilder extends MenuBuilder { @Override protected Map getAdditionalCardParams() { Map params = new HashMap<>(); - Map additionalInfo = amenity.getAdditionalInfo(); - String imageValue = additionalInfo.get("image"); - String mapillaryValue = additionalInfo.get("mapillary"); - String wikidataValue = additionalInfo.get(Amenity.WIKIDATA); - String wikimediaValue = additionalInfo.get(Amenity.WIKIMEDIA_COMMONS); + String imageValue = amenity.getAdditionalInfo("image"); + String mapillaryValue = amenity.getAdditionalInfo("mapillary"); + String wikidataValue = amenity.getAdditionalInfo(Amenity.WIKIDATA); + String wikimediaValue = amenity.getAdditionalInfo(Amenity.WIKIMEDIA_COMMONS); if (!Algorithms.isEmpty(imageValue)) { params.put("osm_image", imageValue); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java index aa65a39e90..11564a1b73 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java @@ -12,13 +12,13 @@ import net.osmand.data.TransportStop; import net.osmand.osm.PoiCategory; import net.osmand.osm.PoiFilter; import net.osmand.osm.PoiType; -import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.plus.mapcontextmenu.builders.AmenityMenuBuilder; +import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.render.RenderingIcons; import net.osmand.plus.transport.TransportStopRoute; import net.osmand.plus.wikipedia.WikipediaDialogFragment; @@ -26,7 +26,6 @@ import net.osmand.util.Algorithms; import net.osmand.util.OpeningHoursParser; import java.util.List; -import java.util.Map; public class AmenityMenuController extends MenuController { @@ -160,12 +159,9 @@ public class AmenityMenuController extends MenuController { String preferredLang = OsmandPlugin.onGetMapObjectPreferredLang(amenity, getPreferredMapAppLang(), getPreferredMapLang()); String name = amenity.getName(preferredLang, isTransliterateNames()); - Map additionalInfo = amenity.getAdditionalInfo(); - if (additionalInfo != null) { - String ref = additionalInfo.get("ref"); - if (!TextUtils.isEmpty(ref) && !ref.equals(name)) { - return name + " (" + ref + ")"; - } + String ref = amenity.getAdditionalInfo("ref"); + if (!TextUtils.isEmpty(ref) && !ref.equals(name)) { + return name + " (" + ref + ")"; } if (Algorithms.isEmpty(name) && amenity.getSubType().equalsIgnoreCase("atm")) { String operator = amenity.getAdditionalInfo("operator"); @@ -247,12 +243,9 @@ public class AmenityMenuController extends MenuController { @Override public Drawable getRightIcon() { - Map addTypes = amenity.getAdditionalInfo(); - if (addTypes != null) { - String region = addTypes.get("subway_region"); - if (region != null) { - return RenderingIcons.getBigIcon(getMapActivity(), "subway_" + region); - } + String region = amenity.getAdditionalInfo("subway_region"); + if (region != null) { + return RenderingIcons.getBigIcon(getMapActivity(), "subway_" + region); } return null; } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapLocalUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapLocalUtil.java index 26eda5f4e5..4d42026026 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapLocalUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OpenstreetmapLocalUtil.java @@ -21,7 +21,6 @@ import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Set; import static net.osmand.osm.edit.Entity.POI_TYPE_TAG; @@ -136,12 +135,12 @@ public class OpenstreetmapLocalUtil implements OpenstreetmapUtil { if (!Algorithms.isEmpty(amenity.getOpeningHours())) { entity.putTagNoLC(OSMTagKey.OPENING_HOURS.getValue(), amenity.getOpeningHours()); } - for (Map.Entry entry : amenity.getAdditionalInfo().entrySet()) { - AbstractPoiType abstractPoi = MapPoiTypes.getDefault().getAnyPoiAdditionalTypeByKey(entry.getKey()); - if (abstractPoi != null && abstractPoi instanceof PoiType) { + for (String key : amenity.getAdditionalInfoKeys()) { + AbstractPoiType abstractPoi = MapPoiTypes.getDefault().getAnyPoiAdditionalTypeByKey(key); + if (abstractPoi instanceof PoiType) { PoiType p = (PoiType) abstractPoi; if (!p.isNotEditableOsm() && !Algorithms.isEmpty(p.getEditOsmTag())) { - entity.putTagNoLC(p.getEditOsmTag(), entry.getValue()); + entity.putTagNoLC(p.getEditOsmTag(), amenity.getAdditionalInfo(key)); } } } From 88edf800d0fc3e28835fbbf514161dd0335315c6 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 19 Nov 2020 16:37:00 +0100 Subject: [PATCH 094/198] Refactor & hide internal method about additional info --- OsmAnd-java/src/main/java/net/osmand/data/MapObject.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java b/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java index f9f9187223..d3700896b2 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/MapObject.java @@ -368,6 +368,10 @@ public abstract class MapObject implements Comparable { } br.close(); str = bld.toString(); + // ugly fix of temporary problem of map generation + if(isContentZipped(str)) { + str = unzipContent(str); + } } catch (IOException e) { e.printStackTrace(); } From 76315ec0997778098c8608c48dc3bbd8ba05023c Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Thu, 19 Nov 2020 17:51:10 +0200 Subject: [PATCH 095/198] Fix "add photos" bottom sheet --- OsmAnd/res/layout/fragment_opr_login.xml | 109 +++++++------ OsmAnd/res/layout/opr_add_photo.xml | 9 +- OsmAnd/res/values/sizes.xml | 1 + .../AddPhotosBottomSheetDialogFragment.java | 148 ++++++++++++------ 4 files changed, 172 insertions(+), 95 deletions(-) diff --git a/OsmAnd/res/layout/fragment_opr_login.xml b/OsmAnd/res/layout/fragment_opr_login.xml index 59c31069b9..5c5d4c23b5 100644 --- a/OsmAnd/res/layout/fragment_opr_login.xml +++ b/OsmAnd/res/layout/fragment_opr_login.xml @@ -1,14 +1,15 @@ - + android:background="?attr/bg_color" + android:clickable="true" + android:focusable="true" + android:orientation="vertical"> @@ -20,55 +21,71 @@ android:layout_height="match_parent" android:layout_gravity="start" android:contentDescription="@string/shared_string_back" - app:tint="@color/icon_color_default_light" - app:srcCompat="@drawable/ic_arrow_back"/> + app:srcCompat="@drawable/ic_arrow_back" + app:tint="@color/icon_color_default_light" /> - + - + + - + + + + + + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/content_padding" + android:layout_marginTop="@dimen/content_padding_small" + android:layout_marginRight="@dimen/content_padding" + android:layout_marginBottom="@dimen/content_padding_small" + android:layout_alignParentBottom="true" + android:orientation="vertical"> - \ No newline at end of file + \ No newline at end of file diff --git a/OsmAnd/res/layout/opr_add_photo.xml b/OsmAnd/res/layout/opr_add_photo.xml index 827fda4a16..80d43411fe 100644 --- a/OsmAnd/res/layout/opr_add_photo.xml +++ b/OsmAnd/res/layout/opr_add_photo.xml @@ -7,12 +7,11 @@ + osmand:srcCompat="@drawable/ic_action_photo_upload_colored" /> diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index 0cb79d23d1..64ab1cc330 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -289,6 +289,7 @@ 1.5 128dp 8dp + 28dp 236dp 68dp diff --git a/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java index 4a55e9b425..dae4fcad4b 100644 --- a/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/openplacereviews/AddPhotosBottomSheetDialogFragment.java @@ -1,74 +1,128 @@ package net.osmand.plus.openplacereviews; -import android.app.Activity; +import android.content.Context; import android.os.Bundle; +import android.text.SpannableString; +import android.text.Spanned; import android.view.View; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; +import net.osmand.PlatformUtil; +import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; -import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.UiUtilities.DialogButtonType; import net.osmand.plus.base.MenuBottomSheetDialogFragment; -import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemButton; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; -import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem; +import net.osmand.plus.helpers.FontCache; +import net.osmand.plus.mapillary.MapillaryPlugin; +import net.osmand.plus.widgets.style.CustomTypefaceSpan; + +import org.apache.commons.logging.Log; public class AddPhotosBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { public static final String TAG = AddPhotosBottomSheetDialogFragment.class.getSimpleName(); + private static final Log LOG = PlatformUtil.getLog(AddPhotosBottomSheetDialogFragment.class); + + public static final String OPEN_PLACE_REVIEWS = "OpenPlaceReviews"; + public static final String MAPILLARY = "Mapillary"; + public static final String WEB_WIKIMEDIA = "Web / Wikimedia"; + public static final String OPEN_STREET_MAP = "OpenStreetMap"; @Override public void createMenuItems(Bundle savedInstanceState) { - View mainView = View.inflate(UiUtilities.getThemedContext(getMyApplication(), nightMode), + OsmandApplication app = getMyApplication(); + if (app == null) { + return; + } + View view = View.inflate(UiUtilities.getThemedContext(app, nightMode), R.layout.opr_add_photo, null); + setDescriptionSpan(view); items.add(new SimpleBottomSheetItem.Builder() - .setCustomView(mainView) + .setCustomView(view) .create()); + items.add(new DividerSpaceItem(app, app.getResources().getDimensionPixelSize(R.dimen.text_margin_small))); + } - DividerItem divider = new DividerItem(getContext()); - int contextPadding = getResources().getDimensionPixelSize(R.dimen.content_padding); - int contextPaddingSmall = getResources().getDimensionPixelSize(R.dimen.content_padding_small); - divider.setMargins(contextPadding, contextPadding, contextPadding, contextPaddingSmall); - items.add(divider); + private void setDescriptionSpan(View view) { + String desc = requireContext().getString(R.string.add_photos_descr); + BoldSpannableString ss = new BoldSpannableString(desc, view.getContext()); + ss.setBold(OPEN_PLACE_REVIEWS); + ss.setBold(MAPILLARY); + ss.setBold(WEB_WIKIMEDIA); + ss.setBold(OPEN_STREET_MAP); + view.findViewById(R.id.add_photos_descr).setText(ss); + } - items.add(new BottomSheetItemButton.Builder() - .setTitle(getString(R.string.add_to_opr)) - .setLayoutId(R.layout.bottom_sheet_button) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - FragmentActivity activity = getActivity(); - if (activity != null) { - OprStartFragment.showInstance(activity.getSupportFragmentManager()); - } - dismiss(); - } - }) - .create()); + static class BoldSpannableString extends SpannableString { + Context ctx; - items.add(new DividerSpaceItem(getContext(), contextPaddingSmall)); + public BoldSpannableString(CharSequence source, Context ctx) { + super(source); + this.ctx = ctx; + } - items.add(new BottomSheetItemButton.Builder() - .setButtonType(UiUtilities.DialogButtonType.SECONDARY) - .setTitle(getString(R.string.add_to_mapillary)) - .setLayoutId(R.layout.bottom_sheet_button) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Activity activity = getActivity(); - if (activity instanceof MapActivity) { - } - dismiss(); - } - }) - .create()); + public void setBold(String boldText) { + String source = toString(); + setSpan(new CustomTypefaceSpan(FontCache.getRobotoMedium(ctx)), + source.indexOf(boldText), source.indexOf(boldText) + boldText.length(), + Spanned.SPAN_INCLUSIVE_INCLUSIVE); + } + } - items.add(new DividerSpaceItem(getContext(), contextPaddingSmall)); + @Override + protected int getThirdBottomButtonTextId() { + return R.string.add_to_opr; + } + + @Override + protected DialogButtonType getThirdBottomButtonType() { + return DialogButtonType.SECONDARY; + } + + @Override + protected int getFirstDividerHeight() { + return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_button_divider_height); + } + + @Override + protected void onThirdBottomButtonClick() { + FragmentActivity activity = getActivity(); + if (activity != null) { + OprStartFragment.showInstance(activity.getSupportFragmentManager()); + } + dismiss(); + } + + @Override + protected int getRightBottomButtonTextId() { + return R.string.add_to_mapillary; + } + + @Override + protected DialogButtonType getRightBottomButtonType() { + return DialogButtonType.SECONDARY; + } + + @Override + protected void onRightBottomButtonClick() { + FragmentActivity activity = getActivity(); + if (activity != null) { + MapillaryPlugin.openMapillary(activity, null); + } + dismiss(); + } + + @Override + protected int getSecondDividerHeight() { + return getResources().getDimensionPixelSize(R.dimen.content_padding_small); } @Override @@ -76,10 +130,14 @@ public class AddPhotosBottomSheetDialogFragment extends MenuBottomSheetDialogFra return R.string.shared_string_cancel; } - public static void showInstance(@NonNull FragmentManager fragmentManager) { - if (!fragmentManager.isStateSaved()) { - AddPhotosBottomSheetDialogFragment fragment = new AddPhotosBottomSheetDialogFragment(); - fragment.show(fragmentManager, TAG); + public static void showInstance(@NonNull FragmentManager fm) { + try { + if (!fm.isStateSaved()) { + AddPhotosBottomSheetDialogFragment fragment = new AddPhotosBottomSheetDialogFragment(); + fragment.show(fm, TAG); + } + } catch (RuntimeException e) { + LOG.error("showInstance", e); } } } \ No newline at end of file From 71753432b9e603154d0a47beaa790d50f2e6148e Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Wed, 18 Nov 2020 23:57:46 +0200 Subject: [PATCH 096/198] Account button on OSM Bottom Sheets Redirect to OSM Settings on acccount click --- .../net/osmand/plus/helpers/IntentHelper.java | 8 +++++++ .../plus/osmedit/OsmEditingFragment.java | 16 +++++++++++++ .../dialogs/SendGpxBottomSheetFragment.java | 24 +++++++++++++++++-- .../SendOsmNoteBottomSheetFragment.java | 19 +++++++++++++++ .../dialogs/SendPoiBottomSheetFragment.java | 20 ++++++++++++++++ 5 files changed, 85 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java index a7d6dd7f79..7f3a9ca30c 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java @@ -21,6 +21,7 @@ import net.osmand.plus.activities.PluginsFragment; import net.osmand.plus.dashboard.DashboardOnMap.DashboardType; import net.osmand.plus.mapmarkers.MapMarkersDialogFragment; import net.osmand.plus.mapsource.EditMapSourceDialogFragment; +import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.search.QuickSearchDialogFragment; import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.OsmandSettings; @@ -234,6 +235,13 @@ public class IntentHelper { } mapActivity.setIntent(null); } + if (intent.hasExtra(OsmEditingFragment.OPEN_PLUGIN)) { + boolean openPlugins = intent.getBooleanExtra(OsmEditingFragment.OPEN_PLUGIN, false); + if (openPlugins) { + OsmEditingFragment.showInstance(mapActivity.getSupportFragmentManager()); + } + mapActivity.setIntent(null); + } if (intent.hasExtra(BaseSettingsFragment.OPEN_CONFIG_ON_MAP)) { switch (intent.getStringExtra(BaseSettingsFragment.OPEN_CONFIG_ON_MAP)) { case BaseSettingsFragment.MAP_CONFIG: diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index d6156bfcfb..ad066bcb39 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -37,8 +37,11 @@ import static net.osmand.plus.osmedit.OsmEditingPlugin.OSM_EDIT_TAB; public class OsmEditingFragment extends BaseSettingsFragment implements OnPreferenceChanged, ValidateOsmLoginListener, OsmAuthorizationListener { + public static final String TAG = OsmEditingFragment.class.getName(); + private static final Log log = PlatformUtil.getLog(OsmEditingFragment.class); + public static final String OPEN_PLUGIN = "open_plugins"; private static final String OSM_LOGOUT = "osm_logout"; private static final String OPEN_OSM_EDITS = "open_osm_edits"; public static final String OSM_LOGIN_DATA = "osm_login_data"; @@ -197,4 +200,17 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer public void authorizationCompleted() { updateAllSettings(); } + + public static boolean showInstance(FragmentManager fragmentManager) { + try { + OsmEditingFragment fragment = new OsmEditingFragment(); + fragmentManager.beginTransaction() + .add(R.id.fragmentContainer, fragment, TAG) + .addToBackStack(TAG) + .commitAllowingStateLoss(); + return true; + } catch (Exception e) { + return false; + } + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java index 324f1f9d13..b2fd8b0da3 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java @@ -1,10 +1,13 @@ package net.osmand.plus.osmedit.dialogs; +import android.content.Context; +import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; import android.view.LayoutInflater; import android.view.View; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; @@ -21,12 +24,14 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities.DialogButtonType; +import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter; import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionAdapterListener; import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionItem; import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo; +import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.osmedit.OsmEditingPlugin; import net.osmand.plus.osmedit.OsmEditingPlugin.UploadVisibility; import net.osmand.plus.osmedit.UploadGPXFilesTask; @@ -95,9 +100,15 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { visibilityDescription.setText(selectedUploadVisibility.getDescriptionId()); horizontalSelectionAdapter.notifyDataSetChanged(); } - }); - + LinearLayout account = sendOsmPoiView.findViewById(R.id.account_container); + account.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + showOpenStreetMapScreen(); + } + }); RecyclerView iconCategoriesRecyclerView = sendOsmPoiView.findViewById(R.id.description_view); iconCategoriesRecyclerView.setAdapter(horizontalSelectionAdapter); iconCategoriesRecyclerView.setLayoutManager(new LinearLayoutManager(app, RecyclerView.HORIZONTAL, false)); @@ -109,6 +120,15 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { items.add(titleItem); } + private void showOpenStreetMapScreen() { + Bundle params = new Bundle(); + params.putBoolean(OsmEditingFragment.OPEN_PLUGIN, true); + Context context = getView().getContext(); + Intent intent = getActivity().getIntent(); + MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); + getActivity().onBackPressed(); + } + @Override protected DialogButtonType getRightBottomButtonType() { return DialogButtonType.PRIMARY; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java index 5046165ba7..8e8e37934c 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java @@ -1,6 +1,8 @@ package net.osmand.plus.osmedit.dialogs; import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.ContextThemeWrapper; @@ -27,6 +29,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; +import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.osmedit.OsmNotesPoint; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter; @@ -129,6 +132,14 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen uploadAnonymously.setPadding(paddingSmall, 0, paddingSmall, 0); } }); + LinearLayout account = accountBlockView.findViewById(R.id.account_container); + account.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + showOpenStreetMapScreen(); + } + }); final SimpleBottomSheetItem bottomSheetItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder() .setCustomView(sendOsmNoteView) .create(); @@ -173,6 +184,14 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen } } + private void showOpenStreetMapScreen() { + Bundle params = new Bundle(); + params.putBoolean(OsmEditingFragment.OPEN_PLUGIN, true); + Context context = getView().getContext(); + Intent intent = getActivity().getIntent(); + MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); + } + @Override protected DialogButtonType getRightBottomButtonType() { return (DialogButtonType.PRIMARY); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index 748d9504f0..af4c92d4b9 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -1,11 +1,14 @@ package net.osmand.plus.osmedit.dialogs; import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.view.ContextThemeWrapper; import android.view.View; import android.widget.CompoundButton; import android.widget.EditText; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; @@ -22,6 +25,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.osmedit.OpenstreetmapPoint; +import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; @@ -84,12 +88,28 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { closeChangeSet.setPadding(paddingSmall, 0, paddingSmall, 0); } }); + LinearLayout account = sendOsmPoiView.findViewById(R.id.account_container); + account.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + showOpenStreetMapScreen(); + } + }); final SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder() .setCustomView(sendOsmPoiView) .create(); items.add(titleItem); } + private void showOpenStreetMapScreen() { + Bundle params = new Bundle(); + params.putBoolean(OsmEditingFragment.OPEN_PLUGIN, true); + Context context = getView().getContext(); + Intent intent = getActivity().getIntent(); + MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); + } + public static void showInstance(@NonNull FragmentManager fm, @NonNull OsmPoint[] points) { try { if (!fm.isStateSaved()) { From 6c3eda0faafccea3c7965ab940e640b0597e9ec9 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Thu, 19 Nov 2020 00:38:23 +0200 Subject: [PATCH 097/198] Update SendGpxBottomSheetFragment.java --- .../osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java index b2fd8b0da3..9a3209fdc3 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java @@ -126,7 +126,6 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { Context context = getView().getContext(); Intent intent = getActivity().getIntent(); MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); - getActivity().onBackPressed(); } @Override From a992e4cefc990b2e25a808c40b341ebcdf86e439 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Thu, 19 Nov 2020 20:56:40 +0200 Subject: [PATCH 098/198] Go back to previous activity, refactor --- .../net/osmand/plus/helpers/IntentHelper.java | 8 ----- .../plus/myplaces/FavoritesActivity.java | 17 ++++++++-- .../plus/osmedit/OsmEditingFragment.java | 29 ++++++++-------- .../dialogs/SendGpxBottomSheetFragment.java | 33 +++++++++++++------ .../SendOsmNoteBottomSheetFragment.java | 18 ++++------ .../dialogs/SendPoiBottomSheetFragment.java | 22 +++++-------- 6 files changed, 66 insertions(+), 61 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java index 7f3a9ca30c..a7d6dd7f79 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java @@ -21,7 +21,6 @@ import net.osmand.plus.activities.PluginsFragment; import net.osmand.plus.dashboard.DashboardOnMap.DashboardType; import net.osmand.plus.mapmarkers.MapMarkersDialogFragment; import net.osmand.plus.mapsource.EditMapSourceDialogFragment; -import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.search.QuickSearchDialogFragment; import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.OsmandSettings; @@ -235,13 +234,6 @@ public class IntentHelper { } mapActivity.setIntent(null); } - if (intent.hasExtra(OsmEditingFragment.OPEN_PLUGIN)) { - boolean openPlugins = intent.getBooleanExtra(OsmEditingFragment.OPEN_PLUGIN, false); - if (openPlugins) { - OsmEditingFragment.showInstance(mapActivity.getSupportFragmentManager()); - } - mapActivity.setIntent(null); - } if (intent.hasExtra(BaseSettingsFragment.OPEN_CONFIG_ON_MAP)) { switch (intent.getStringExtra(BaseSettingsFragment.OPEN_CONFIG_ON_MAP)) { case BaseSettingsFragment.MAP_CONFIG: diff --git a/OsmAnd/src/net/osmand/plus/myplaces/FavoritesActivity.java b/OsmAnd/src/net/osmand/plus/myplaces/FavoritesActivity.java index c77cfbfc0d..43e1e73cc8 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/FavoritesActivity.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/FavoritesActivity.java @@ -60,6 +60,8 @@ public class FavoritesActivity extends TabActivity { private int tabSize; private ImportHelper importHelper; + private ViewPager viewPager; + private Bundle intentParams = null; @Override @@ -80,7 +82,7 @@ public class FavoritesActivity extends TabActivity { List mTabs = getTabItems(); setTabs(mTabs); - ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); + viewPager = findViewById(R.id.pager); if (savedInstanceState == null) { Intent intent = getIntent(); if (intent != null && intent.hasExtra(MapActivity.INTENT_PARAMS)) { @@ -93,7 +95,7 @@ public class FavoritesActivity extends TabActivity { break; } } - mViewPager.setCurrentItem(pagerItem, false); + viewPager.setCurrentItem(pagerItem, false); } } } @@ -191,6 +193,17 @@ public class FavoritesActivity extends TabActivity { return mTabs; } + public Bundle storeCurrentState() { + int currentItem = viewPager.getCurrentItem(); + if (currentItem >= 0 && currentItem < fragList.size()) { + FavoritesFragmentStateHolder stateHolder = fragList.get(currentItem).get(); + if (stateHolder != null) { + return stateHolder.storeState(); + } + } + return null; + } + @Override public void onAttachFragment(Fragment fragment) { if (fragment instanceof FavoritesFragmentStateHolder) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index ad066bcb39..c590f80b95 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -9,6 +9,8 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; +import androidx.activity.OnBackPressedCallback; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; @@ -37,11 +39,8 @@ import static net.osmand.plus.osmedit.OsmEditingPlugin.OSM_EDIT_TAB; public class OsmEditingFragment extends BaseSettingsFragment implements OnPreferenceChanged, ValidateOsmLoginListener, OsmAuthorizationListener { - public static final String TAG = OsmEditingFragment.class.getName(); - private static final Log log = PlatformUtil.getLog(OsmEditingFragment.class); - public static final String OPEN_PLUGIN = "open_plugins"; private static final String OSM_LOGOUT = "osm_logout"; private static final String OPEN_OSM_EDITS = "open_osm_edits"; public static final String OSM_LOGIN_DATA = "osm_login_data"; @@ -53,6 +52,17 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); authorizationAdapter = app.getOsmOAuthHelper().getAuthorizationAdapter(); + + FragmentActivity activity = requireMyActivity(); + activity.getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { + public void handleOnBackPressed() { + MapActivity mapActivity = getMapActivity(); + if (mapActivity != null) { + mapActivity.launchPrevActivityIntent(); + } + dismiss(); + } + }); } @Override @@ -200,17 +210,4 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer public void authorizationCompleted() { updateAllSettings(); } - - public static boolean showInstance(FragmentManager fragmentManager) { - try { - OsmEditingFragment fragment = new OsmEditingFragment(); - fragmentManager.beginTransaction() - .add(R.id.fragmentContainer, fragment, TAG) - .addToBackStack(TAG) - .commitAllowingStateLoss(); - return true; - } catch (Exception e) { - return false; - } - } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java index 9a3209fdc3..ed982747b0 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java @@ -1,7 +1,5 @@ package net.osmand.plus.osmedit.dialogs; -import android.content.Context; -import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; @@ -31,16 +29,19 @@ import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter; import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionAdapterListener; import net.osmand.plus.mapcontextmenu.other.HorizontalSelectionAdapter.HorizontalSelectionItem; import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo; -import net.osmand.plus.osmedit.OsmEditingFragment; +import net.osmand.plus.myplaces.FavoritesActivity; import net.osmand.plus.osmedit.OsmEditingPlugin; import net.osmand.plus.osmedit.OsmEditingPlugin.UploadVisibility; import net.osmand.plus.osmedit.UploadGPXFilesTask; import net.osmand.plus.settings.backend.OsmandSettings; +import net.osmand.plus.settings.fragments.BaseSettingsFragment; import net.osmand.util.Algorithms; import java.util.ArrayList; import java.util.List; +import static net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType.OPEN_STREET_MAP_EDITING; + public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { public static final String TAG = SendGpxBottomSheetFragment.class.getSimpleName(); @@ -105,8 +106,11 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { account.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + FragmentActivity activity = getActivity(); + if (activity != null) { + showOpenStreetMapScreen(activity); + } dismiss(); - showOpenStreetMapScreen(); } }); RecyclerView iconCategoriesRecyclerView = sendOsmPoiView.findViewById(R.id.description_view); @@ -120,12 +124,21 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { items.add(titleItem); } - private void showOpenStreetMapScreen() { - Bundle params = new Bundle(); - params.putBoolean(OsmEditingFragment.OPEN_PLUGIN, true); - Context context = getView().getContext(); - Intent intent = getActivity().getIntent(); - MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); + protected static void showOpenStreetMapScreen(@NonNull FragmentActivity activity) { + if (activity instanceof MapActivity) { + BaseSettingsFragment.showInstance(activity, OPEN_STREET_MAP_EDITING); + } else { + Bundle prevIntentParams = null; + if (activity instanceof FavoritesActivity) { + prevIntentParams = ((FavoritesActivity) activity).storeCurrentState(); + } else if (activity.getIntent() != null) { + prevIntentParams = activity.getIntent().getExtras(); + } + Bundle params = new Bundle(); + params.putString(BaseSettingsFragment.OPEN_SETTINGS, OPEN_STREET_MAP_EDITING.name()); + + MapActivity.launchMapActivityMoveToTop(activity, prevIntentParams, null, params); + } } @Override diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java index 8e8e37934c..d26c1ac212 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java @@ -1,8 +1,6 @@ package net.osmand.plus.osmedit.dialogs; import android.app.Activity; -import android.content.Context; -import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.ContextThemeWrapper; @@ -16,6 +14,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import com.google.android.material.textfield.TextInputLayout; @@ -29,7 +28,6 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; -import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.osmedit.OsmNotesPoint; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter; @@ -43,6 +41,7 @@ import org.apache.commons.logging.Log; import static net.osmand.plus.UiUtilities.setupDialogButton; import static net.osmand.plus.osmedit.OsmEditingFragment.OSM_LOGIN_DATA; import static net.osmand.plus.osmedit.ValidateOsmLoginDetailsTask.ValidateOsmLoginListener; +import static net.osmand.plus.osmedit.dialogs.SendGpxBottomSheetFragment.showOpenStreetMapScreen; import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.OPENSTREETMAP_POINT; import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader; import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.SimpleProgressDialogPoiUploader; @@ -136,8 +135,11 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen account.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + FragmentActivity activity = getActivity(); + if (activity != null) { + showOpenStreetMapScreen(activity); + } dismiss(); - showOpenStreetMapScreen(); } }); final SimpleBottomSheetItem bottomSheetItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder() @@ -184,14 +186,6 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen } } - private void showOpenStreetMapScreen() { - Bundle params = new Bundle(); - params.putBoolean(OsmEditingFragment.OPEN_PLUGIN, true); - Context context = getView().getContext(); - Intent intent = getActivity().getIntent(); - MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); - } - @Override protected DialogButtonType getRightBottomButtonType() { return (DialogButtonType.PRIMARY); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index af4c92d4b9..42ba887996 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -1,8 +1,6 @@ package net.osmand.plus.osmedit.dialogs; import android.app.Activity; -import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.view.ContextThemeWrapper; import android.view.View; @@ -13,6 +11,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import net.osmand.PlatformUtil; @@ -25,7 +24,6 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.osmedit.OpenstreetmapPoint; -import net.osmand.plus.osmedit.OsmEditingFragment; import net.osmand.plus.osmedit.OsmPoint; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; @@ -35,7 +33,10 @@ import org.apache.commons.logging.Log; import java.util.HashMap; import java.util.Map; -import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.*; +import static net.osmand.plus.osmedit.dialogs.SendGpxBottomSheetFragment.showOpenStreetMapScreen; +import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.OPENSTREETMAP_POINT; +import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader; +import static net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.SimpleProgressDialogPoiUploader; public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { @@ -92,8 +93,11 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { account.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + FragmentActivity activity = getActivity(); + if (activity != null) { + showOpenStreetMapScreen(activity); + } dismiss(); - showOpenStreetMapScreen(); } }); final SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder() @@ -102,14 +106,6 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { items.add(titleItem); } - private void showOpenStreetMapScreen() { - Bundle params = new Bundle(); - params.putBoolean(OsmEditingFragment.OPEN_PLUGIN, true); - Context context = getView().getContext(); - Intent intent = getActivity().getIntent(); - MapActivity.launchMapActivityMoveToTop(context, intent != null ? intent.getExtras() : null, null, params); - } - public static void showInstance(@NonNull FragmentManager fm, @NonNull OsmPoint[] points) { try { if (!fm.isStateSaved()) { From 17b0b997ebc078c5a867a98c7db0a84c17f20798 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:15:19 -0500 Subject: [PATCH 099/198] Performance: Bulk operation can be used instead of iteration --- .../src/main/java/net/osmand/binary/CachedOsmandIndexes.java | 4 +--- OsmAnd/src/net/osmand/plus/TargetPointsHelper.java | 4 +--- .../plus/activities/search/SearchPoiFilterFragment.java | 4 +--- OsmAnd/src/net/osmand/plus/development/LogcatActivity.java | 5 ++--- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java b/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java index 4a4bec70a2..63c81d13fa 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/CachedOsmandIndexes.java @@ -241,9 +241,7 @@ public class CachedOsmandIndexes { cblock.type = mr.getType(); mi.cities.add(cblock); } - for(String s : index.getAdditionalTagsList()) { - mi.attributeTagsTable.add(s); - } + mi.attributeTagsTable.addAll(index.getAdditionalTagsList()); reader.addressIndexes.add(mi); reader.indexes.add(mi); } diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 07ef8df985..01ee06e16f 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -309,9 +309,7 @@ public class TargetPointsHelper { public List getIntermediatePointsNavigation() { List intermediatePoints = new ArrayList<>(); if (settings.USE_INTERMEDIATE_POINTS_NAVIGATION.get()) { - for (TargetPoint t : this.intermediatePoints) { - intermediatePoints.add(t); - } + intermediatePoints.addAll(this.intermediatePoints); } return intermediatePoints; } diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java index a1c4d466e1..6b3de30970 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchPoiFilterFragment.java @@ -166,9 +166,7 @@ public class SearchPoiFilterFragment extends OsmAndListFragment implements Searc } }); - for (AbstractPoiType p : res) { - filters.add(p); - } + filters.addAll(res); filters.add(poiFilters.getSearchByNamePOIFilter()); if (OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) != null) { filters.add(poiFilters.getNominatimPOIFilter()); diff --git a/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java b/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java index 20f5c4ba4a..af0f6bbbfd 100644 --- a/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/LogcatActivity.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -298,9 +299,7 @@ public class LogcatActivity extends ActionBarProgressActivity { LogcatActivity activity = logcatActivity.get(); if (activity != null) { boolean autoscroll = !activity.recyclerView.canScrollVertically(1); - for(String s : values) { - activity.logs.add(s); - } + activity.logs.addAll(Arrays.asList(values)); activity.adapter.notifyDataSetChanged(); if(autoscroll) { activity.recyclerView.scrollToPosition(activity.logs.size() - 1); From a35050b2e7f8d5624ca1370b5d8cbec4ec74efb4 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:15:54 -0500 Subject: [PATCH 100/198] Performance: Call to 'Arrays.asList()' with too few arguments --- .../src/main/java/net/osmand/search/core/SearchPhrase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java index 2a3fc59521..09dcdc372b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchPhrase.java @@ -720,7 +720,7 @@ public class SearchPhrase { if (result.containsKey(currRegionName)) { result.get(currRegionName).add(r); } else { - result.put(currRegionName, new ArrayList<>(Arrays.asList(r))); + result.put(currRegionName, new ArrayList<>(Collections.singletonList(r))); } it.remove(); } From 830a2275078214a2b989e8155fc777288c186918 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:16:18 -0500 Subject: [PATCH 101/198] Performance: Class initializer may be 'static' --- OsmAnd/src/net/osmand/plus/OsmAndFormatter.java | 2 +- .../osmand/core/samples/android/sample1/SampleFormatter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java b/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java index 92bcdef9a6..3fd1aa1adc 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndFormatter.java @@ -63,7 +63,7 @@ public class OsmAndFormatter { private static final char WEST = 'W'; private static final char EAST = 'E'; - { + static { fixed2.setMinimumFractionDigits(2); fixed1.setMinimumFractionDigits(1); fixed1.setMinimumIntegerDigits(1); diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java index 9397f5ea7d..6a340aa528 100644 --- a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SampleFormatter.java @@ -23,7 +23,7 @@ public class SampleFormatter { public final static float FEET_IN_ONE_METER = YARDS_IN_ONE_METER * 3f; private static final DecimalFormat fixed2 = new DecimalFormat("0.00"); private static final DecimalFormat fixed1 = new DecimalFormat("0.0"); - { + static { fixed2.setMinimumFractionDigits(2); fixed1.setMinimumFractionDigits(1); fixed1.setMinimumIntegerDigits(1); From 270e7e873d52d9ae30b7889e2a967d10d96cc8cb Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:17:52 -0500 Subject: [PATCH 102/198] Performance: 'Collection.toArray()' call style --- .../main/java/com/google/protobuf/ByteString.java | 2 +- .../mapbox_vector_tile/adapt/jts/MvtReader.java | 12 ++++++------ .../src/main/java/net/osmand/GPXUtilities.java | 2 +- .../main/java/net/osmand/data/Multipolygon.java | 4 ++-- .../java/net/osmand/map/TileSourceManager.java | 2 +- .../main/java/net/osmand/render/RenderingRule.java | 2 +- .../render/RenderingRuleStorageProperties.java | 2 +- .../net/osmand/render/RenderingRulesStorage.java | 4 ++-- .../main/java/net/osmand/router/GeneralRouter.java | 14 +++++++------- .../net/osmand/router/RoutePlannerFrontEnd.java | 2 +- .../net/osmand/router/RouteResultPreparation.java | 2 +- .../java/net/osmand/router/RoutingContext.java | 2 +- OsmAnd/src/net/osmand/access/NavigationInfo.java | 2 +- OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java | 4 ++-- OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java | 4 ++-- .../osmand/plus/activities/MapActivityActions.java | 2 +- .../plus/audionotes/AudioVideoNotesPlugin.java | 2 +- .../plus/dashboard/DashChooseAppDirFragment.java | 2 +- .../net/osmand/plus/dialogs/ConfigureMapMenu.java | 4 ++-- .../osmand/plus/download/DownloadFileHelper.java | 2 +- .../plus/download/ui/LocalIndexesFragment.java | 2 +- .../plus/download/ui/UpdatesIndexFragment.java | 4 ++-- .../net/osmand/plus/helpers/ExternalApiHelper.java | 2 +- .../DirectionIndicationDialogFragment.java | 2 +- .../plus/monitoring/OsmandMonitoringPlugin.java | 2 +- .../osmand/plus/myplaces/AvailableGPXFragment.java | 8 ++++---- .../osmand/plus/myplaces/TrackSegmentFragment.java | 2 +- .../src/net/osmand/plus/osmedit/AddPOIAction.java | 4 ++-- .../plus/osmedit/AdvancedEditPoiFragment.java | 4 ++-- .../net/osmand/plus/osmedit/OsmEditingPlugin.java | 2 +- .../net/osmand/plus/osmedit/OsmEditsFragment.java | 4 ++-- .../plus/osmedit/OsmEditsUploadListenerHelper.java | 2 +- .../osmedit/dialogs/PoiSubTypeDialogFragment.java | 2 +- .../osmedit/dialogs/PoiTypeDialogFragment.java | 2 +- .../net/osmand/plus/resources/ResourceManager.java | 6 +++--- .../src/net/osmand/plus/routing/RouteProvider.java | 2 +- .../src/net/osmand/plus/srtmplugin/SRTMPlugin.java | 2 +- .../net/osmand/plus/views/layers/AidlMapLayer.java | 2 +- .../osmand/plus/views/layers/MapControlsLayer.java | 2 +- .../plus/voice/AbstractPrologCommandPlayer.java | 2 +- .../plus/wikivoyage/data/TravelDbHelper.java | 4 ++-- .../wikivoyage/explore/ExploreTabFragment.java | 2 +- .../android/sample1/CurrentPositionHelper.java | 2 +- 43 files changed, 69 insertions(+), 69 deletions(-) diff --git a/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java b/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java index 73d831f6ee..cb1307d3b5 100644 --- a/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java +++ b/OsmAnd-java/src/main/java/com/google/protobuf/ByteString.java @@ -800,7 +800,7 @@ public abstract class ByteString implements Iterable { // Copy the information we need into local variables so as to hold // the lock for as short a time as possible. cachedFlushBuffers = - flushedBuffers.toArray(new ByteString[flushedBuffers.size()]); + flushedBuffers.toArray(new ByteString[0]); cachedBuffer = buffer; cachedBufferPos = bufferPos; } diff --git a/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java b/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java index 6083ca980e..73ce9eeb12 100644 --- a/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java +++ b/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile/adapt/jts/MvtReader.java @@ -322,7 +322,7 @@ public final class MvtReader { geoms.add(geomFactory.createLineString(nextCoordSeq)); } - return geoms.size() == 1 ? geoms.get(0) : geomFactory.createMultiLineString(geoms.toArray(new LineString[geoms.size()])); + return geoms.size() == 1 ? geoms.get(0) : geomFactory.createMultiLineString(geoms.toArray(new LineString[0])); } /** @@ -450,7 +450,7 @@ public final class MvtReader { return polygons.get(0); } else { - return geomFactory.createMultiPolygon(polygons.toArray(new Polygon[polygons.size()])); + return geomFactory.createMultiPolygon(polygons.toArray(new Polygon[0])); } } @@ -512,7 +512,7 @@ public final class MvtReader { if (area > 0d) { if (outerPoly != null) { - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); holes.clear(); } @@ -533,7 +533,7 @@ public final class MvtReader { if (outerPoly != null) { holes.toArray(); - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); } return polygons; @@ -569,7 +569,7 @@ public final class MvtReader { if (outerPoly == null || (outerArea < 0 == area < 0)) { if (outerPoly != null) { - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); holes.clear(); } @@ -590,7 +590,7 @@ public final class MvtReader { if (outerPoly != null) { holes.toArray(); - polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()]))); + polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0]))); } return polygons; diff --git a/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java b/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java index 1d1b1da020..b8835ff2c6 100644 --- a/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java +++ b/OsmAnd-java/src/main/java/net/osmand/GPXUtilities.java @@ -1247,7 +1247,7 @@ public class GPXUtilities { } } } - g.prepareInformation(fileTimestamp, splitSegments.toArray(new SplitSegment[splitSegments.size()])); + g.prepareInformation(fileTimestamp, splitSegments.toArray(new SplitSegment[0])); return g; } diff --git a/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java b/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java index bf8c0a4964..6fb6db0f3c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/Multipolygon.java @@ -61,9 +61,9 @@ public class Multipolygon { innerLinearRings.add(innerRing.toLinearRing()); } } - polygons.add(geometryFactory.createPolygon(outerRing.toLinearRing(), innerLinearRings.toArray(new LinearRing[innerLinearRings.size()]))); + polygons.add(geometryFactory.createPolygon(outerRing.toLinearRing(), innerLinearRings.toArray(new LinearRing[0]))); } - return geometryFactory.createMultiPolygon(polygons.toArray(new Polygon[polygons.size()])); + return geometryFactory.createMultiPolygon(polygons.toArray(new Polygon[0])); } public long getId() { 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 9885aa2fbf..0bdcda71c9 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java @@ -140,7 +140,7 @@ public class TileSourceManager { } } } - return randoms.toArray(new String[randoms.size()]); + return randoms.toArray(new String[0]); } public void setMinZoom(int minZoom) { diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java index 0ae4314dd9..b402cca664 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRule.java @@ -70,7 +70,7 @@ public class RenderingRule { i++; } } - properties = props.toArray(new RenderingRuleProperty[props.size()]); + properties = props.toArray(new RenderingRuleProperty[0]); } private int getPropertyIndex(String property){ diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java index 3eafb803dd..4ae767561e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRuleStorageProperties.java @@ -318,7 +318,7 @@ public class RenderingRuleStorageProperties { } public RenderingRuleProperty[] getPoperties() { - return rules.toArray(new RenderingRuleProperty[rules.size()]); + return rules.toArray(new RenderingRuleProperty[0]); } public List getCustomRules() { diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java index d4d97d547c..11ac95cbd5 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java @@ -492,10 +492,10 @@ public class RenderingRulesStorage { } public String[] getRenderingAttributeNames() { - return renderingAttributes.keySet().toArray(new String[renderingAttributes.size()]); + return renderingAttributes.keySet().toArray(new String[0]); } public RenderingRule[] getRenderingAttributeValues() { - return renderingAttributes.values().toArray(new RenderingRule[renderingAttributes.size()]); + return renderingAttributes.values().toArray(new RenderingRule[0]); } public RenderingRule[] getRules(int state){ diff --git a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java index 537e3a5f74..e6d19c1d58 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/GeneralRouter.java @@ -754,21 +754,21 @@ public class GeneralRouter implements VehicleRouter { } public RouteAttributeEvalRule[] getRules() { - return rules.toArray(new RouteAttributeEvalRule[rules.size()]); + return rules.toArray(new RouteAttributeEvalRule[0]); } public String[] getParamKeys() { if(paramContext == null) { return new String[0]; } - return paramContext.vars.keySet().toArray(new String[paramContext.vars.size()]); + return paramContext.vars.keySet().toArray(new String[0]); } public String[] getParamValues() { if(paramContext == null) { return new String[0]; } - return paramContext.vars.values().toArray(new String[paramContext.vars.size()]); + return paramContext.vars.values().toArray(new String[0]); } private Object evaluate(RouteDataObject ro) { @@ -988,19 +988,19 @@ public class GeneralRouter implements VehicleRouter { public RouteAttributeExpression[] getExpressions() { - return expressions.toArray(new RouteAttributeExpression[expressions.size()]); + return expressions.toArray(new RouteAttributeExpression[0]); } public String[] getParameters() { - return parameters.toArray(new String[parameters.size()]); + return parameters.toArray(new String[0]); } public String[] getTagValueCondDefTag() { - return tagValueCondDefTag.toArray(new String[tagValueCondDefTag.size()]); + return tagValueCondDefTag.toArray(new String[0]); } public String[] getTagValueCondDefValue() { - return tagValueCondDefValue.toArray(new String[tagValueCondDefValue.size()]); + return tagValueCondDefValue.toArray(new String[0]); } public boolean[] getTagValueCondDefNot() { diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java index 17eb567813..74dceb13a1 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java @@ -918,7 +918,7 @@ public class RoutePlannerFrontEnd { private List runNativeRouting(final RoutingContext ctx, RouteSegment recalculationEnd) throws IOException { refreshProgressDistance(ctx); - RouteRegion[] regions = ctx.reverseMap.keySet().toArray(new BinaryMapRouteReaderAdapter.RouteRegion[ctx.reverseMap.size()]); + RouteRegion[] regions = ctx.reverseMap.keySet().toArray(new RouteRegion[0]); ctx.checkOldRoutingFiles(ctx.startX, ctx.startY); ctx.checkOldRoutingFiles(ctx.targetX, ctx.targetY); diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java index d7ebbaba8f..4df69c3adc 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java @@ -1717,7 +1717,7 @@ public class RouteResultPreparation { } } } - Integer[] array = possibleTurns.toArray(new Integer[possibleTurns.size()]); + Integer[] array = possibleTurns.toArray(new Integer[0]); Arrays.sort(array, new Comparator() { @Override diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java index 3bfbaec0da..584be83bb3 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java @@ -802,7 +802,7 @@ public class RoutingContext { } public BinaryMapIndexReader[] getMaps() { - return map.keySet().toArray(new BinaryMapIndexReader[map.size()]); + return map.keySet().toArray(new BinaryMapIndexReader[0]); } public int getVisitedSegments() { diff --git a/OsmAnd/src/net/osmand/access/NavigationInfo.java b/OsmAnd/src/net/osmand/access/NavigationInfo.java index 3e087e27ae..edd296b38a 100644 --- a/OsmAnd/src/net/osmand/access/NavigationInfo.java +++ b/OsmAnd/src/net/osmand/access/NavigationInfo.java @@ -373,7 +373,7 @@ public class NavigationInfo implements OsmAndCompassListener, OsmAndLocationList dialog.cancel(); } }); - info.setItems(attributes.toArray(new String[attributes.size()]), new DialogInterface.OnClickListener() { + info.setItems(attributes.toArray(new String[0]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java index d85d6ddd68..d188a7d0ee 100644 --- a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java @@ -208,7 +208,7 @@ public class ContextMenuAdapter { } items.removeAll(itemsToRemove); return new ContextMenuArrayAdapter(activity, layoutId, R.id.title, - items.toArray(new ContextMenuItem[items.size()]), app, lightTheme, changeAppModeListener); + items.toArray(new ContextMenuItem[0]), app, lightTheme, changeAppModeListener); } public class ContextMenuArrayAdapter extends ArrayAdapter { @@ -643,7 +643,7 @@ public class ContextMenuAdapter { } public static OnItemDeleteAction makeDeleteAction(final List prefs) { - return makeDeleteAction(prefs.toArray(new OsmandPreference[prefs.size()])); + return makeDeleteAction(prefs.toArray(new OsmandPreference[0])); } private static void resetSetting(ApplicationMode appMode, OsmandPreference preference, boolean profileOnly) { diff --git a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java index 2651e7b988..026987d13b 100644 --- a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java +++ b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java @@ -408,10 +408,10 @@ public class GpxSelectionHelper { boolean split = true; if (group.splitDistance > 0) { List trackSegments = r.splitByDistance(group.splitDistance, joinSegments); - as = trackSegments.toArray(new GPXTrackAnalysis[trackSegments.size()]); + as = trackSegments.toArray(new GPXTrackAnalysis[0]); } else if (group.splitTime > 0) { List trackSegments = r.splitByTime(group.splitTime, joinSegments); - as = trackSegments.toArray(new GPXTrackAnalysis[trackSegments.size()]); + as = trackSegments.toArray(new GPXTrackAnalysis[0]); } else { split = false; as = new GPXTrackAnalysis[] {GPXTrackAnalysis.segment(0, r)}; diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 749c5371ea..5a6a7560a5 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -1148,7 +1148,7 @@ public class MapActivityActions implements DialogProvider { items.add(getString(R.string.show_location)); items.add(getString(R.string.shared_string_show_details)); AlertDialog.Builder menu = new AlertDialog.Builder(mapActivity); - menu.setItems(items.toArray(new String[items.size()]), new DialogInterface.OnClickListener() { + menu.setItems(items.toArray(new String[0]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { dialog.dismiss(); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index b8d4ef0c92..92b991757b 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -1860,7 +1860,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { protected Recording[] getRecordingsSorted() { checkRecordings(); Collection allObjects = getAllRecordings(); - Recording[] res = allObjects.toArray(new Recording[allObjects.size()]); + Recording[] res = allObjects.toArray(new Recording[0]); Arrays.sort(res, new Comparator() { @Override diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java index 883010ea46..e976d0b4ea 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashChooseAppDirFragment.java @@ -223,7 +223,7 @@ public class DashChooseAppDirFragment { paths.add(""); types.add(OsmandSettings.EXTERNAL_STORAGE_TYPE_SPECIFIED); - editalert.setSingleChoiceItems(items.toArray(new String[items.size()]), selected, + editalert.setSingleChoiceItems(items.toArray(new String[0]), selected, new DialogInterface.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java index 858f80e018..6e3b7fba8a 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java @@ -404,7 +404,7 @@ public class ConfigureMapMenu { bld.setTitle(R.string.map_magnifier); bld.setNegativeButton(R.string.shared_string_dismiss, null); DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter( - values.toArray(new String[values.size()]), nightMode, i, app, selectedProfileColor, themeRes, new View.OnClickListener() { + values.toArray(new String[0]), nightMode, i, app, selectedProfileColor, themeRes, new View.OnClickListener() { @Override public void onClick(View v) { int which = (int) v.getTag(); @@ -639,7 +639,7 @@ public class ConfigureMapMenu { return mp.get(lhs).compareTo(mp.get(rhs)); } }); - return lst.toArray(new String[lst.size()]); + return lst.toArray(new String[0]); } public static String[] getMapNamesValues(Context ctx, String[] ids) { diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java b/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java index 36d2f21b85..c85d63361a 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadFileHelper.java @@ -349,7 +349,7 @@ public class DownloadFileHelper { private int currentRead = 0; public CountingMultiInputStream(List streams) { - this.delegate = streams.toArray(new InputStream[streams.size()]); + this.delegate = streams.toArray(new InputStream[0]); } @Override diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java index 4cf4f1154a..9160160973 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java @@ -582,7 +582,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement operationTask = null; } if (operationTask != null) { - operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new LocalIndexInfo[selectedItems.size()])); + operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new LocalIndexInfo[0])); } if (actionMode != null) { actionMode.finish(); diff --git a/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java index 65baa93718..f7362edc76 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java @@ -166,12 +166,12 @@ public class UpdatesIndexFragment extends OsmAndListFragment implements Download dialog.setPositiveButton(R.string.shared_string_update, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - getMyActivity().startDownload(indexItems.toArray(new IndexItem[indexItems.size()])); + getMyActivity().startDownload(indexItems.toArray(new IndexItem[0])); } }); dialog.create().show(); } else { - getMyActivity().startDownload(indexItems.toArray(new IndexItem[indexItems.size()])); + getMyActivity().startDownload(indexItems.toArray(new IndexItem[0])); } } }); diff --git a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java index 6222663a00..da5f6359b0 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java @@ -871,7 +871,7 @@ public class ExternalApiHelper { searchTypes.add(HOUSE); searchTypes.add(STREET_INTERSECTION); } - searchSettings = searchSettings.setSearchTypes(searchTypes.toArray(new ObjectType[searchTypes.size()])); + searchSettings = searchSettings.setSearchTypes(searchTypes.toArray(new ObjectType[0])); core.search(searchQuery, false, null, searchSettings); } diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java index d624ec7947..27ad98ece4 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java @@ -277,7 +277,7 @@ public class DirectionIndicationDialogFragment extends BaseOsmAndDialogFragment } } ((ImageView) mainView.findViewById(R.id.action_bar_image)) - .setImageDrawable(new LayerDrawable(imgList.toArray(new Drawable[imgList.size()]))); + .setImageDrawable(new LayerDrawable(imgList.toArray(new Drawable[0]))); } else { mainView.findViewById(R.id.action_bar_image_container).setVisibility(View.GONE); } diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java index ec255b1bbc..e6c5f2ff1b 100644 --- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java +++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java @@ -73,7 +73,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin { super(app); liveMonitoringHelper = new LiveMonitoringHelper(app); final List am = ApplicationMode.allPossibleValues(); - ApplicationMode.regWidgetVisibility("monitoring", am.toArray(new ApplicationMode[am.size()])); + ApplicationMode.regWidgetVisibility("monitoring", am.toArray(new ApplicationMode[0])); settings = app.getSettings(); pluginPreferences.add(settings.SAVE_TRACK_TO_GPX); pluginPreferences.add(settings.SAVE_TRACK_INTERVAL); diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java index 6bac2a31ea..48c1dca711 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java @@ -554,7 +554,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement public void doAction(int actionResId) { if (actionResId == R.string.shared_string_delete) { operationTask = new DeleteGpxTask(); - operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new GpxInfo[selectedItems.size()])); + operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedItems.toArray(new GpxInfo[0])); } else { operationTask = null; } @@ -1009,7 +1009,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement List progress = new ArrayList<>(); loadGPXFolder(mapPath, result, loadTask, progress, ""); if (!progress.isEmpty()) { - loadTask.loadFile(progress.toArray(new GpxInfo[progress.size()])); + loadTask.loadFile(progress.toArray(new GpxInfo[0])); } } } @@ -1029,7 +1029,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement result.add(info); progress.add(info); if (progress.size() > 7) { - loadTask.loadFile(progress.toArray(new GpxInfo[progress.size()])); + loadTask.loadFile(progress.toArray(new GpxInfo[0])); progress.clear(); } } @@ -1475,7 +1475,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement list.add(GPXDataSetType.SLOPE); } if (list.size() > 0) { - gpxItem.chartTypes = list.toArray(new GPXDataSetType[list.size()]); + gpxItem.chartTypes = list.toArray(new GPXDataSetType[0]); } final OsmandSettings settings = app.getSettings(); settings.setMapLocationToShow(gpxItem.locationStart.lat, gpxItem.locationStart.lon, diff --git a/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java index e53b51cf39..08c68ac3e8 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java @@ -410,7 +410,7 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit tabTypeList.add(GPXTabItemType.GPX_TAB_ITEM_SPEED); } } - tabTypes = tabTypeList.toArray(new GPXTabItemType[tabTypeList.size()]); + tabTypes = tabTypeList.toArray(new GPXTabItemType[0]); Context context = tabs.getContext(); titles = new String[tabTypes.length]; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java b/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java index 1db6bd0542..a46ddb0ba1 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/AddPOIAction.java @@ -222,8 +222,8 @@ public class AddPOIAction extends QuickAction { } addPoiToStringSet(getPoiTypes(activity).getOtherMapCategory(), tagKeys, valueKeys); tagKeys.addAll(EditPoiDialogFragment.BASIC_TAGS); - mAdapter.setTagData(tagKeys.toArray(new String[tagKeys.size()])); - mAdapter.setValueData(valueKeys.toArray(new String[valueKeys.size()])); + mAdapter.setTagData(tagKeys.toArray(new String[0])); + mAdapter.setValueData(valueKeys.toArray(new String[0])); Button addTagButton = (Button) view.findViewById(R.id.addTagButton); addTagButton.setOnClickListener(new View.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java index b538ccd0c5..a99afa7a22 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java @@ -89,8 +89,8 @@ public class AdvancedEditPoiFragment extends BaseOsmAndFragment addPoiToStringSet(abstractPoiType, tagKeys, valueKeys); } addPoiToStringSet(mapPoiTypes.getOtherMapCategory(), tagKeys, valueKeys); - mAdapter.setTagData(tagKeys.toArray(new String[tagKeys.size()])); - mAdapter.setValueData(valueKeys.toArray(new String[valueKeys.size()])); + mAdapter.setTagData(tagKeys.toArray(new String[0])); + mAdapter.setValueData(valueKeys.toArray(new String[0])); Button addTagButton = (Button) view.findViewById(R.id.addTagButton); addTagButton.setOnClickListener(new View.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index 6382acb107..90da6cc65d 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -415,7 +415,7 @@ public class OsmEditingPlugin extends OsmandPlugin { public void onClick(DialogInterface dialog, int which) { List selectedItems = f.getSelectedItems(); sendGPXFiles(activity, f, - selectedItems.toArray(new GpxInfo[selectedItems.size()])); + selectedItems.toArray(new GpxInfo[0])); } }); return true; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 3c1733f7ac..e647c63f8f 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -296,7 +296,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements ProgressDial item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - uploadItems(osmEditsSelected.toArray(new OsmPoint[osmEditsSelected.size()])); + uploadItems(osmEditsSelected.toArray(new OsmPoint[0])); mode.finish(); return true; } @@ -594,7 +594,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements ProgressDial public void onClick(int type) { List points = getPointsToExport(); new BackupOpenstreetmapPointAsyncTask(type, exportType).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, - points.toArray(new OsmPoint[points.size()])); + points.toArray(new OsmPoint[0])); } }; } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java index 1d09b522ab..4b6078265d 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java @@ -221,7 +221,7 @@ public class OsmEditsUploadListenerHelper implements OsmEditsUploadListener { new UploadingMultipleErrorDialogFragment(); Bundle bundle = new Bundle(); bundle.putSerializable(POINTS_WITH_ERRORS, - pointsWithErrors.toArray(new OsmPoint[pointsWithErrors.size()])); + pointsWithErrors.toArray(new OsmPoint[0])); bundle.putStringArray(POINT_NAMES, pointNames); bundle.putBooleanArray(HAS_ERROR, hasErrors); fragment.setArguments(bundle); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java index 53b9ce0677..4c75a384ae 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiSubTypeDialogFragment.java @@ -36,7 +36,7 @@ public class PoiSubTypeDialogFragment extends DialogFragment { } else { addCategory(a, strings); } - final String[] subCats = strings.toArray(new String[strings.size()]); + final String[] subCats = strings.toArray(new String[0]); builder.setItems(subCats, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java index cdcf88fb0a..2278d8e8bd 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/PoiTypeDialogFragment.java @@ -31,7 +31,7 @@ public class PoiTypeDialogFragment extends DialogFragment { categories.add(category); } } - builder.setItems(vals.toArray(new String[vals.size()]), new Dialog.OnClickListener() { + builder.setItems(vals.toArray(new String[0]), new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { PoiCategory aType = categories.get(which); diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index a87d5004bd..b70ded655b 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -1100,7 +1100,7 @@ public class ResourceManager { } } } - return readers.toArray(new BinaryMapIndexReader[readers.size()]); + return readers.toArray(new BinaryMapIndexReader[0]); } public BinaryMapIndexReader[] getTransportRoutingMapFiles() { @@ -1114,7 +1114,7 @@ public class ResourceManager { } } } - return readers.toArray(new BinaryMapIndexReader[readers.size()]); + return readers.toArray(new BinaryMapIndexReader[0]); } public BinaryMapIndexReader[] getQuickSearchFiles() { @@ -1129,7 +1129,7 @@ public class ResourceManager { } } } - return readers.toArray(new BinaryMapIndexReader[readers.size()]); + return readers.toArray(new BinaryMapIndexReader[0]); } public Map getIndexFileNames() { diff --git a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java index a21b8898e6..37bb29d148 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java +++ b/OsmAnd/src/net/osmand/plus/routing/RouteProvider.java @@ -121,7 +121,7 @@ public class RouteProvider { list.add(r); } } - return list.toArray(new RouteService[list.size()]); + return list.toArray(new RouteService[0]); } } diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java index 7035a18863..9e66f72f74 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java @@ -456,7 +456,7 @@ public class SRTMPlugin extends OsmandPlugin { List possibleValuesList = new ArrayList<>(Arrays.asList(p.getPossibleValues())); possibleValuesList.remove(CONTOUR_LINES_DISABLED_VALUE); - final String[] possibleValues = possibleValuesList.toArray(new String[possibleValuesList.size()]); + final String[] possibleValues = possibleValuesList.toArray(new String[0]); int i = possibleValuesList.indexOf(pref.get()); if (i >= 0) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java index 580f0c3490..df110a14cb 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java @@ -181,7 +181,7 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider } if (imageRequests.size() > 0) { - executeTaskInBackground(new PointImageReaderTask(this), imageRequests.toArray(new String[imageRequests.size()])); + executeTaskInBackground(new PointImageReaderTask(this), imageRequests.toArray(new String[0])); } } mapTextLayer.putData(this, displayedPoints); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java index 6a4cf344c7..9a24d0aba6 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java @@ -1387,7 +1387,7 @@ public class MapControlsLayer extends OsmandMapLayer { } bld.setTitle(R.string.map_magnifier); - bld.setSingleChoiceItems(values.toArray(new String[values.size()]), i, + bld.setSingleChoiceItems(values.toArray(new String[0]), i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { diff --git a/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java b/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java index fe17c52ab5..b0b0be8baf 100644 --- a/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java +++ b/OsmAnd/src/net/osmand/plus/voice/AbstractPrologCommandPlayer.java @@ -222,7 +222,7 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat @Override public List execute(List listCmd){ - Struct list = new Struct(listCmd.toArray(new Term[listCmd.size()])); + Struct list = new Struct(listCmd.toArray(new Term[0])); Var result = new Var("RESULT"); //$NON-NLS-1$ List files = new ArrayList(); if(prologSystem == null) { diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java index 8ed755cf50..df591f4020 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java @@ -216,7 +216,7 @@ public class TravelDbHelper { } query += ") "; if (params.size() > 0) { - SQLiteCursor cursor = conn.rawQuery(query, params.toArray(new String[params.size()])); + SQLiteCursor cursor = conn.rawQuery(query, params.toArray(new String[0])); if (cursor != null) { if (cursor.moveToFirst()) { do { @@ -468,7 +468,7 @@ public class TravelDbHelper { params.add(lang); } } - SQLiteCursor cursor = conn.rawQuery(query.toString(), params.toArray(new String[params.size()])); + SQLiteCursor cursor = conn.rawQuery(query.toString(), params.toArray(new String[0])); if (cursor != null && cursor.moveToFirst()) { do { WikivoyageSearchResult rs = new WikivoyageSearchResult(); diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java index bedaa96810..88e814773b 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/ExploreTabFragment.java @@ -341,7 +341,7 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv res.add(item); } } - return res.toArray(new IndexItem[res.size()]); + return res.toArray(new IndexItem[0]); } @NonNull diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java index e490925754..9be931434e 100644 --- a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/CurrentPositionHelper.java @@ -128,7 +128,7 @@ public class CurrentPositionHelper { } private void initCtx(SampleApplication app, List checkReaders) { - BinaryMapIndexReader[] rs = checkReaders.toArray(new BinaryMapIndexReader[checkReaders.size()]); + BinaryMapIndexReader[] rs = checkReaders.toArray(new BinaryMapIndexReader[0]); if (rs.length > 0) { RoutingConfiguration defCfg = RoutingConfiguration.getDefault().build("geocoding", 10, new HashMap()); From 6b161701688fb82cff942f2e5673f3844105e60c Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:19:27 -0500 Subject: [PATCH 103/198] Performance: Iteration over 'keySet()' may be optimized --- .../osmand/binary/BinaryMapIndexReader.java | 5 +++-- .../java/net/osmand/map/TileSourceManager.java | 4 ++-- .../java/net/osmand/osm/MapRenderingTypes.java | 5 +++-- .../java/net/osmand/osm/edit/EntityParser.java | 5 +++-- .../java/net/osmand/osm/io/NetworkUtils.java | 4 ++-- .../render/RenderingRulesStoragePrinter.java | 12 ++++++------ .../net/osmand/util/GeoPointParserUtil.java | 4 ++-- OsmAnd/src/net/osmand/AndroidNetworkUtils.java | 4 ++-- .../osmand/plus/AppVersionUpgradeOnInit.java | 10 ++++++---- .../net/osmand/plus/FavouritesDbHelper.java | 10 ++++++---- .../plus/activities/SavingTrackHelper.java | 11 ++++++----- .../osmand/plus/api/FileSettingsAPIImpl.java | 6 +++--- ...WptCategoriesBottomSheetDialogFragment.java | 5 +++-- .../osmand/plus/osmedit/OsmEditsFragment.java | 6 +++--- .../osmedit/OsmEditsUploadListenerHelper.java | 9 +++++---- .../net/osmand/plus/poi/PoiFiltersHelper.java | 7 ++++--- .../src/net/osmand/plus/poi/PoiUIFilter.java | 18 +++++++++--------- .../plus/render/MapRenderRepositories.java | 5 +++-- .../osmand/plus/srtmplugin/TerrainLayer.java | 5 +++-- .../plus/views/layers/ContextMenuLayer.java | 10 ++++++---- .../osmand/plus/views/layers/MapTextLayer.java | 5 +++-- 21 files changed, 83 insertions(+), 67 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java index f9015ec48d..5e45a893ba 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java @@ -2501,8 +2501,9 @@ public class BinaryMapIndexReader { } } } - for (MapObject e : resMap.keySet()) { - Street s = resMap.get(e); + for (Entry entry : resMap.entrySet()) { + MapObject e = entry.getKey(); + Street s = entry.getValue(); if (e instanceof Building && MapUtils.getDistance(e.getLocation(), lat, lon) < 40) { Building b = (Building) e; System.out.println(b.getName() + " " + s); 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 0bdcda71c9..d9924dc9c6 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java @@ -518,8 +518,8 @@ public class TileSourceManager { } if (override || !metainfo.exists()) { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(metainfo))); - for (String key : properties.keySet()) { - writer.write("[" + key + "]\n" + properties.get(key) + "\n"); + for (Map.Entry entry : properties.entrySet()) { + writer.write("[" + entry.getKey() + "]\n" + entry.getValue() + "\n"); } writer.close(); } diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java index d996678e44..bcbcbfc2b0 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java @@ -96,8 +96,9 @@ public abstract class MapRenderingTypes { Map common = new HashMap(); String ATTACHED_KEY = "seamark:attached"; String type = ""; - for (String s : tags.keySet()) { - String value = tags.get(s); + for (Entry entry : tags.entrySet()) { + String s = entry.getKey(); + String value = entry.getValue(); if (s.equals("seamark:type")) { type = value; common.put(ATTACHED_KEY, openSeaType(value)); diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java b/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java index 8c3aef8163..9caa54b55c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/edit/EntityParser.java @@ -33,9 +33,10 @@ public class EntityParser { if (mo.getEnName(false).length() == 0) { mo.setEnName(tags.get(OSMTagKey.NAME_EN.getValue())); } - for (String ts : tags.keySet()) { + for (Map.Entry entry : tags.entrySet()) { + String ts = entry.getKey(); if (ts.startsWith("name:") && !ts.equals(OSMTagKey.NAME_EN.getValue())) { - mo.setName(ts.substring(("name:").length()), tags.get(ts)); + mo.setName(ts.substring(("name:").length()), entry.getValue()); } } if (mo.getName().length() == 0) { diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java b/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java index 28a1ec3fb9..e3d162826c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/io/NetworkUtils.java @@ -63,8 +63,8 @@ public class NetworkUtils { URL url; try { boolean firstPrm =!urlText.contains("?"); - for (String key : additionalMapData.keySet()) { - urlText += (firstPrm ? "?" : "&") + key + "=" + URLEncoder.encode(additionalMapData.get(key), "UTF-8"); + for (Map.Entry entry : additionalMapData.entrySet()) { + urlText += (firstPrm ? "?" : "&") + entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), "UTF-8"); firstPrm = false; } log.info("Start uploading file to " + urlText + " " +fileToUpload.getName()); diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java index 86d0c2cb73..3e36ae4e71 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java @@ -152,9 +152,9 @@ public class RenderingRulesStoragePrinter { for (int i = 0; i < 15; i++) { out.println("" + indent + ti + "RenderingRule rule" + i + " = null;"); } - for (String s : storage.renderingAttributes.keySet()) { - generateRenderingRule(storage, out, indent + ti, "rule", 0, storage.renderingAttributes.get(s)); - out.println("" + indent + ti + "storage.renderingAttributes.put(" + javaString(s) + ", rule0);"); + for (Entry entry : storage.renderingAttributes.entrySet()) { + generateRenderingRule(storage, out, indent + ti, "rule", 0, entry.getValue()); + out.println("" + indent + ti + "storage.renderingAttributes.put(" + javaString(entry.getKey()) + ", rule0);"); } out.println(""+indent +"}"); } @@ -242,9 +242,9 @@ public class RenderingRulesStoragePrinter { private void printJavaInitConstants(RenderingRulesStorage storage, PrintStream out, String indent, String ti) { out.println("\n" + indent + "public void initConstants() {"); - for (String s : storage.renderingConstants.keySet()) { - out.println("" + indent + ti + "storage.renderingConstants.put(" + javaString(s) + ", " - + javaString(storage.renderingConstants.get(s)) + ");"); + for (Entry entry : storage.renderingConstants.entrySet()) { + out.println("" + indent + ti + "storage.renderingConstants.put(" + javaString(entry.getKey()) + ", " + + javaString(entry.getValue()) + ");"); } out.println(""+indent +"}"); } diff --git a/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java b/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java index 1383f4ae4a..31605c33a2 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java @@ -803,10 +803,10 @@ public class GeoPointParserUtil { if (map.size() > 0) uriString += "?"; int i = 0; - for (String key : map.keySet()) { + for (Map.Entry entry : map.entrySet()) { if (i > 0) uriString += "&"; - uriString += key + "=" + map.get(key); + uriString += entry.getKey() + "=" + entry.getValue(); i++; } return uriString; diff --git a/OsmAnd/src/net/osmand/AndroidNetworkUtils.java b/OsmAnd/src/net/osmand/AndroidNetworkUtils.java index d1ca9aa7ab..f8710927ef 100644 --- a/OsmAnd/src/net/osmand/AndroidNetworkUtils.java +++ b/OsmAnd/src/net/osmand/AndroidNetworkUtils.java @@ -305,8 +305,8 @@ public class AndroidNetworkUtils { try { boolean firstPrm = !urlText.contains("?"); StringBuilder sb = new StringBuilder(urlText); - for (String key : additionalParams.keySet()) { - sb.append(firstPrm ? "?" : "&").append(key).append("=").append(URLEncoder.encode(additionalParams.get(key), "UTF-8")); + for (Map.Entry entry : additionalParams.entrySet()) { + sb.append(firstPrm ? "?" : "&").append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")); firstPrm = false; } urlText = sb.toString(); diff --git a/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java b/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java index 9eeec4542b..1a80997ab3 100644 --- a/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java +++ b/OsmAnd/src/net/osmand/plus/AppVersionUpgradeOnInit.java @@ -190,14 +190,15 @@ class AppVersionUpgradeOnInit { migrateEnumPreferences(); SharedPreferences globalSharedPreferences = (SharedPreferences) settings.getGlobalPreferences(); Map globalPrefsMap = globalSharedPreferences.getAll(); - for (String key : globalPrefsMap.keySet()) { + for (Map.Entry entry : globalPrefsMap.entrySet()) { + String key = entry.getKey(); OsmandPreference pref = settings.getPreference(key); if (pref instanceof CommonPreference) { CommonPreference commonPreference = (CommonPreference) pref; if (!commonPreference.isGlobal()) { for (ApplicationMode mode : ApplicationMode.allPossibleValues()) { if (!commonPreference.isSetForMode(mode) && !commonPreference.hasDefaultValueForMode(mode)) { - settings.setPreference(key, globalPrefsMap.get(key), mode); + settings.setPreference(key, entry.getValue(), mode); } } } @@ -205,12 +206,13 @@ class AppVersionUpgradeOnInit { } SharedPreferences defaultProfilePreferences = (SharedPreferences) settings.getProfilePreferences(ApplicationMode.DEFAULT); Map defaultPrefsMap = defaultProfilePreferences.getAll(); - for (String key : defaultPrefsMap.keySet()) { + for (Map.Entry entry : defaultPrefsMap.entrySet()) { + String key = entry.getKey(); OsmandPreference pref = settings.getPreference(key); if (pref instanceof CommonPreference) { CommonPreference commonPreference = (CommonPreference) pref; if (commonPreference.isGlobal() && !commonPreference.isSet()) { - settings.setPreference(key, defaultPrefsMap.get(key)); + settings.setPreference(key, entry.getValue()); } } } diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index c1db6114bc..2cd9a6ab4a 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -261,10 +261,11 @@ public class FavouritesDbHelper { private boolean merge(Map source, Map destination) { boolean changed = false; - for (String ks : source.keySet()) { + for (Map.Entry entry : source.entrySet()) { + String ks = entry.getKey(); if (!destination.containsKey(ks)) { changed = true; - destination.put(ks, source.get(ks)); + destination.put(ks, entry.getValue()); } } return changed; @@ -712,9 +713,10 @@ public class FavouritesDbHelper { public boolean isGroupVisible(String name) { String nameLowercase = name.toLowerCase(); - for (String groupName : flatGroups.keySet()) { + for (Map.Entry entry : flatGroups.entrySet()) { + String groupName = entry.getKey(); if (groupName.toLowerCase().equals(nameLowercase) || FavoriteGroup.getDisplayName(context, groupName).equals(name)) { - return flatGroups.get(groupName).isVisible(); + return entry.getValue().isVisible(); } } return false; diff --git a/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java b/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java index 5bf6c2b0a1..8b57c68e49 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java +++ b/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java @@ -208,11 +208,12 @@ public class SavingTrackHelper extends SQLiteOpenHelper { Map data = collectRecordedData(); // save file - for (final String f : data.keySet()) { + for (final Map.Entry entry : data.entrySet()) { + final String f = entry.getKey(); log.debug("Filename: " + f); File fout = new File(dir, f + IndexConstants.GPX_FILE_EXT); - if (!data.get(f).isEmpty()) { - WptPt pt = data.get(f).findPointToShow(); + if (!entry.getValue().isEmpty()) { + WptPt pt = entry.getValue().findPointToShow(); String fileName = f + "_" + new SimpleDateFormat("HH-mm_EEE", Locale.US).format(new Date(pt.time)); //$NON-NLS-1$ Integer trackStorageDirectory = ctx.getSettings().TRACK_STORAGE_DIRECTORY.get(); if (!OsmandSettings.REC_DIRECTORY.equals(trackStorageDirectory)) { @@ -235,13 +236,13 @@ public class SavingTrackHelper extends SQLiteOpenHelper { } } - Exception warn = GPXUtilities.writeGpxFile(fout, data.get(f)); + Exception warn = GPXUtilities.writeGpxFile(fout, entry.getValue()); if (warn != null) { warnings.add(warn.getMessage()); return new SaveGpxResult(warnings, new ArrayList()); } - GPXFile gpx = data.get(f); + GPXFile gpx = entry.getValue(); GPXTrackAnalysis analysis = gpx.getAnalysis(fout.lastModified()); GpxDataItem item = new GpxDataItem(fout, analysis); ctx.getGpxDbHelper().add(item); diff --git a/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java b/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java index 6a8b8a1b06..ab30a9a102 100644 --- a/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java +++ b/OsmAnd/src/net/osmand/plus/api/FileSettingsAPIImpl.java @@ -25,9 +25,9 @@ public class FileSettingsAPIImpl implements SettingsAPI { Properties props = new Properties(); FileInputStream fis = new FileInputStream(file); props.load(fis); - for (Object key : props.keySet()) { - String k = key.toString(); - map.put(k, props.get(key)); + for (Entry entry : props.entrySet()) { + String k = entry.getKey().toString(); + map.put(k, entry.getValue()); } } } diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java index d676372223..0c887488b7 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java @@ -81,7 +81,8 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee Map> pointsByCategories = gpxFile.getPointsByCategories(); - for (String category : pointsByCategories.keySet()) { + for (Map.Entry> entry : pointsByCategories.entrySet()) { + String category = entry.getKey(); final BottomSheetItemWithCompoundButton[] categoryItem = new BottomSheetItemWithCompoundButton[1]; categoryItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() .setChecked(!isUpdateMode || (categories != null && categories.contains(category))) @@ -96,7 +97,7 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee } }) .setCompoundButtonColorId(activeColorResId) - .setDescription(String.valueOf(pointsByCategories.get(category).size())) + .setDescription(String.valueOf(entry.getValue().size())) .setIcon(getContentIcon(R.drawable.ic_action_folder)) .setTitle(category.equals("") ? getString(R.string.shared_string_waypoints) : category) .setLayoutId(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index e647c63f8f..380eeb8850 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -684,9 +684,9 @@ public class OsmEditsFragment extends OsmAndListFragment implements ProgressDial @Override public void uploadEnded(Map loadErrorsMap) { super.uploadEnded(loadErrorsMap); - for (OsmPoint osmPoint : loadErrorsMap.keySet()) { - if (loadErrorsMap.get(osmPoint) == null) { - osmEdits.remove(osmPoint); + for (Map.Entry entry : loadErrorsMap.entrySet()) { + if (entry.getValue() == null) { + osmEdits.remove(entry.getKey()); } } recreateAdapterData(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java index 4b6078265d..cbc37e1ea2 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsUploadListenerHelper.java @@ -59,8 +59,8 @@ public class OsmEditsUploadListenerHelper implements OsmEditsUploadListener { } int uploaded = 0; int pointsNum = loadErrorsMap.keySet().size(); - for (OsmPoint point : loadErrorsMap.keySet()) { - if (loadErrorsMap.get(point) == null) { + for (String s : loadErrorsMap.values()) { + if (s == null) { uploaded++; } } @@ -200,13 +200,14 @@ public class OsmEditsUploadListenerHelper implements OsmEditsUploadListener { boolean[] hasErrors = new boolean[loadErrorsMap.keySet().size()]; ArrayList pointsWithErrors = new ArrayList<>(); int i = 0; - for (OsmPoint point : loadErrorsMap.keySet()) { + for (Map.Entry entry : loadErrorsMap.entrySet()) { + OsmPoint point = entry.getKey(); pointNames[i] = point.getGroup() == OsmPoint.Group.BUG ? ((OsmNotesPoint) point).getText() : ((OpenstreetmapPoint) point).getName(); pointNames[i] = TextUtils.isEmpty(pointNames[i]) ? "id:" + point.getId() : pointNames[i]; - hasErrors[i] = loadErrorsMap.get(point) != null; + hasErrors[i] = entry.getValue() != null; if (hasErrors[i]) { pointsWithErrors.add(point); } diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java index d586516fc5..93871dfca4 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java @@ -751,14 +751,15 @@ public class PoiFiltersHelper { } Map> types = p.getAcceptedTypes(); SQLiteStatement insertCategories = db.compileStatement("INSERT INTO " + CATEGORIES_NAME + " VALUES (?, ?, ?)"); - for (PoiCategory a : types.keySet()) { - if (types.get(a) == null) { + for (Map.Entry> entry : types.entrySet()) { + PoiCategory a = entry.getKey(); + if (entry.getValue() == null) { insertCategories.bindString(1, p.getFilterId()); insertCategories.bindString(2, a.getKeyName()); insertCategories.bindNull(3); insertCategories.execute(); } else { - for (String s : types.get(a)) { + for (String s : entry.getValue()) { insertCategories.bindString(1, p.getFilterId()); insertCategories.bindString(2, a.getKeyName()); insertCategories.bindString(3, s); diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java b/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java index 6629228696..1d3449640f 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiUIFilter.java @@ -535,20 +535,19 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable return getName(); } StringBuilder res = new StringBuilder(); - for (PoiCategory p : acceptedTypes.keySet()) { - LinkedHashSet set = acceptedTypes.get(p); + for (Entry> entry : acceptedTypes.entrySet()) { + LinkedHashSet set = entry.getValue(); if (set == null) { if (res.length() > 0) { res.append(", "); } - res.append(p.getTranslation()); + res.append(entry.getKey().getTranslation()); } if (res.length() > chars) { return res.toString(); } } - for (PoiCategory p : acceptedTypes.keySet()) { - LinkedHashSet set = acceptedTypes.get(p); + for (LinkedHashSet set : acceptedTypes.values()) { if (set != null) { for (String st : set) { if (res.length() > 0) { @@ -616,8 +615,8 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable public boolean areAllTypesAccepted() { if (poiTypes.getCategories(false).size() == acceptedTypes.size()) { - for (PoiCategory a : acceptedTypes.keySet()) { - if (acceptedTypes.get(a) != null) { + for (LinkedHashSet strings : acceptedTypes.values()) { + if (strings != null) { return false; } } @@ -711,8 +710,9 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable } private void putAllAcceptedTypes(Map> types) { - for (PoiCategory category : types.keySet()) { - LinkedHashSet typesSet = types.get(category); + for (Entry> entry : types.entrySet()) { + PoiCategory category = entry.getKey(); + LinkedHashSet typesSet = entry.getValue(); if (acceptedTypes.containsKey(category)) { if (acceptedTypes.get(category) != null && typesSet != null) { acceptedTypes.get(category).addAll(typesSet); diff --git a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java index 8bc8d1b51a..26985faa0a 100644 --- a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java +++ b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java @@ -311,8 +311,9 @@ public class MapRenderRepositories { } boolean containsJapanMapData = false; boolean useLive = context.getSettings().USE_OSM_LIVE_FOR_ROUTING.get(); - for (String mapName : files.keySet()) { - BinaryMapIndexReader fr = files.get(mapName); + for (Map.Entry entry : files.entrySet()) { + String mapName = entry.getKey(); + BinaryMapIndexReader fr = entry.getValue(); if (fr != null && (fr.containsMapData(leftX, topY, rightX, bottomY, zoom) || fr.containsRouteData(leftX, topY, rightX, bottomY, zoom))) { if (!nativeFiles.contains(mapName)) { diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java index b58dc807a8..4ffab5f7c7 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainLayer.java @@ -114,12 +114,13 @@ public class TerrainLayer extends MapTileLayer { } private void indexNonCachedResources(Map fileModified, Map rs) { - for(String filename : fileModified.keySet()) { + for(Map.Entry entry : fileModified.entrySet()) { + String filename = entry.getKey(); try { log.info("Indexing " + type + " file " + filename); ContentValues cv = new ContentValues(); cv.put("filename", filename); - cv.put("date_modified", fileModified.get(filename)); + cv.put("date_modified", entry.getValue()); SQLiteTileSource ts = rs.get(filename); QuadRect rt = ts.getRectBoundary(ZOOM_BOUNDARY, 1); if (rt != null) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java index 7a8690fe2d..9ba3ee5f46 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java @@ -232,20 +232,22 @@ public class ContextMenuLayer extends OsmandMapLayer { if (!pressedLatLonSmall.isEmpty() || !pressedLatLonFull.isEmpty()) { textScale = activity.getMyApplication().getSettings().TEXT_SCALE.get(); } - for (LatLon latLon : pressedLatLonSmall.keySet()) { + for (Entry entry : pressedLatLonSmall.entrySet()) { + LatLon latLon = entry.getKey(); int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude()); - BackgroundType background = pressedLatLonSmall.get(latLon); + BackgroundType background = entry.getValue(); Bitmap pressedBitmapSmall = background.getTouchBackground(activity, true); Rect destRect = getIconDestinationRect( x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), textScale); canvas.drawBitmap(pressedBitmapSmall, null, destRect, paint); } - for (LatLon latLon : pressedLatLonFull.keySet()) { + for (Entry entry : pressedLatLonFull.entrySet()) { + LatLon latLon = entry.getKey(); int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude()); int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude()); - BackgroundType background = pressedLatLonFull.get(latLon); + BackgroundType background = entry.getValue(); Bitmap pressedBitmap = background.getTouchBackground(activity, false); int offsetY = background.getOffsetY(activity, textScale); Rect destRect = getIconDestinationRect( diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java index 991bed0d55..fe9d82fe99 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapTextLayer.java @@ -61,7 +61,8 @@ public class MapTextLayer extends OsmandMapLayer { @Override public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { TIntHashSet set = new TIntHashSet(); - for (OsmandMapLayer l : textObjects.keySet()) { + for (Map.Entry> entry : textObjects.entrySet()) { + OsmandMapLayer l = entry.getKey(); MapTextProvider provider = (MapTextProvider) l; if (!view.isLayerVisible(l) || !provider.isTextVisible()) { continue; @@ -69,7 +70,7 @@ public class MapTextLayer extends OsmandMapLayer { updateTextSize(); paintTextIcon.setFakeBoldText(provider.isFakeBoldText()); - for (Object o : textObjects.get(l)) { + for (Object o : entry.getValue()) { LatLon loc = provider.getTextLocation(o); String name = provider.getText(o); if (loc == null || TextUtils.isEmpty(name)) { From 901827458f14156b9df036f171595f1a1754a636 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:20:30 -0500 Subject: [PATCH 104/198] Performance: 'List.remove()' called in loop --- .../java/net/osmand/router/TransportStopsRouteReader.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java index 7428196332..13da3748bb 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java @@ -325,9 +325,7 @@ public class TransportStopsRouteReader { // merge first part if (commonStopFirst < commonStopSecond || (commonStopFirst == commonStopSecond && firstSegment.get(0).isMissingStop())) { - for (int i = 0; i <= commonStopFirst; i++) { - firstSegment.remove(0); - } + firstSegment.subList(0, commonStopFirst + 1).clear(); for (int i = commonStopSecond; i >= 0; i--) { firstSegment.add(0, segmentToMerge.get(i)); } From 6f60a6298ce80b2b72db5f9c56dde482caa370a1 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:20:51 -0500 Subject: [PATCH 105/198] Performance: HashMap replaceable with EnumMap --- .../osmand/plus/settings/backend/backup/SettingsHelper.java | 5 +++-- .../plus/settings/fragments/ImportSettingsFragment.java | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 424bf42ad3..c07fe0f892 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -55,6 +55,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.EnumMap; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -473,7 +474,7 @@ public class SettingsHelper { public List getFilteredSettingsItems(List settingsTypes, boolean globalExport) { Map> dataList = getAdditionalData(globalExport); - Map> typesMap = new HashMap<>(); + Map> typesMap = new EnumMap<>(ExportSettingsType.class); for (List objects : dataList.values()) { for (ExportDataObject exportObject : objects) { typesMap.put(exportObject.getType(), exportObject.getItems()); @@ -828,7 +829,7 @@ public class SettingsHelper { } public static Map> getSettingsToOperate(List settingsItems, boolean importComplete) { - Map> settingsToOperate = new HashMap<>(); + Map> settingsToOperate = new EnumMap<>(ExportSettingsType.class); List profiles = new ArrayList<>(); List quickActions = new ArrayList<>(); List poiUIFilters = new ArrayList<>(); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java index 816d5517dc..f45abf6d18 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java @@ -76,6 +76,7 @@ import org.apache.commons.logging.Log; import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -200,7 +201,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment { } adapter = new ExportImportSettingsAdapter(app, nightMode, true); - Map> itemsMap = new HashMap<>(); + Map> itemsMap = new EnumMap<>(ExportSettingsType.class); if (settingsItems != null) { itemsMap = SettingsHelper.getSettingsToOperate(settingsItems, false); adapter.updateSettingsList(itemsMap); From 0fa24bdc8e71d34653ba555eb5f4ba9708742ab4 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:22:11 -0500 Subject: [PATCH 106/198] Performance: Redundant 'Collection.addAll()' call --- OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java | 3 +-- .../com/wdtinc/mapbox_vector_tile/adapt/jts/JtsAdapter.java | 3 +-- .../src/main/java/net/osmand/render/RenderingRulesStorage.java | 3 +-- OsmAnd/src/net/osmand/plus/TargetPointsHelper.java | 3 +-- OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java | 3 +-- OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java | 3 +-- OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java | 3 +-- 7 files changed, 7 insertions(+), 14 deletions(-) diff --git a/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java b/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java index 2663694fc3..02ec66309e 100644 --- a/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java +++ b/OsmAnd-java/src/main/java/com/google/protobuf/FieldSet.java @@ -242,8 +242,7 @@ final class FieldSet nextPolyGeom = new ArrayList<>(); boolean valid = true; // Add exterior ring @@ -362,7 +361,7 @@ public final class JtsAdapter { CoordinateArrays.reverse(exteriorRing.getCoordinates()); } - nextPolyGeom.addAll(linesToGeomCmds(exteriorRing, mvtClosePath, cursor, 2)); + final List nextPolyGeom = new ArrayList<>(linesToGeomCmds(exteriorRing, mvtClosePath, cursor, 2)); // Add interior rings diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java index 11ac95cbd5..cf97dd520c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStorage.java @@ -432,8 +432,7 @@ public class RenderingRulesStorage { for(RenderingRule ch : caseChildren) { List apply = applyRules; if(!renderingRule.getIfChildren().isEmpty()) { - apply = new ArrayList(); - apply.addAll(renderingRule.getIfChildren()); + apply = new ArrayList<>(renderingRule.getIfChildren()); if(applyRules != null) { apply.addAll(applyRules); } diff --git a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java index 01ee06e16f..4221ffa308 100644 --- a/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java +++ b/OsmAnd/src/net/osmand/plus/TargetPointsHelper.java @@ -345,8 +345,7 @@ public class TargetPointsHelper { } public List getIntermediatePointsWithTarget() { - List res = new ArrayList<>(); - res.addAll(this.intermediatePoints); + List res = new ArrayList<>(this.intermediatePoints); if(pointToNavigate != null) { res.add(pointToNavigate); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index 1aa35b8589..9d8030f0a2 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -367,8 +367,7 @@ public class MenuBuilder { @Override public void onFinish(List cardList) { if (!isHidden()) { - List cards = new ArrayList<>(); - cards.addAll(cardList); + List cards = new ArrayList(cardList); if (cardList.size() == 0) { cards.add(new NoImagesCard(mapActivity)); } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java index ecdc776c78..fbf1ae9b96 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java @@ -427,8 +427,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { f.setArguments(args); f.show(getChildFragmentManager(), "exceedDialog"); } else if (TextUtils.isEmpty(poiTypeEditText.getText())) { - HashSet tagsCopy = new HashSet<>(); - tagsCopy.addAll(editPoiData.getTagValues().keySet()); + new HashSet<>(editPoiData.getTagValues().keySet()); if (Algorithms.isEmpty(editPoiData.getTag(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue()))) { SaveExtraValidationDialogFragment f = new SaveExtraValidationDialogFragment(); Bundle args = new Bundle(); diff --git a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java index 93871dfca4..2e9e11c5c3 100644 --- a/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java +++ b/OsmAnd/src/net/osmand/plus/poi/PoiFiltersHelper.java @@ -231,9 +231,8 @@ public class PoiFiltersHelper { public List getTopDefinedPoiFilters(boolean includeDeleted) { List top = this.cacheTopStandardFilters; if (top == null) { - top = new ArrayList<>(); // user defined - top.addAll(getUserDefinedPoiFilters(true)); + top = new ArrayList<>(getUserDefinedPoiFilters(true)); // default MapPoiTypes poiTypes = application.getPoiTypes(); for (AbstractPoiType t : poiTypes.getTopVisibleFilters()) { From 0f9573e22e959bc16c24ebb0bded2323c0f9fb2a Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:22:27 -0500 Subject: [PATCH 107/198] Performance: Redundant call to 'String.format()' --- OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java b/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java index 8c2a4baf32..e4862d3bfe 100644 --- a/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java +++ b/OsmAnd-java/src/main/java/net/osmand/TspHeldKarp.java @@ -68,7 +68,7 @@ public class TspHeldKarp { } break; } - System.err.printf("."); + System.err.print("."); PriorityQueue children = new PriorityQueue(11, new NodeComparator()); children.add(exclude(currentNode, i, currentNode.parent[i])); for (int j = 0; j < n; j++) { From 8a7f50f3a6f1569d68bde3303930b0cc188a9e23 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:22:46 -0500 Subject: [PATCH 108/198] Performance: Set replaceable with EnumSet --- .../src/main/java/net/osmand/util/OpeningHoursParser.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java b/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java index 01fee5cd9e..f87a1d4d4e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java @@ -6,6 +6,7 @@ import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -1812,7 +1813,7 @@ public class OpeningHoursParser { TokenType currentParse = TokenType.TOKEN_UNKNOWN; TokenType currentParseParent = TokenType.TOKEN_UNKNOWN; List listOfPairs = new ArrayList<>(); - Set presentTokens = new HashSet<>(); + Set presentTokens = EnumSet.noneOf(TokenType.class); Token[] currentPair = new Token[2]; listOfPairs.add(currentPair); Token prevToken = null; From 608d93a8fa8000003d3579d3810cb5b651a94f56 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Thu, 19 Nov 2020 15:23:35 -0500 Subject: [PATCH 109/198] Performance: Replace '.equals("")' with '.isEmpty' --- .../main/java/net/osmand/binary/RouteDataObject.java | 4 ++-- .../osmand/render/RenderingRulesStoragePrinter.java | 2 +- .../net/osmand/render/RenderingRulesTransformer.java | 2 +- .../java/net/osmand/util/GeoPointParserUtil.java | 2 +- OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java | 10 +++++----- OsmAnd/src/net/osmand/plus/OsmandApplication.java | 12 ++++++------ .../src/net/osmand/plus/activities/HelpActivity.java | 2 +- .../plus/activities/actions/StartGPSStatus.java | 2 +- .../net/osmand/plus/dialogs/ConfigureMapMenu.java | 4 ++-- .../osmand/plus/helpers/MapMarkerDialogHelper.java | 2 +- .../net/osmand/plus/importfiles/ImportHelper.java | 2 +- .../plus/mapillary/MapillaryFiltersFragment.java | 10 +++++----- .../osmand/plus/mapillary/MapillaryVectorLayer.java | 2 +- ...SelectWptCategoriesBottomSheetDialogFragment.java | 2 +- .../mapmarkers/adapters/MapMarkersActiveAdapter.java | 2 +- .../mapmarkers/adapters/MapMarkersGroupsAdapter.java | 4 ++-- .../adapters/MapMarkersHistoryAdapter.java | 2 +- .../mapmarkers/adapters/MapMarkersListAdapter.java | 2 +- .../mapmarkers/adapters/TracksGroupsAdapter.java | 2 +- .../osmedit/dialogs/SendPoiBottomSheetFragment.java | 2 +- .../plus/osmedit/dialogs/SendPoiDialogFragment.java | 4 ++-- .../osmand/plus/render/MapRenderRepositories.java | 2 +- OsmAnd/src/net/osmand/plus/render/TextRenderer.java | 2 +- .../net/osmand/plus/resources/ResourceManager.java | 2 +- .../AddPointBottomSheetDialog.java | 2 +- .../bottomsheets/BooleanPreferenceBottomSheet.java | 4 ++-- .../bottomsheets/SelectFolderBottomSheet.java | 2 +- .../plus/settings/fragments/DataStorageFragment.java | 2 +- .../fragments/ProfileAppearanceFragment.java | 2 +- .../src/net/osmand/plus/srtmplugin/SRTMPlugin.java | 4 ++-- .../plus/views/AddGpxPointBottomSheetHelper.java | 2 +- 31 files changed, 50 insertions(+), 50 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java b/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java index bfe638d394..38fe091e89 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java @@ -329,7 +329,7 @@ public class RouteDataObject { public String getDestinationName(String lang, boolean transliterate, boolean direction){ //Issue #3289: Treat destination:ref like a destination, not like a ref String destRef = ((getDestinationRef(direction) == null) || getDestinationRef(direction).equals(getRef(lang, transliterate, direction))) ? "" : getDestinationRef(direction); - String destRef1 = ("".equals(destRef)) ? "" : destRef + ", "; + String destRef1 = (destRef != null && destRef.isEmpty()) ? "" : destRef + ", "; if(names != null) { int[] kt = names.keys(); @@ -373,7 +373,7 @@ public class RouteDataObject { return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(destinationDefault) : destinationDefault); } } - return "".equals(destRef) ? null : destRef; + return destRef != null && destRef.isEmpty() ? null : destRef; } public int getPoint31XTile(int i) { diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java index 3e36ae4e71..3acdeade26 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesStoragePrinter.java @@ -221,7 +221,7 @@ public class RenderingRulesStoragePrinter { mp+=", "; } } - if(mp.equals("")) { + if(mp.isEmpty()) { mp = "java.util.Collections.EMPTY_MAP"; } else { mp = "createMap(" +mp +")"; diff --git a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java index b41a741909..cd18ad958f 100644 --- a/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java +++ b/OsmAnd-java/src/main/java/net/osmand/render/RenderingRulesTransformer.java @@ -80,7 +80,7 @@ public class RenderingRulesTransformer { for (int i = 0; i < nl.getLength();) { Element app = (Element) nl.item(i); String pt = app.getAttribute("pattern"); - if (!pt.equals("")) { + if (!pt.isEmpty()) { if (!patterns.containsKey(pt)) { throw new IllegalStateException("Pattern '" + pt + "' is not defined"); } diff --git a/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java b/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java index 31605c33a2..951ae870e2 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/GeoPointParserUtil.java @@ -62,7 +62,7 @@ public class GeoPointParserUtil { private static Map getQueryParameters(String query) { final LinkedHashMap map = new LinkedHashMap(); - if (query != null && !query.equals("")) { + if (query != null && !query.isEmpty()) { String[] params = query.split("[&/]"); for (String p : params) { String[] keyValue = p.split("="); diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 2cd9a6ab4a..992a0e42c6 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -361,7 +361,7 @@ public class FavouritesDbHelper { } public boolean addFavourite(FavouritePoint p, boolean saveImmediately) { - if (p.getName().equals("") && flatGroups.containsKey(p.getCategory())) { + if (p.getName().isEmpty() && flatGroups.containsKey(p.getCategory())) { return true; } if (!p.isAddressSpecified()) { @@ -370,7 +370,7 @@ public class FavouritesDbHelper { context.getSettings().SHOW_FAVORITES.set(true); FavoriteGroup group = getOrCreateGroup(p, 0); - if (!p.getName().equals("")) { + if (!p.getName().isEmpty()) { p.setVisible(group.visible); if (FavouritePoint.SpecialPointType.PARKING.equals(p.getSpecialPointType())) { p.setColor(ContextCompat.getColor(context, R.color.parking_icon_background)); @@ -970,7 +970,7 @@ public class FavouritesDbHelper { p.setName(name); p.setCategory(cat); FavoriteGroup group = getOrCreateGroup(p, 0); - if (!name.equals("")) { + if (!name.isEmpty()) { p.setLatitude(query.getDouble(2)); p.setLongitude(query.getDouble(3)); group.points.add(p); @@ -1014,7 +1014,7 @@ public class FavouritesDbHelper { public boolean addFavouriteDB(FavouritePoint p) { - if (p.getName().equals("") && flatGroups.containsKey(p.getCategory())) { + if (p.getName().isEmpty() && flatGroups.containsKey(p.getCategory())) { return true; } SQLiteConnection db = openConnection(false); @@ -1024,7 +1024,7 @@ public class FavouritesDbHelper { "INSERT INTO " + FAVOURITE_TABLE_NAME + " (" + FAVOURITE_COL_NAME + ", " + FAVOURITE_COL_CATEGORY + ", " + FAVOURITE_COL_LAT + ", " + FAVOURITE_COL_LON + ")" + " VALUES (?, ?, ?, ?)", new Object[]{p.getName(), p.getCategory(), p.getLatitude(), p.getLongitude()}); //$NON-NLS-1$ //$NON-NLS-2$ FavoriteGroup group = getOrCreateGroup(p, 0); - if (!p.getName().equals("")) { + if (!p.getName().isEmpty()) { p.setVisible(group.visible); p.setColor(group.color); group.points.add(p); diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index 97cfeb662a..1a80d43b1f 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -412,8 +412,8 @@ public class OsmandApplication extends MultiDexApplication { if (defaultLocale == null) { defaultLocale = Locale.getDefault(); } - if (!"".equals(lang)) { - if (!"".equals(country)) { + if (lang != null && !lang.isEmpty()) { + if (country != null && !country.isEmpty()) { preferredLocale = new Locale(lang, country); } else { preferredLocale = new Locale(lang); @@ -421,9 +421,9 @@ public class OsmandApplication extends MultiDexApplication { } Locale selectedLocale = null; - if (!"".equals(lang) && !config.locale.equals(preferredLocale)) { + if (lang != null && !lang.isEmpty() && !config.locale.equals(preferredLocale)) { selectedLocale = preferredLocale; - } else if ("".equals(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { + } else if (lang != null && lang.isEmpty() && defaultLocale != null && Locale.getDefault() != defaultLocale) { selectedLocale = defaultLocale; preferredLocale = null; } @@ -812,12 +812,12 @@ public class OsmandApplication extends MultiDexApplication { if (preferredLocale != null) { Configuration config = context.getResources().getConfiguration(); String lang = preferredLocale.getLanguage(); - if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { + if (!lang.isEmpty() && !config.locale.getLanguage().equals(lang)) { preferredLocale = new Locale(lang); Locale.setDefault(preferredLocale); config.locale = preferredLocale; context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); - } else if("".equals(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { + } else if(lang.isEmpty() && defaultLocale != null && Locale.getDefault() != defaultLocale) { Locale.setDefault(defaultLocale); config.locale = defaultLocale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); diff --git a/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java b/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java index b7b3044f97..7eb21d4ee8 100644 --- a/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/HelpActivity.java @@ -176,7 +176,7 @@ public class HelpActivity extends OsmandActionBarActivity implements AdapterView "feature_articles/osmand-3-8-released.html")); String releasedate = ""; - if (!this.getString(R.string.app_edition).equals("")) { + if (!this.getString(R.string.app_edition).isEmpty()) { releasedate = ", " + this.getString(R.string.shared_string_release).toLowerCase() + ": " + this.getString(R.string.app_edition); } String version = Version.getFullVersion(getMyApplication()) + releasedate; diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java index 0c64258825..79abd4190a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java +++ b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java @@ -165,7 +165,7 @@ public class StartGPSStatus extends OsmAndAction { // if (g.activity.length() == 0) { PackageManager pm = mapActivity.getPackageManager(); try { - String appName = !g.paidAppName.equals("") && + String appName = !g.paidAppName.isEmpty() && g.installed(mapActivity, g.paidAppName) ? g.paidAppName : g.appName; intent = pm.getLaunchIntentForPackage(appName); } catch (RuntimeException e) { diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java index 6e3b7fba8a..ca7382dd6e 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java @@ -481,7 +481,7 @@ public class ConfigureMapMenu { .createItem()); String localeDescr = activity.getMyApplication().getSettings().MAP_PREFERRED_LOCALE.get(); - localeDescr = localeDescr == null || localeDescr.equals("") ? activity.getString(R.string.local_map_names) + localeDescr = localeDescr == null || localeDescr.isEmpty() ? activity.getString(R.string.local_map_names) : localeDescr; adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_locale, activity) .setId(MAP_LANGUAGE_ID) @@ -570,7 +570,7 @@ public class ConfigureMapMenu { txtIds[index]); refreshMapComplete(activity); String localeDescr = txtIds[index]; - localeDescr = localeDescr == null || localeDescr.equals("") ? activity + localeDescr = localeDescr == null || localeDescr.isEmpty() ? activity .getString(R.string.local_map_names) : localeDescr; adapter.getItem(pos).setDescription(localeDescr); ad.notifyDataSetInvalidated(); diff --git a/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java index a90247e644..ab40f14407 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/MapMarkerDialogHelper.java @@ -101,7 +101,7 @@ public class MapMarkerDialogHelper { String desc = OsmAndFormatter.getFormattedDate(app, marker.creationDate); String markerGroupName = marker.groupName; if (markerGroupName != null) { - if (markerGroupName.equals("")) { + if (markerGroupName.isEmpty()) { markerGroupName = app.getString(R.string.shared_string_favorites); } desc += " • " + markerGroupName; diff --git a/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java b/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java index 16fb083f13..8190570c2a 100644 --- a/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java +++ b/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java @@ -513,7 +513,7 @@ public class ImportHelper { private File getFileToSave(final String fileName, final File importDir, final WptPt pt) { final StringBuilder builder = new StringBuilder(fileName); - if ("".equals(fileName)) { + if (fileName != null && fileName.isEmpty()) { builder.append("import_").append(new SimpleDateFormat("HH-mm_EEE", Locale.US).format(new Date(pt.time))).append(GPX_FILE_EXT); //$NON-NLS-1$ } if (fileName.endsWith(KML_SUFFIX)) { diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java index 60abf651ba..6b03cd3a6a 100644 --- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java @@ -123,7 +123,7 @@ public class MapillaryFiltersFragment extends BaseOsmAndFragment { final DelayAutoCompleteTextView textView = (DelayAutoCompleteTextView) view.findViewById(R.id.auto_complete_text_view); textView.setAdapter(new MapillaryAutoCompleteAdapter(getContext(), R.layout.auto_complete_suggestion, getMyApplication())); String selectedUsername = settings.MAPILLARY_FILTER_USERNAME.get(); - if (!selectedUsername.equals("") && settings.USE_MAPILLARY_FILTER.get()) { + if (!selectedUsername.isEmpty() && settings.USE_MAPILLARY_FILTER.get()) { textView.setText(selectedUsername); textView.setSelection(selectedUsername.length()); } @@ -261,16 +261,16 @@ public class MapillaryFiltersFragment extends BaseOsmAndFragment { String dateFrom = dateFromEt.getText().toString(); String dateTo = dateToEt.getText().toString(); - if (!settings.MAPILLARY_FILTER_USERNAME.get().equals("") || !dateFrom.equals("") || !dateTo.equals("") || settings.MAPILLARY_FILTER_PANO.get()) { + if (!settings.MAPILLARY_FILTER_USERNAME.get().isEmpty() || !dateFrom.isEmpty() || !dateTo.isEmpty() || settings.MAPILLARY_FILTER_PANO.get()) { settings.USE_MAPILLARY_FILTER.set(true); } - if (dateFrom.equals("")) { + if (dateFrom.isEmpty()) { settings.MAPILLARY_FILTER_FROM_DATE.set(0L); } - if (dateTo.equals("")) { + if (dateTo.isEmpty()) { settings.MAPILLARY_FILTER_TO_DATE.set(0L); } - if (!username.equals("") && settings.MAPILLARY_FILTER_USERNAME.get().equals("")) { + if (!username.isEmpty() && settings.MAPILLARY_FILTER_USERNAME.get().isEmpty()) { view.findViewById(R.id.warning_linear_layout).setVisibility(View.VISIBLE); } else { mapActivity.getDashboard().hideDashboard(); diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java index 512281a079..51c12f07aa 100644 --- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java +++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java @@ -205,7 +205,7 @@ class MapillaryVectorLayer extends MapTileLayer implements MapillaryLayer, ICont long to = settings.MAPILLARY_FILTER_TO_DATE.get(); boolean pano = settings.MAPILLARY_FILTER_PANO.get(); - if (!userKey.equals("")) { + if (!userKey.isEmpty()) { String key = (String) userData.get("userkey"); if (!userKey.equals(key)) { return true; diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java index 0c887488b7..08db4d40fc 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java @@ -99,7 +99,7 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee .setCompoundButtonColorId(activeColorResId) .setDescription(String.valueOf(entry.getValue().size())) .setIcon(getContentIcon(R.drawable.ic_action_folder)) - .setTitle(category.equals("") ? getString(R.string.shared_string_waypoints) : category) + .setTitle(category.isEmpty() ? getString(R.string.shared_string_waypoints) : category) .setLayoutId(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp) .setTag(category) .setOnClickListener(new View.OnClickListener() { diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java index c1e85387b3..2fa206d08f 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersActiveAdapter.java @@ -131,7 +131,7 @@ public class MapMarkersActiveAdapter extends RecyclerView.Adapter it = categories.iterator(); while (it.hasNext()) { String category = it.next(); - if (category.equals("")) { + if (category.isEmpty()) { category = app.getResources().getString(R.string.shared_string_waypoints); } sb.append(category); diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java index 87d8e54303..ba407b23f9 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersHistoryAdapter.java @@ -145,7 +145,7 @@ public class MapMarkersHistoryAdapter extends RecyclerView.Adapter it = categories.iterator(); while (it.hasNext()) { String category = it.next(); - if (!category.equals("")) { + if (!category.isEmpty()) { sb.append(category); if (it.hasNext()) { sb.append(", "); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java index 748d9504f0..159f64fad4 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java @@ -234,7 +234,7 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment { if (modifiedItemsOutOfLimit != 0) { comment = comment.concat("; ").concat(modifiedItemsOutOfLimit + " ") .concat(getString(R.string.items_modified)).concat("."); - } else if (!comment.equals("")) { + } else if (!comment.isEmpty()) { comment = comment.concat("."); } return comment; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java index d402cdfe49..adfb8a2b60 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiDialogFragment.java @@ -84,7 +84,7 @@ public class SendPoiDialogFragment extends DialogFragment { messageLabel.setVisibility(hasPOI ? View.VISIBLE : View.GONE); messageEditText.setVisibility(hasPOI ? View.VISIBLE : View.GONE); closeChangeSetCheckBox.setVisibility(hasPOI ? View.VISIBLE : View.GONE); - closeChangeSetCheckBox.setChecked(hasPOI && !defaultChangeSet.equals("")); + closeChangeSetCheckBox.setChecked(hasPOI && !defaultChangeSet.isEmpty()); view.findViewById(R.id.osm_note_header).setVisibility(hasPOI ? View.GONE : View.VISIBLE); uploadAnonymously.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override @@ -233,7 +233,7 @@ public class SendPoiDialogFragment extends DialogFragment { } if (modifiedItemsOutOfLimit != 0) { comment = comment.concat("; ").concat(modifiedItemsOutOfLimit + " ").concat(getString(R.string.items_modified)).concat("."); - } else if (!comment.equals("")){ + } else if (!comment.isEmpty()){ comment = comment.concat("."); } return comment; diff --git a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java index 26985faa0a..0b07a41c4f 100644 --- a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java +++ b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java @@ -728,7 +728,7 @@ public class MapRenderRepositories { currentRenderingContext.height = requestedBox.getPixHeight(); currentRenderingContext.nightMode = nightMode; if(requestedBox.getZoom() <= zoomToOverviewLocalNames && - "".equals(prefs.MAP_PREFERRED_LOCALE.get())) { + prefs.MAP_PREFERRED_LOCALE.get() != null && prefs.MAP_PREFERRED_LOCALE.get().isEmpty()) { currentRenderingContext.preferredLocale = app.getLanguage(); currentRenderingContext.transliterate = !languagesNotTransliterateOnBasemap.contains(app.getLanguage()); diff --git a/OsmAnd/src/net/osmand/plus/render/TextRenderer.java b/OsmAnd/src/net/osmand/plus/render/TextRenderer.java index 9e338d08ec..f7bb2cd349 100644 --- a/OsmAnd/src/net/osmand/plus/render/TextRenderer.java +++ b/OsmAnd/src/net/osmand/plus/render/TextRenderer.java @@ -438,7 +438,7 @@ public class TextRenderer { String nameTag = isName ? "" : obj.getMapIndex().decodeType(tag).tag; boolean skip = false; // not completely correct we should check "name"+rc.preferredLocale - if (isName && !rc.preferredLocale.equals("") && + if (isName && !rc.preferredLocale.isEmpty() && map.containsKey(obj.getMapIndex().nameEnEncodingType)) { skip = true; } diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index b70ded655b..8e7857b33a 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -486,7 +486,7 @@ public class ResourceManager { try { progress.startTask(context.getString(R.string.installing_new_resources), -1); AssetManager assetManager = context.getAssets(); - boolean isFirstInstall = context.getSettings().PREVIOUS_INSTALLED_VERSION.get().equals(""); + boolean isFirstInstall = context.getSettings().PREVIOUS_INSTALLED_VERSION.get().isEmpty(); unpackBundledAssets(assetManager, applicationDataDir, progress, isFirstInstall || forceUpdate); context.getSettings().PREVIOUS_INSTALLED_VERSION.set(fv); copyRegionsBoundaries(); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java index 7257e2ec00..7c70ba8dfb 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AddPointBottomSheetDialog.java @@ -651,7 +651,7 @@ public class AddPointBottomSheetDialog extends MenuBottomSheetDialogFragment { ((FavouritePoint) item).getSpecialPointType().getIconId(app), iconColor)); favoriteViewHolder.description.setText(point.getDescription()); } else { - if (point.getCategory().equals("")) { + if (point.getCategory().isEmpty()) { favoriteViewHolder.description.setText(R.string.shared_string_favorites); } else { favoriteViewHolder.description.setText(point.getCategory()); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java index f34d6938fb..3730833d4d 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java @@ -59,9 +59,9 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet { final BooleanPreference pref = (BooleanPreference) preference; CharSequence summaryOn = switchPreference.getSummaryOn(); CharSequence summaryOff = switchPreference.getSummaryOff(); - final String on = summaryOn == null || summaryOn.toString().equals("") + final String on = summaryOn == null || summaryOn.toString().isEmpty() ? getString(R.string.shared_string_enabled) : summaryOn.toString(); - final String off = summaryOff == null || summaryOff.toString().equals("") + final String off = summaryOff == null || summaryOff.toString().isEmpty() ? getString(R.string.shared_string_disabled) : summaryOff.toString(); final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic); final int disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java index 6a3cc193b2..10c09021b9 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SelectFolderBottomSheet.java @@ -158,7 +158,7 @@ public class SelectFolderBottomSheet extends BasePreferenceBottomSheet { Fragment fragment = getTargetFragment(); if (fragment instanceof BaseSettingsFragment) { String newPath = editText.getText().toString().trim(); - if (!newPath.equals("")) { + if (!newPath.isEmpty()) { boolean pathChanged = !newPath.equals(currentPath); Bundle bundle = new Bundle(); bundle.putBoolean(TAG, true); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java index 842b53e2fa..de95eaeade 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/DataStorageFragment.java @@ -241,7 +241,7 @@ public class DataStorageFragment extends BaseSettingsFragment implements DataSto divider.setVisibility(View.VISIBLE); secondPart.setVisibility(View.VISIBLE); String space = getSpaceDescription(item.getDirectory()); - if (!space.equals("")) { + if (!space.isEmpty()) { space = space.replaceAll(" • ", " • "); tvSummary.setText(space); tvSummary.setVisibility(View.VISIBLE); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java index bc3092d963..8e4dfc14c0 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java @@ -897,7 +897,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment { } private boolean nameIsEmpty() { - return changedProfile.name.trim().equals(""); + return changedProfile.name.trim().isEmpty(); } private void disableSaveButtonWithErrorMessage(String errorMessage) { diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java index 9e66f72f74..a8dc02135b 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java @@ -137,9 +137,9 @@ public class SRTMPlugin extends OsmandPlugin { public boolean init(@NonNull final OsmandApplication app, Activity activity) { OsmandSettings settings = app.getSettings(); CommonPreference pref = settings.getCustomRenderProperty("contourLines"); - if (pref.get().equals("")) { + if (pref.get().isEmpty()) { for (ApplicationMode m : ApplicationMode.allPossibleValues()) { - if (pref.getModeValue(m).equals("")) { + if (pref.getModeValue(m).isEmpty()) { pref.setModeValue(m, "13"); } } diff --git a/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java b/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java index b43cab4492..9408ec5537 100644 --- a/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java +++ b/OsmAnd/src/net/osmand/plus/views/AddGpxPointBottomSheetHelper.java @@ -86,7 +86,7 @@ public class AddGpxPointBottomSheetHelper implements OnDismissListener { } public void setTitle(String title) { - if (title.equals("")) { + if (title.isEmpty()) { if (pointDescription.isWpt()) { title = mapActivity.getString(R.string.waypoint_one); } else if (pointDescription.isRte()) { From 78cead47f74256cee205444180a12dcd3da68d22 Mon Sep 17 00:00:00 2001 From: ssantos Date: Thu, 19 Nov 2020 21:42:59 +0000 Subject: [PATCH 110/198] Translated using Weblate (Portuguese) Currently translated at 99.2% (3533 of 3561 strings) --- OsmAnd/res/values-pt/strings.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index 0c7ff7cbac..5cef9b374a 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -3980,4 +3980,13 @@ As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site. Criar uma conta Já tenho uma conta + Histórico de pesquisa + Caiaque + Barco a motor + Recursos + Tamanho aproximado do ficheiro + Selecione os dados a serem exportados para o ficheiro. + Necessário para a importação + O seu aparelho só tem %1$s livre. Por favor, libere algum espaço ou desmarque alguns itens para exportar. + Não há espaço suficiente \ No newline at end of file From 44238287449214abb6670950068613afdde7fc93 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Thu, 19 Nov 2020 13:49:00 +0000 Subject: [PATCH 111/198] Translated using Weblate (French) Currently translated at 99.7% (3552 of 3561 strings) --- OsmAnd/res/values-fr/strings.xml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index c48a9fb01e..3a02fa25d9 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3899,7 +3899,7 @@ Développement du transport public autochtone Connectez-vous avec OAuth Supprimer le jeton OAuth d\'OpenStreetMap - Déconnexion réussie + Déconnecté Le fichier est déjà importé dans OsmAnd Utiliser un algorithme de routage A* à 2 phases Le paiement sera débité de votre compte AppGallery dès confirmation de l\'achat. @@ -3930,10 +3930,10 @@ L\'abonnement OsmAnd Live est en attente L’abonnement OsmAnd Live a expiré L\'abonnement OsmAnd Live a été suspendu - Se connecter à OpenStreetMap - Se connecter à OpenStreetMap.org + Se connecter pour OpenStreetMap + Se connecter pour OpenStreetMap.org Identifiant - Utiliser un identifiant et un mot de passe + Se connecter avec un identifiant et un mot de passe Compte Gérer l\'abonnement Se connecter avec OpenStreetMap @@ -3955,4 +3955,11 @@ Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web. Historique de recherche Kayak + Votre appareil n\'a que %1$s disponible. Veuillez libérer de l\'espace ou désélectionner l\'export pour certains éléments. + Bateau à moteur + Ressources + Taille approximative du fichier + Sélectionnez les données à exporter dans le fichier. + Nécessaire pour l\'import + L\'espace disponible est insuffisant \ No newline at end of file From 7598fe241efcdb438ed8721dfd5b39de6c7a59b1 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Thu, 19 Nov 2020 18:28:17 +0000 Subject: [PATCH 112/198] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3561 of 3561 strings) --- OsmAnd/res/values-uk/strings.xml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 61ff054492..7b6ac19748 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3914,10 +3914,10 @@ Двофазна маршрутизація для автомобільної навігації. Розвиток власного громадського транспорту Перемкнутися на розрахунок маршруту громадським транспортом за допомогою Java (безпечний) - Виконати вхід OAuth для користування функцією osmedit + Увійти за допомогою OAuth для користування функцією osmedit Увійти через OAuth Очистити токен OAuth OpenStreetMap - Ви успішно вийшли + Ви вийшли OsmAnd дані в реальному часі Уникати пішохідних шляхів Уникати пішохідних шляхів @@ -3951,10 +3951,10 @@ Передплата OsmAnd Live на утриманні Увійти до OpenStreetMap.org Увійти до OpenStreetMap.org - Увійдіть, щоб вивантажити нові або внесені зміни. + Увійдіть, щоб вивантажити нові або внесені зміни, \n -\nВи можете увійти, за допомогою безпечного методу OAuth, або скористатися своїм ім\'ям та паролем. - Використовувати ім\'я і пароль +\nабо за допомогою безпечного методу OAuth або свого ім\'я та паролю. + Увійти за допомогою імені користувача і паролю Обліковий запис Ім\'я користувача Увійти за допомогою OpenStreetMap @@ -3967,14 +3967,20 @@ «Відстежуваний» означає, що трек не з\'явиться в жодному загальнодоступному списку, але обробка точок з позначками часу від нього (які не можуть бути безпосередньо пов’язані з вами) виконується за допомогою завантажень із загальнодоступного API GPS. Закрити примітку OSM Коментувати примітку OSM - Ви можете увійти за допомогою безпечного методу OAuth або застосувавши свої ім\'я користувача й пароль. + Увійдіть за допомогою безпечного методу OAuth або застосувавши свої ім\'я користувача й пароль. Додати світлини Зареєструватися на \nOpenPlaceReviews.org - Світлини надаються проєктом відкритих даних OpenPlaceReviews.org. Щоб завантажити світлини зареєструйтеся на сайті. + Увійдіть на вебсайт проєкту відкритих даних OpenPlaceReviews.org, щоб завантажити ще більше світлин. Створити обліковий запис У мене вже є обліковий запис Журнал пошуку Каяк Моторний човен + Ресурси + Приблизний розмір файлу + Виберіть дані, які потрібно експортувати до файлу. + Необхідно для імпорту + На вашому пристрої лише %1$s вільного простору. Звільніть місце або приберіть позначки з деяких елементів для експорту. + Бракує простору \ No newline at end of file From 14288fcb2eb723044083f8eb6f6b3366907c387e Mon Sep 17 00:00:00 2001 From: jan madsen Date: Thu, 19 Nov 2020 14:15:46 +0000 Subject: [PATCH 113/198] Translated using Weblate (Danish) Currently translated at 91.8% (3272 of 3561 strings) --- OsmAnd/res/values-da/strings.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 3943611228..cd1249d5fd 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -3488,7 +3488,7 @@ Vinkel: %s° Vinkel Forbereder - IP typer + IP-typer Intet valgt Genveje Profiler @@ -3549,9 +3549,9 @@ Den importerede profil indeholder yderligere data. Klik på Importer for kun at importere profildata, eller vælg yderligere data, der skal importeres. Ruten vil blive genberegnet, hvis afstanden til ruten er længere end angivet parameter Mindste afstand for at genberegne ruten - OsmAnd har allerede elementer med de samme navne, som dem, der importeres. -\n -\nVælg en aktion. + OsmAnd har allerede elementer med de samme navne som de importerede. +\n +\nVælg en handling. Det angivne %1$s findes allerede. Mindste vinkel mellem placering og rute Ekstra lige segment mellem placering og den beregnede rute vises, indtil ruten genberegnes @@ -3790,4 +3790,6 @@ Start-/slutikoner %1$s — %2$s Hul + Der er ikke plads nok + Længdegrænse \ No newline at end of file From 855cf16e30bc30150a4e77f0bd53f429eae9459e Mon Sep 17 00:00:00 2001 From: Michal L Date: Thu, 19 Nov 2020 14:49:18 +0000 Subject: [PATCH 114/198] Translated using Weblate (Polish) Currently translated at 99.1% (3529 of 3561 strings) --- OsmAnd/res/values-pl/strings.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 5a3ad96826..f03716f861 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -1922,7 +1922,7 @@ Subskrypcja umożliwia cogodzinne aktualizacje wszystkich map na całym świecie. \n Część dochodów wraca do społeczności OSM i jest wypłacana za każdy wkład OSM. \n Jeśli kochasz OsmAnd i OSM i chcesz je wspierać i wspierać, jest to idealny sposób, aby to zrobić. - Nazwa pliku zawiera niedozwolony znak + Niedozwolony znak w nazwie pliku Domyślny kolor Wybierz kategorię Proszę wprowadzić kategorię @@ -2526,7 +2526,7 @@ Dodaje cel pośredni Dodaje pierwszy cel pośredni Wyświetl zamknięte uwagi - Pokaż/ukryj uwagi OSM na mapie. + Pokaż lub ukryj uwagi OSM na mapie. GPX - odpowiedni do eksportowania danych do JOSM i innych edytorów OSM. OSC - odpowiedni do eksportowania danych do OSM. Plik GPX @@ -3087,7 +3087,7 @@ Użyj WunderLINQ do kontroli Dodaj co najmniej jeden element do listy w ustawieniach \"Szybkiej Akcji\" Stoki narciarskie do narciarstwa alpejskiego i zjazdowego oraz dostęp do wyciągów narciarskich. - Narty biegowe/nordic ski + Biegi narciarskie i narciarstwo klasyczne Trasy do narciarstwa klasycznego lub biegowego. Turystyka narciarska Trasy wycieczek narciarskich. @@ -3570,7 +3570,7 @@ Przycisk do wyświetlania lub ukrywania warstwy terenu na mapie. Pokaż teren Ukryj teren - Pokaż / ukryj teren + Pokaż lub ukryj teren Nachylenie Włącz, aby wyświetlić cieniowanie wzniesień lub stoków. Możesz przeczytać więcej o tego rodzaju mapach na naszej stronie. Legenda @@ -3700,9 +3700,9 @@ Powrót do edycji Ukryj transport publiczny Pokaż transport publiczny - Pokaż/ukryj transport publiczny - Utwórz / Edytuj użyteczne miejsce - Dodaj / Edytuj Ulubione + Pokaż lub ukryj transport publiczny + Utwórz lub edytuj użyteczne miejsce + Dodaj lub edytuj ulubione miejsce Przycisk akcji przełącza między wybranymi profilami. Dodaj profil Zmiana profilu aplikacji @@ -3910,7 +3910,7 @@ Nazwa: Z – A Nazwa: A – Z Co nowego - Ikony start/koniec + Ikony startu i końca Dziękujemy za zakup \"Linii konturowych\" Subskrypcja naliczona za wybrany okres. Anuluj ją w AppGallery w dowolnym momencie. Płatność zostanie pobrana z konta AppGallery po potwierdzeniu zakupu. @@ -3958,14 +3958,14 @@ Musisz dodać co najmniej dwa punkty Wystąpił problem z Twoją subskrypcją. Kliknij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności. Subskrypcja OsmAnd Live jest wstrzymana - Login + Nazwa użytkownika Zaloguj się do OpenStreetMap Zaloguj się do OpenStreetMap.org Zaloguj się za pomocą OpenStreetMap Musisz się zalogować, aby przesłać nowe lub zmodyfikowane zmiany. \n \nMożesz zalogować się za pomocą bezpiecznej metody autoryzacji OAuth lub użyć swojego loginu i hasła. - Użyj loginu i hasła + Zaloguj się za pomocą nazwy użytkownika i hasła Konto Zamknij uwagę OSM Skomentuj uwagę OSM @@ -3973,7 +3973,7 @@ Wyślij plik GPX do OpenStreetMap Wpisz tagi oddzielone przecinkami. Możliwość śledzenia oznacza, że ślad nie pojawi się na żadnej publicznej liście, ale punkty śledzenia będą nadal dostępne za pośrednictwem publicznego API GPS ze znacznikami czasu. Inni użytkownicy będą mogli pobrać tylko te przetworzone punkty śledzenia z Twojego śladu, których nie można powiązać bezpośrednio z Tobą. - Możesz zalogować się przy użyciu bezpiecznej metody OAuth lub użyć swojego loginu i hasła. + Zaloguj się przy użyciu bezpiecznej metody autoryzacji OAuth lub użyj swojej nazwy użytkownika i hasła. Dodaj zdjęcie Zarejestruj się w \nOpenPlaceReviews.org From 5f594cf371f8636c9cfd0b603e4cb707cf6250c2 Mon Sep 17 00:00:00 2001 From: Softmap Date: Thu, 19 Nov 2020 19:47:26 +0000 Subject: [PATCH 115/198] Translated using Weblate (Arabic) Currently translated at 100.0% (3561 of 3561 strings) --- OsmAnd/res/values-ar/strings.xml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 07aaf2352e..7e5f375f16 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3909,10 +3909,10 @@ التوجيه على مرحلتين لملاحة السيارة. تطوير النقل العام المحلي قم بالتبديل إلى Java (الآمن) حساب توجيه النقل العام - قم بتسجيل الدخول إلى OAuth لاستخدام ميزات osmedit + سجّل الدخول باستخدام OAuth لاستخدام ميزات osmedit تسجيل الدخول عبر OAuth مسح رمز OpenStreetMap OAuth - تسجيل الخروج بنجاح + تم تسجيل الخروج تم استيراد الملف بالفعل في أوسماند استخدام خوارزمية توجيه من مرحلتين A* %1$s البيانات المتوفرة فقط على الطرق ، تحتاج إلى حساب طريق باستخدام \"الطريق بين النقاط\" للحصول عليها. @@ -3940,32 +3940,38 @@ انتهت صلاحية اشتراك OsmAnd Live تم إيقاف اشتراك OsmAnd Live مؤقتًا اشتراك OsmAnd Live معلق - تسجيل الدخول إلى خريطة الشارع المفتوح + تسجيل الدخول ل OpenStreetMap تسجيل الدخول إلى OpenStreetMap.org - تحتاج إلى تسجيل الدخول لرفع التغييرات الجديدة أو المعدلة. + قم بتسجيل الدخول لرفع التغييرات الجديدة أو المعدلة. \n -\nيمكنك تسجيل الدخول باستخدام طريقة التفويض الآمنة أو استخدام تسجيل الدخول وكلمة المرور. - استخدام تسجيل الدخول وكلمة المرور +\nإما باستخدام OAuth أو باستخدام اسم المستخدم وكلمة المرور. + سجل الدخول باسم المستخدم وكلمة المرور الحساب - تسجيل الدخول + اسم المستخدم \"إمكانية التتبع\" تعني أن التتبع لا يظهر في أي قوائم عامة ولكن نقاط التتبع المعالجة مع طوابع زمنية صادرة عنها(التي لا يمكن أن تكون مرتبطة بك مباشرة) ستظهر خلال التنزيلات من واجهة برمجة التطبيقات GPS API العامة. سجل تاريخ العلامات أرسل ملف GPX إلى OpenStreetMap أدخل العلامات مفصولة بفاصلة. \"خاص\"يعني أن التتبع لن يظهر في أي قوائم عامة ، ولكن نقاط التتبع الصادرة عنه ستظل متاحة من خلال واجهة برمجة تطبيقات GPS API العامة بدون طوابع زمنية ولكن لن يتم ترتيبها ترتيبًا زمنيًا. - قم بتسجيل الدخول باستخدام OpenStreetMap + سجّل الدخول باستخدام OpenStreetMap عام يعني أنه سيتم عرض التتبع بشكل عام في تتبعات GPS الخاصة بك وفي قوائم تتبع GPS العامة. البيانات المقدمة عبر API لا تشير إلى صفحة التتبع الخاصة بك. الطوابع الزمنية لنقاط التتبع غير متاحة من خلال واجهة برمجة تطبيقات GPS API العامة، والنقاط غير مرتبة ترتيبًا زمنيًا. ومع ذلك، لا يزال المستخدمون الآخرون قادرين على تنزيل التتبع الأولي من قائمة التتبع العامة وأي طوابع زمنية مضمنة فيه. متعرف عليه يعني أنه سيتم عرض التتبع بشكل عام في تتبعات GPS الخاصة بك وفي قوائم تتبع GPS العامة، أي سيتمكن المستخدمون الآخرون من تنزيل التتبع الأولي وربطه باسم المستخدم الخاص بك. ستشير البيانات التي يتم تقديمها عبر API نقاط التتبع إلى صفحة التتبع الأصلية الخاصة بك. الطوابع الزمنية لنقاط التتبع متاحة من خلال واجهة برمجة تطبيقات GPS API العامة. أغلاق ملاحظة OSM تعليق ملاحظة OSM - يمكنك تسجيل الدخول باستخدام طريقة OAuth الآمنة أو استخدام تسجيل الدخول وكلمة المرور الخاصة بك. + قم بتسجيل الدخول باستخدام طريقة OAuth الآمنة أو استخدم اسم المستخدم وكلمة المرور. إضافة صورة سجل في \nOpenPlaceReviews.org - يتم توفير الصور من خلال مشروع البيانات المفتوحة OpenPlaceReviews.org. من أجل رفع الصور الخاصة بك، تحتاج إلى الاشتراك بالموقع. + قم بتسجيل الدخول إلى موقع مشروع البيانات المفتوحة OpenPlaceReviews.org لرفع المزيد من الصور. إنشاء حساب جديد لدي حساب بالفعل كاياك (قوارب صغيرة فردية) زورق سجل البحث + جهازك يحتوي على %1$s فقط متاحة . الرجاء إخلاء بعض المساحة أو إلغاء تحديد بعض العناصر للتصدير. + المصادر + حجم الملف التقريبي + حدد البيانات التي سيتم تصديرها إلى الملف. + مطلوب للاستيراد + لا يوجد مساحة كافية \ No newline at end of file From a754644e84a1a5eb9803dabca1a036d138a68fa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1ns?= Date: Thu, 19 Nov 2020 19:39:24 +0000 Subject: [PATCH 116/198] Translated using Weblate (Galician) Currently translated at 100.0% (3561 of 3561 strings) --- OsmAnd/res/values-gl/strings.xml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml index 8b24fe075a..62847375d7 100644 --- a/OsmAnd/res/values-gl/strings.xml +++ b/OsmAnd/res/values-gl/strings.xml @@ -3946,7 +3946,7 @@ Lon %2$s Desenvolvemento do transporte público nativo Activar cálculo de enrutamento de transporte público do Java (seguro) Novidades - Inicia sesión co OAuth para empregar as funcións de edición do OSM + Inicia a sesión co OAuth para empregar as funcións de edición do OSM Entrar polo OAuth Limpar token do OpenStreetMap OAuth Sesión rematada @@ -3978,15 +3978,15 @@ Lon %2$s A subscrición do OsmAnd Live foi detida A subscrición do OsmAnd Live está en espera \"Público\" significa que a pista amosarase de xeito público na túa listaxe de pistas e nas listaxes de pistas GPS públicas con marcas de tempo en bruto. Os datos servidos a través da API no farán referencia á túa pácina de pistas. As marcaxes de tempo dos puntos da pista non estarán dispoñíbeis a través da API pública de GPS, aínda que os puntos son ordenados de xeito cronolóxico. - Iniciar sesión no OpenStreetMap - Entrar ó OpenStreetMap.org - Entrar co OpenStreetMap - Precisas iniciar sesión para subir modificacións novas. + Iniciar a sesión no OpenStreetMap + Iniciar a sesión no OpenStreetMap.org + Iniciar a sesión co OpenStreetMap + Inicia a sesión para subir as modificacións novas, \n -\nPodes iniciar sesión empregando o método seguro de OAuth ou empregar o nome de usuario e contrasinal. - Empregar nome de usuario e contrasinal +\nxa sexa co OAuth ou empregando o teu nome de usuario e contrasinal. + Iniciar a sesión co nome de usuario e contrasinal Conta - Iniciar sesión + Nome de usuario Historial de marcaxes Enviar ficheiro GPX ó OpenStreetMap Insire etiquetas separadas por comas. @@ -3995,14 +3995,20 @@ Lon %2$s \"Identificábel\" significa que a pista amosarase de xeito público na túa listaxe de pistas e na listaxe de pistas GPS públicas, é dicir que outros usuarios poderán baixar a pista en bruto e asociala co seu nome de usuario. Os datos servidos a través da API de conxunto de puntos fará referencia á páxina orixinal da pista. Pechar nota do OSM Comentar nota do OSM - Podes iniciar a sesión co método seguro do OAuth ou empregar o nome de usuario e contrasinal. + Inicia a sesión co método seguro do OAuth ou emprega o nome de usuario e contrasinal. Engadir imaxe Rexistrarse no \nOpenPlaceReviews.org - As imaxes son fornecidas polo proxecto de datos abertos OpenPlaceReviews.org. Para subir imaxes tes que rexistrarte no sitio web. + Inicia a sesión no sitio web do proxecto de datos abertos do OpenPlaceReviews.org para subir máis imaxes. Crear nova conta Xa teño unha conta Historial de procura Caiac Lancha a motor + Recursos + Tamaño aproximado do ficheiro + Marca os datos que serán exportados ó ficheiro. + Necesario para importar + O teu dispositivo só ten %1$s libre. Por favor, libera algo de espazo ou desmarca algúns elementos a exportar. + Sen espazo dabondo \ No newline at end of file From f305e4be1393ef44001c296b8f906b3096c140d9 Mon Sep 17 00:00:00 2001 From: jan madsen Date: Thu, 19 Nov 2020 13:51:15 +0000 Subject: [PATCH 117/198] Translated using Weblate (Danish) Currently translated at 98.8% (3817 of 3860 strings) --- OsmAnd/res/values-da/phrases.xml | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-da/phrases.xml b/OsmAnd/res/values-da/phrases.xml index 7f1eb79c21..37ed57962e 100644 --- a/OsmAnd/res/values-da/phrases.xml +++ b/OsmAnd/res/values-da/phrases.xml @@ -3808,7 +3808,7 @@ Stand type Ja Nej - Signal for at finde stangen + Internetadgang: kunder Kun når det er tilladt at gå Kontrast Primitiv @@ -3852,4 +3852,32 @@ Små elektriske apparater Afgangstavle Genopfyldning af drikkevand + Nej + Ja + Nej + Ja + Nej + Ja + Repræsentantkontor + Kontor + Honorærkonsul + Generalkonsulat + Konsulært agentur + Ledet af en konsul + Bopæl + Højkommissær + Delegation + Afdeling + Ledet af en ambassadør + Forbindelsesofficerer + Ambassade + Radartårn + Tagterrasse + GPX-punkt + Borgerservice + Immigrant visum + Ikke-immigrant visum + Forbindelsesofficerer + Konsulat + Ambassade \ No newline at end of file From 9606e4136c268fd80520624bde53ce24cc082700 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Thu, 19 Nov 2020 18:45:06 +0000 Subject: [PATCH 118/198] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-uk/phrases.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-uk/phrases.xml b/OsmAnd/res/values-uk/phrases.xml index cc955e79c5..70d6d83d6b 100644 --- a/OsmAnd/res/values-uk/phrases.xml +++ b/OsmAnd/res/values-uk/phrases.xml @@ -3838,4 +3838,34 @@ Дах Точка GPX Радіолокаційна вежа + Багатонаціональне + Нунціатура + Розділ інтересів + Зв\'язок + Послуги для громадян + Імміграційні візи + Неімміграційні візи + Зв\'язок + Ні + Так + Ні + Так + Ні + Так + Представництво + Офіс + Почесний консул + Генеральне консульство + Консульський офіс + Консульський орган + Очолює консул + Резиденція + Місія + Верховний комісаріат + Делегація + Відділення + Очолює посол + Посольство + Консульство + Посольство \ No newline at end of file From 167e7a8ec57dfde0a97bc64601202f3a64736f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Babos=20G=C3=A1bor?= Date: Thu, 19 Nov 2020 22:27:15 +0000 Subject: [PATCH 119/198] Translated using Weblate (Hungarian) Currently translated at 99.1% (3829 of 3860 strings) --- OsmAnd/res/values-hu/phrases.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index f6fe9f9bfe..771e934b0d 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -3842,4 +3842,5 @@ Internetcsatlakozás: ügyfeleknek Radartorony GPX-pont + Állampolgári szolgáltatások \ No newline at end of file From cf3d5f32b0b5eab73a51a6bb480cf66e6705b19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1ns?= Date: Thu, 19 Nov 2020 20:08:04 +0000 Subject: [PATCH 120/198] Translated using Weblate (Galician) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-gl/phrases.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-gl/phrases.xml b/OsmAnd/res/values-gl/phrases.xml index 955e90963e..1b72fedd88 100644 --- a/OsmAnd/res/values-gl/phrases.xml +++ b/OsmAnd/res/values-gl/phrases.xml @@ -3843,4 +3843,34 @@ Terrazo Punto GPX Torre de radar + Non + Si + Non + Si + Non + Si + Subnacional + Oficina representativa + Oficina + Cónsul honorario + Consulado xeral + Oficina consular + Axencia consular + Dirixido por un cónsul + Residencia + Nunciatura + Misión + Sección de intereses + Alto comisionado + Delegación + Sucursal + Dirixido por un embaixador + Ligazón + Embaixada + Servizos ó cidadán + Visados de inmigrante + Visados de non inmigrante + Ligazón + Consulado + Embaixada \ No newline at end of file From 2abd3e26b847b8f594a0ded9cfc24f2ea1858eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Thu, 19 Nov 2020 17:14:22 +0000 Subject: [PATCH 121/198] Translated using Weblate (Estonian) Currently translated at 99.3% (3835 of 3860 strings) --- OsmAnd/res/values-et/phrases.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd/res/values-et/phrases.xml b/OsmAnd/res/values-et/phrases.xml index 97af8c5b8c..279982921e 100644 --- a/OsmAnd/res/values-et/phrases.xml +++ b/OsmAnd/res/values-et/phrases.xml @@ -3832,4 +3832,9 @@ Parkimine varjualustes Parkla katusel Radarimast + Residents + Nuntsiatuur + Saatkond + Konsulaat + Saatkond \ No newline at end of file From 26f1fbccdb1b81151da3d7919095ce7a72880e8d Mon Sep 17 00:00:00 2001 From: Franco Date: Thu, 19 Nov 2020 13:43:47 +0000 Subject: [PATCH 122/198] Translated using Weblate (Spanish (Argentina)) Currently translated at 99.9% (3560 of 3561 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 3d4b451190..1e922a5610 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -3927,7 +3927,7 @@ Desarrollo nativo del transporte público Cambiar al cálculo de ruta Java (seguro) del transporte público Novedades - Inicia sesión con OAuth para usar las funciones de edición de OSM + Ingresar con OAuth para usar las funciones de edición de OSM Ingresar a través de OAuth Vaciar llave OAuth de OpenStreetMap Sesión finalizada @@ -3958,13 +3958,13 @@ La suscripción a OsmAnd Live se ha pausado La suscripción a OsmAnd Live está en espera Iniciar sesión en OpenStreetMap - Ingresar a OpenStreetMap.org - Debes iniciar sesión para subir cambios nuevos o modificados. + Ingresar en OpenStreetMap.org + Inicia sesión para subir los cambios nuevos o modificados, \n -\nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña. - Usar nombre de usuario y contraseña +\nya sea con OAuth o usando el nombre de usuario y contraseña. + Ingresar nombre de usuario y contraseña Cuenta - Iniciar sesión + Nombre de usuario Ingresar con OpenStreetMap Historial de marcadores Enviar archivo GPX a OpenStreetMap @@ -3975,14 +3975,20 @@ «Identificable» significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Cerrar nota de OSM Comentar nota de OSM - Puedes iniciar sesión con el método seguro de OAuth o usar el nombre de usuario y contraseña. + Ingresa usando el método seguro de OAuth o usa el nombre de usuario y contraseña. Añadir foto Registrarse en \nOpenPlaceReviews.org - Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web. + Ingresa en el sitio web del proyecto de datos abiertos OpenPlaceReviews.org para subir más fotos. Crear nueva cuenta Ya tengo cuenta Historial de búsqueda Kayak Lancha a motor + Recursos + Tamaño aproximado del archivo + Marca los datos que serán exportados al archivo. + Necesario para importar + El dispositivo sólo tiene %1$s libre. Por favor, libera algo de espacio o desmarca algunos elementos a exportar. + Sin espacio suficiente \ No newline at end of file From 0afb51b93c474d2aeaace9bbeaa8f86c3fef1bb2 Mon Sep 17 00:00:00 2001 From: Franco Date: Thu, 19 Nov 2020 13:49:01 +0000 Subject: [PATCH 123/198] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-es-rAR/phrases.xml | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml index c72ea55517..fb8d59ac34 100644 --- a/OsmAnd/res/values-es-rAR/phrases.xml +++ b/OsmAnd/res/values-es-rAR/phrases.xml @@ -3857,4 +3857,34 @@ Azotea Punto GPX Torre de radar + No + + No + + No + + Subnacional + Oficina representativa + Oficina + Cónsul honorario + Consulado general + Oficina consular + Agencia consular + Dirigido por un cónsul + Residencia + Nunciatura + Misión + Sección de intereses + Alto comisionado + Delegación + Sucursal;Ramal + Dirigido por un embajador + Enlace + Embajada + Servicios al ciudadano + Visas de inmigrante + Visas de no inmigrante + Enlace + Consulado + Embajada \ No newline at end of file From 0e7230c7a6f6f011ce24737a665f8aec8d7edabe Mon Sep 17 00:00:00 2001 From: ssantos Date: Thu, 19 Nov 2020 21:38:11 +0000 Subject: [PATCH 124/198] Translated using Weblate (Portuguese) Currently translated at 99.9% (3858 of 3860 strings) --- OsmAnd/res/values-pt/phrases.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-pt/phrases.xml b/OsmAnd/res/values-pt/phrases.xml index eb04e28ff5..0795fa347c 100644 --- a/OsmAnd/res/values-pt/phrases.xml +++ b/OsmAnd/res/values-pt/phrases.xml @@ -3835,4 +3835,34 @@ Ponto GPX Torre de radar Área de repouso + Não + Sim + Não + Sim + Não + Sim + Subnacional + Escritório de representação + Escritório + Cônsul honorário + Consulado-geral + Escritório consular + Agência consular + Liderado por um cônsul + Residência + Nunciatura + Missão + Secção de interesses + Alta comissão + Delegação + Secção + Liderado por um embaixador + Ligação + Embaixada + Serviços ao cidadão + Vistos de imigrantes + Vistos de não-imigrantes + Ligação + Consulado + Embaixada \ No newline at end of file From 2e2bbe3644c8ecc8682469a3f4d7913d20b7a747 Mon Sep 17 00:00:00 2001 From: Nicolas Raoul Date: Fri, 20 Nov 2020 17:36:01 +0900 Subject: [PATCH 125/198] Fixed grammar: Removed duplicate verb --- .github/ISSUE_TEMPLATE/5-feature-request.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/5-feature-request.md b/.github/ISSUE_TEMPLATE/5-feature-request.md index 9c46069f8c..1315456d77 100644 --- a/.github/ISSUE_TEMPLATE/5-feature-request.md +++ b/.github/ISSUE_TEMPLATE/5-feature-request.md @@ -12,7 +12,7 @@ Existing issues often contain information about workarounds, resolution, or prog GitHub is our main development tool for our developers. There are hundreds of requests a month and there are relatively few developers. So by opening an issue, please know that your issue will be sent out to all developers and acknowledge that it could be closed without explanation or with just a brief message. -Comments on the closed issues are also sent to all developers, so you will definitely will be heard. +Comments on the closed issues are also sent to all developers, so you definitely will be heard. However, there is no guarantee that a developer will pick up the issue to work on it. Please be sure to read our [FAQ](https://osmand.net/help-online) before creating an issue here. From 5c5627e499ddf1adb2ca3e79855ac4ceee40bafd Mon Sep 17 00:00:00 2001 From: Dmitry Date: Fri, 20 Nov 2020 10:56:28 +0200 Subject: [PATCH 126/198] Add colored point icon for Plan Route landscape UI --- .../ic_action_plan_route_point_colored.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 OsmAnd/res/drawable/ic_action_plan_route_point_colored.xml diff --git a/OsmAnd/res/drawable/ic_action_plan_route_point_colored.xml b/OsmAnd/res/drawable/ic_action_plan_route_point_colored.xml new file mode 100644 index 0000000000..7fb6be0078 --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_plan_route_point_colored.xml @@ -0,0 +1,18 @@ + + + + + From 239fc9a118300fa71fbe7e3b25ea3bba490c2e00 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Fri, 20 Nov 2020 12:55:27 +0200 Subject: [PATCH 127/198] Buttons over soft keyboard (only for send gpx fragment) --- .../dialogs/SendGpxBottomSheetFragment.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java index ed982747b0..ecf089c0b1 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendGpxBottomSheetFragment.java @@ -1,11 +1,16 @@ package net.osmand.plus.osmedit.dialogs; +import android.graphics.Rect; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.text.Editable; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.widget.LinearLayout; +import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -51,6 +56,7 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { private TextInputEditText tagsField; private TextInputEditText messageField; + private int contentHeightPrevious = 0; public void setGpxInfos(GpxInfo[] gpxInfos) { this.gpxInfos = gpxInfos; @@ -63,6 +69,7 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { LayoutInflater themedInflater = UiUtilities.getInflater(app, nightMode); View sendOsmPoiView = themedInflater.inflate(R.layout.send_gpx_fragment, null); + sendOsmPoiView.getViewTreeObserver().addOnGlobalLayoutListener(getOnGlobalLayoutListener()); tagsField = sendOsmPoiView.findViewById(R.id.tags_field); messageField = sendOsmPoiView.findViewById(R.id.message_field); @@ -124,6 +131,36 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment { items.add(titleItem); } + private ViewTreeObserver.OnGlobalLayoutListener getOnGlobalLayoutListener() { + return new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Rect visibleDisplayFrame = new Rect(); + int buttonsHeight = getResources().getDimensionPixelSize(R.dimen.dialog_button_ex_max_width); + int shadowHeight = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_top_shadow_height); + final ScrollView scrollView = getView().findViewById(R.id.scroll_view); + scrollView.getWindowVisibleDisplayFrame(visibleDisplayFrame); + int height = scrollView.getHeight(); + int contentHeight = visibleDisplayFrame.bottom - visibleDisplayFrame.top - buttonsHeight; + if (contentHeightPrevious != contentHeight || contentHeight < height) { + if (scrollView.getHeight() + shadowHeight > contentHeight) { + scrollView.getLayoutParams().height = contentHeight; + } else { + scrollView.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT; + } + scrollView.requestLayout(); + int delay = Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP ? 300 : 1000; + scrollView.postDelayed(new Runnable() { + public void run() { + scrollView.scrollTo(0, scrollView.getHeight()); + } + }, delay); + contentHeightPrevious = contentHeight; + } + } + }; + } + protected static void showOpenStreetMapScreen(@NonNull FragmentActivity activity) { if (activity instanceof MapActivity) { BaseSettingsFragment.showInstance(activity, OPEN_STREET_MAP_EDITING); From 9b3b07575fe14599dfddd9208e67ae031f4840df Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Fri, 20 Nov 2020 13:03:59 +0200 Subject: [PATCH 128/198] Fix change preference from bottom sheet --- OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index d7000e5811..c7055e3fdc 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -214,6 +214,10 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer @Override public void onPreferenceChanged(String prefId) { + if (USE_DEV_URL.equals(prefId)) { + osmLogout(); + authorizationAdapter = app.getOsmOAuthHelper().updateAdapter(); + } updateAllSettings(); } From 8d9f430ee7fb0259a1872206b0eb16f09c74a1f1 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Fri, 20 Nov 2020 08:26:56 +0000 Subject: [PATCH 129/198] Translated using Weblate (French) Currently translated at 99.7% (3555 of 3564 strings) --- OsmAnd/res/values-fr/strings.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 3a02fa25d9..189f7afc8e 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3948,9 +3948,9 @@ \nOpenPlaceReviews.org Créer un nouveau compte J\'ai déjà un compte - Vous devez vous connecter pour envoyer vos modifications. + Connectez-vous pour envoyer vos modifications, \n -\nVous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. +\nsoit avec OAuth soit avec votre identifiant et mot de passe. Vous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web. Historique de recherche @@ -3962,4 +3962,6 @@ Sélectionnez les données à exporter dans le fichier. Nécessaire pour l\'import L\'espace disponible est insuffisant + Ajouter à Mapillary + Ajouter à OpenPlaceReviews \ No newline at end of file From b5b281f7c8fbd34a873ffa8cc7b8eaa4109954b0 Mon Sep 17 00:00:00 2001 From: solokot Date: Fri, 20 Nov 2020 06:21:05 +0000 Subject: [PATCH 130/198] Translated using Weblate (Russian) Currently translated at 99.4% (3545 of 3564 strings) --- OsmAnd/res/values-ru/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 6f13c99ab5..8a1df6b5f5 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -3969,4 +3969,16 @@ У меня уже есть аккаунт История поиска Моторная лодка + Добавить в OpenPlaceReviews + Добавить в Mapillary + OsmAnd показывает фотографии из нескольких источников: +\nOpenPlaceReviews — фотогорафии POI; +\nMapillary — изображения улиц; +\nWeb / Wikimedia — фотографии POI, указанные в данных OpenStreetMap. + Ресурсы + Примерный размер файла + Требуется для импорта + Выберите данные для экспорта в файл. + На устройстве свободно только %1$s. Освободите место в хранилище или снимите выбор с некоторых экспортируемых элементов. + Недостаточно места \ No newline at end of file From 8368eea536e392802260526e5dd031e18fce9021 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Fri, 20 Nov 2020 04:39:49 +0000 Subject: [PATCH 131/198] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3564 of 3564 strings) --- OsmAnd/res/values-uk/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 7b6ac19748..a394ed4d31 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3983,4 +3983,10 @@ Необхідно для імпорту На вашому пристрої лише %1$s вільного простору. Звільніть місце або приберіть позначки з деяких елементів для експорту. Бракує простору + Додати до Mapillary + Додати до OpenPlaceReviews + OsmAnd демонструє світлини з кількох джерел: +\nOpenPlaceReviews — світлини POI; +\nMapillary - зображення вулиць; +\nМережа / Вікімедіа — світлини POI, вказані в даних OpenStreetMap. \ No newline at end of file From 6c4cd5e4d7e2b7930093b5ab5e65a55c371a9c16 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Thu, 19 Nov 2020 23:46:56 +0000 Subject: [PATCH 132/198] Translated using Weblate (Spanish) Currently translated at 97.8% (3486 of 3564 strings) --- OsmAnd/res/values-es/strings.xml | 44 ++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index efe9166106..c4f61547c4 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -3897,4 +3897,48 @@ Último modificado Nombre: Z – A Nombre: A - Z + MGRS + Novedades + MGRS + OsmAnd usa MGRS, que es similar al formato UTM NATO. + Iconos de inicio y fin + Desarollo + El fichero ya está importado en OsmAnd + Mapas locales + %1$s — %2$s + Servicio + Especial + Transporte + Servicio + Símbolos + Deporte + Emergencia + Viajar + Necesita añadir al menos dos puntos + Cuenta + Nombre de usuario + Gestionar suscripción + Enviar fichero GPX a OpenStreetMap + Introduzca las etiquetas separadas por una coma. + Cerrar Nota de OSM + Comentar Nota de OSM + Añadir foto + Registrar en +\nOpenPlaceReviews.org + Crear cuenta nueva + Ya tengo una cuenta + Historial de búsqueda + Kayak + Lancha a motor + Añadir a Mapillary + Añadir a OpenPlaceReviews + OsmAnd muestra fotos de diferentes fuentes: +\nOpenPlaceReviews - fotos POI; +\nMapillary - imágenes a nivel de calle; +\nWeb / Wikimedia - fotos POI especificadas en los datos de OpenStreetMap. + Recursos + Tamaño de fichero aproximado + Seleccione los datos para exportar al fichero. + Necesario para importar + No hay espacio suficiente \ No newline at end of file From 171315a22da69e4a61f9bbb5a608c3c995c56cc6 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Fri, 20 Nov 2020 09:14:09 +0000 Subject: [PATCH 133/198] Translated using Weblate (Hebrew) Currently translated at 99.9% (3561 of 3564 strings) --- OsmAnd/res/values-iw/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index b2dcee50ed..a4d26877ab 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -3989,4 +3989,10 @@ נדרש לייבוא במכשיר שלך יש רק %1$s פנויים. נא לפנות מקום או לבטל כמה מהפריטים לייצוא. אין מספיק מקום + הוספה ל־Mapillary + הוספה ל־OpenPlaceReviews + OsmAnd מציג תמונות ממגוון מקורות: +\nOpenPlaceReviews - תמונות של נקודות עניין; +\nMapillary - תמונות ברמת הרחוב; +\nאינטרנט / ויקימדיה - תמונות נקודות עניין שמצוינות בנתונים של OpenStreetMap. \ No newline at end of file From fdfa406b4176c077502558504aaa3ddd4f65c8ea Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Fri, 20 Nov 2020 09:44:19 +0000 Subject: [PATCH 134/198] Translated using Weblate (Arabic) Currently translated at 100.0% (3564 of 3564 strings) --- OsmAnd/res/values-ar/strings.xml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 7e5f375f16..273570acdf 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -471,7 +471,7 @@ إفريقيا آسيا أستراليا و أوقيانوسيا - الملاحة + التوجيه مع الطرق ضبط خاص لكل وضع من أوضاع الملاحة. إدارة بيانات الخرائط إعدادات عامة @@ -1153,7 +1153,7 @@ حذف إجراء التعديلات وقت وقوف السيارات يقتصر على - أقل + تدلي قائمة منبسطة تعديل OSM فارغ %1$s @@ -3329,7 +3329,7 @@ جولة تزلج طرق لجولات التزلج. تزلج - منحدرات للاستخدام الزلاجات. + منحدرات لاستخدام الزلاجات. السماح بالمسارات المتوسطة طرق أكثر صعوبة مع أقسام أكثر حدة. بعض العقبات التي ينبغي تجنبها. السماح للطرق المتقدمة @@ -3974,4 +3974,10 @@ حدد البيانات التي سيتم تصديرها إلى الملف. مطلوب للاستيراد لا يوجد مساحة كافية + أضف إلى مابيلاي + إضافة إلى OpenPlaceReviews + ويعرض صورًا من عدة مصادر: +\nOpenPlaceReviews - صور POI ؛ +\nMapillary - صور على مستوى الشارع ؛ +\nالويب / ويكيميديا - صور POI المحددة في بيانات OpenStreetMap. \ No newline at end of file From c3fe20d313416d065b0428ad771ae0bb890e73b8 Mon Sep 17 00:00:00 2001 From: Gontzal Manuel Pujana Onaindia Date: Fri, 20 Nov 2020 08:19:37 +0000 Subject: [PATCH 135/198] Translated using Weblate (Basque) Currently translated at 93.8% (3345 of 3564 strings) --- OsmAnd/res/values-eu/strings.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/OsmAnd/res/values-eu/strings.xml b/OsmAnd/res/values-eu/strings.xml index abd30d80ff..c619c2fc46 100644 --- a/OsmAnd/res/values-eu/strings.xml +++ b/OsmAnd/res/values-eu/strings.xml @@ -3799,4 +3799,17 @@ Area honi dagokio: %1$s x %2$s Nabigazio profila Hautatu zein arrasto fitxategiari gehituko zaion segmentu berria. Ezarri behar dituzu lanegunak jarraitzeko + Gehitu argazkia + Sortu kontu berria + Kontu bat daukat dagoeneko + Bilaketa-historia + Kayak + Motor itsasontzia + Gehitu Mapillary-ra + Baliabideak + Fitxategiaren tamaina gutxi gorabehera + Hautatu fitxategira esportatuko diren datuak. + Inportatzeko beharrezkoa da + Zure gailuak %1$s soilik ditu libre. Mesedez, askatu espazioa edo desautatu esportatzeko elementu batzuk. + Ez dago espazio nahikorik \ No newline at end of file From 9e9dc0fc6f2b71089765198df76f5c10e9592c8c Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Fri, 20 Nov 2020 11:12:07 +0000 Subject: [PATCH 136/198] Translated using Weblate (Sardinian) Currently translated at 99.0% (3531 of 3564 strings) --- OsmAnd/res/values-sc/strings.xml | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index fd038a717f..1d3af3ce34 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3965,14 +3965,29 @@ Pùblica cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Sos datos frunidos pro mèdiu de s\'API non sunt ligados a sa pàgina de sa rasta tua. Sas datas integradas in sos puntos de rasta no ant a èssere a disponimentu pro mèdiu de s\'API GPS, e sos puntos no ant a èssere ordinados in manera cronològica. Nointames custu sos àteros impreadores ant a pòdere iscarrigare sa rasta su matessi dae sa lista pùblica de sas rastas cun totu sas datas e sas oras integradas. Privada cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista, ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu chene datas e oras ma no ant a èssere ordinados in manera cronològica. Identificàbile cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos datos frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua. Sas datas e sas oras de sos puntos ant a èssere a disponimentu pro mèdiu de s\'API GPS pùblicu. - Arrastàbile cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu cun sas datas. Àteros impreadores ant a pòdere iscarrigare petzi puntos de rasta protzessados dae sa rasta tua chi no ant a èssere assotziados diretamente cun tie. + \"Arrastàbile\" cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica, ma sos puntos suos cun sas datas (no ant a èssere assotziados diretamente cun tie) l\'ant a èssere pro mèdiu de iscarrigamentos dae s\'API GPS pùblica. Serra sa nota de OSM Cummenta sa nota de OSM - Podes intrare impreende su mètodu seguru OAuth o cun su nùmene tuo e sa crae de intrada tua. + Intra impreende su mètodu seguru OAuth o cun su nùmene de impreadore tuo e sa crae de intrada tua. Annanghe una fotografia Registra·ti in \nOpenPlaceReviews.org - Sas fotografias benint frunidas dae su progetu a datos abertos OpenPlaceReviews.org. Pro pòdere carrigare sas fotografias tuas ti depes registrare in su situ. + Intra in su situ de su progetu a datos abertos OpenPlaceReviews.org. pro carrigare fintzas àteras fotografias. Crea unu contu nou Tèngio giai unu contu + Cronologia de chirca + Kàyak + Motoscafu + Annanghe a Mapillary + Annanghe a OpenPlaceReviews + OsmAnd ammustrat fotografias dae fontes medas: +\nOpenPlaceReviews - fotografias de sos PDI; +\nMapillary - immàgines a livellu de su caminu; +\nWeb / Wikimedia - fotografias de sos PDI dillindadas in sos datos de OpenStreetMap. + Risursas + Mannària aprossimativa de su documentu + Ischerta sos datos de esportare in su documentu. + Netzessàriu pro s\'importatzione + Su dispositivu tuo tenet petzi %1$s a disponimentu. Lìbera unu pagu de memòria o boga s\'ischerta a unos cantos elementos de esportare. + Non b\'at logu bastante \ No newline at end of file From 8ce65cd824efaa2435900b5333ef2a021f230be9 Mon Sep 17 00:00:00 2001 From: Franco Date: Fri, 20 Nov 2020 01:09:29 +0000 Subject: [PATCH 137/198] Translated using Weblate (Spanish (Argentina)) Currently translated at 99.9% (3563 of 3564 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 1e922a5610..55884a193c 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -3991,4 +3991,10 @@ Necesario para importar El dispositivo sólo tiene %1$s libre. Por favor, libera algo de espacio o desmarca algunos elementos a exportar. Sin espacio suficiente + Añadir a Mapillary + Añadir a OpenPlaceReviews + OsmAnd muestra fotos de varios repositorios: +\nOpenPlaceReviews (fotos de PDI); +\nMapillary (imágenes a nivel de calle); +\nWeb / Wikimedia (fotos de PDI incluidas en los datos de OpenStreetMap). \ No newline at end of file From f988a169683600f8b5c2d94b841adc5c0a64820e Mon Sep 17 00:00:00 2001 From: Franco Date: Fri, 20 Nov 2020 01:18:43 +0000 Subject: [PATCH 138/198] Translated using Weblate (Spanish (American)) Currently translated at 99.9% (3563 of 3564 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 55 ++++++++++++++++++---------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index dedb0d0009..085b0608e1 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -1921,7 +1921,7 @@ Informe completo Nombre de usuario y contraseña de OSM Informe - El nombre del archivo contiene caracteres ilegales + Carácter ilegal en el nombre del archivo Añade marcadores a través del mapa No se encontraron puntos de referencia Fino @@ -2462,7 +2462,7 @@ Navega por el mapa y añade puntos Medir distancia Añadir al menos un punto. - Nombre del GPX: + Nombre del archivo GPX: Mostrar en el mapa al guardar Añadir punto de referencia Guardar punto GPX @@ -3085,9 +3085,9 @@ Cambia el zoom del mapa desplazando la rueda hacia arriba y abajo. La tecla «Escape» retrocede a la aplicación WunderLINQ. Controlar con WunderLINQ Añadir al menos un elemento a la lista en los ajustes de «Acción rápida» - Esquí alpino o de descenso + Esquí alpino y de descenso Pistas de esquí alpino o de descenso y acceso a remontes mecánicos. - Esquí de travesía o nórdico + Esquí de travesía y nórdico Senderos para esquí nórdico o de travesía. Esquí de travesía Rutas para esquí de travesía. @@ -3368,7 +3368,7 @@ Estima el tiempo de llegada para los tipos de caminos desconocidos, y limita la velocidad para todos los caminos (puede afectar a la ruta) «%1$s» importado(s). Traza guardada - Nombre del archivo vacío + Nombre de archivo vacío Revertir Un botón para hacer que la pantalla se centre en el punto de partida. Luego define el destino o activa el cálculo de la ruta. Mostrar nodo de la red de rutas ciclistas @@ -3835,7 +3835,7 @@ Elegir otra traza Guardar traza en archivo GPX Grabar la traza automáticamente al navegar - Intervalo de registro para la grabación general de trazas (activar mediante el widget de grabación de viaje sobre el mapa). + Intervalo de registro para la grabación general de trazas (activado desde el widget «Grabación de viaje» en el mapa). Guardar como nueva traza Recalcular toda la traza usando el perfil elegido. A continuación, ajusta la traza al camino permitido más cercano con un perfil de navegación. @@ -3890,7 +3890,7 @@ Rehacer • Se ha actualizado la función «Planificar ruta»: permite utilizar diferentes tipos de navegación por segmento y la inclusión de trazas \n -\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio/fin. +\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio y fin. \n \n • Mejoras en la visibilidad de los nodos de bicicleta. \n @@ -3906,7 +3906,7 @@ Nombre: Z – A Nombre: A – Z Último modificado - Iconos de inicio/fin + Iconos de inicio y fin Gracias por comprar las «Curvas de nivel» La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en AppGallery. El pago será cargado a la cuenta de AppGallery al confirmar la compra. @@ -3922,7 +3922,7 @@ Datos de «OsmAnd Live» Datos de «OsmAnd Live» Navegación compleja - Inicia sesión con OAuth para usar las funciones de edición de OSM + Ingresar con OAuth para usar las funciones de edición de OSM Ingresar a través de OAuth Sesión finalizada Desarrollo @@ -3948,35 +3948,50 @@ Emergencia Comodidad El archivo ya fue importado en OsmAnd - Iniciar sesión - Usar nombre de usuario y contraseña + Nombre de usuario + Ingresar nombre de usuario y contraseña Hay un problema con la suscripción. Pulsa el botón para ir a los ajustes de la suscripción de Google Play y corregir el método de pago. La suscripción a OsmAnd Live se ha pausado La suscripción a OsmAnd Live está en espera La suscripción a OsmAnd Live ha caducado Ingresar con OpenStreetMap Enviar archivo GPX a OpenStreetMap - Debes iniciar sesión para subir cambios nuevos o modificados. + Inicia sesión para subir los cambios nuevos o modificados, \n -\nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña. +\nya sea con OAuth o usando el nombre de usuario y contraseña. Debes añadir al menos dos puntos Historial de marcadores Gestionar suscripción - Ingresar a OpenStreetMap.org + Ingresar en OpenStreetMap.org Iniciar sesión en OpenStreetMap Cuenta - Trazable significa que la traza no aparecerá en ninguna lista pública pero el conjunto de puntos estarán disponibles a través de la API pública de GPS y con marcas de tiempo. Otros usuarios sólo podrán descargar el conjunto de puntos procesados de su traza que no se pueden asociar directamente con usted. - Público significa que la traza se mostrará públicamente en tu listado de trazas y en los listados de trazas GPS públicas. Los datos servidos a través de la API no harán referencia a su página de trazas. Las marcas de tiempo de los puntos de la traza no estarán disponible a través de la API pública de GPS, aunque los puntos se ordenan cronológicamente. Sin embargo, otros usuarios podrán descargar la traza en bruto de la lista de trazas públicas y las marcas de tiempo que contiene. - Privado significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo. - Identificable significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Las marcas de tiempo de los puntos de la traza estarán disponibles a través de la API pública de GPS. + «Trazable» significa que la traza no aparece en ninguna lista pública, pero el conjunto de puntos procesados con marcas de tiempo (no se pueden asociar directamente con usted) estarán disponibles a través de la API pública de GPS. + «Público» significa que la traza se mostrará públicamente en tu listado de trazas y en los listados de trazas GPS públicas con marcas de tiempo en bruto. Los datos servidos a través de la API no harán referencia a su página de trazas. Las marcas de tiempo de los puntos de la traza no estarán disponible a través de la API pública de GPS, aunque los puntos se ordenan cronológicamente. + «Privado» significa que la traza no aparecerá en ninguna lista pública, pero el conjunto de puntos seguirá estando disponible en orden cronológico a través de la API pública de GPS y sin marcas de tiempo. + «Identificable» significa que la traza se mostrará públicamente en tu listado de trazas y en el listado de trazas GPS públicas, es decir que otros usuarios podrán descargar la traza en bruto y asociarla con su nombre de usuario. Los datos servidos a través de la API de conjunto de puntos hará referencia a la página original de la traza. Ingresa etiquetas separadas por comas. Añadir foto Ya tengo cuenta Crear nueva cuenta - Las fotos son provistas por el proyecto de datos abiertos OpenPlaceReviews.org. Para subir fotos debes registrarte en el sitio web. + Ingresa en el sitio web del proyecto de datos abiertos OpenPlaceReviews.org para subir más fotos. Registrarse en \nOpenPlaceReviews.org - Puedes iniciar sesión con el método seguro de OAuth o usar el nombre de usuario y contraseña. + Ingresa usando el método seguro de OAuth o usa el nombre de usuario y contraseña. Comentar nota de OSM Cerrar nota de OSM + Historial de búsqueda + Recursos + Marca los datos que serán exportados al archivo. + Necesario para importar + El dispositivo sólo tiene %1$s libre. Por favor, libera algo de espacio o desmarca algunos elementos a exportar. + Sin espacio suficiente + Tamaño aproximado del archivo + Lancha a motor + Kayak + Añadir a OpenPlaceReviews + Añadir a Mapillary + OsmAnd muestra fotos de varios repositorios: +\nOpenPlaceReviews (fotos de PDI); +\nMapillary (imágenes a nivel de calle); +\nWeb / Wikimedia (fotos de PDI incluidas en los datos de OpenStreetMap). \ No newline at end of file From f5827ae1141720e68fa3bb31306250d834afdc01 Mon Sep 17 00:00:00 2001 From: Franco Date: Fri, 20 Nov 2020 01:19:07 +0000 Subject: [PATCH 139/198] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-es-rUS/phrases.xml | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-es-rUS/phrases.xml b/OsmAnd/res/values-es-rUS/phrases.xml index 5f62bd195b..1e57d33830 100644 --- a/OsmAnd/res/values-es-rUS/phrases.xml +++ b/OsmAnd/res/values-es-rUS/phrases.xml @@ -3857,4 +3857,34 @@ Azotea Apartadero Punto GPX + Subnacional + Oficina representativa + Oficina + Enlace + Dirigido por un embajador + Residencia + Nunciatura + Misión + Sección de intereses + Alto comisionado + Embajada + Delegación + Sucursal;Ramal + + No + Visas de no inmigrante + + No + Visas de inmigrante + + No + Servicios al ciudadano + Enlace + Embajada + Dirigido por un cónsul + Cónsul honorario + Consulado + Consulado general + Oficina consular + Agencia consular \ No newline at end of file From 821178ef458f02e0dc69f321549198c1e9607312 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 20 Nov 2020 02:36:05 +0000 Subject: [PATCH 140/198] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3564 of 3564 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 32 +++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 1636f2db70..7785c07113 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -3917,10 +3917,10 @@ 原生公共運輸發展 切換到 Java(安全)公共運輸路線計算 有什麼新鮮事 - 執行 OAuth 登入以使用 osmedit 功能 + 以 OAuth 登入以使用 osmedit 功能 透過 OAuth 登入 清除 OpenStreetMap OAuth 權杖 - 成功登出 + 已登出 適用於有專用道路與軌道的雪地摩托車駕駛。 檔案已在 OsmAnd 匯入 使用 2 相的 A* 路線演算法 @@ -3948,14 +3948,14 @@ OsmAnd Live 訂閱已過期 OsmAnd Live 訂閱已暫停 OsmAnd Live 訂閱已暫停 - 登入到 OpenStreetMap - 登入到 OpenStreetMap.org - 您必須登入以上傳新的或修正過的變更。 + 登入 OpenStreetMap + 登入 OpenStreetMap.org + 登入以上傳新的或修正過的變更, \n -\n您可以使用安全的 OAuth 方法或使用您的登入與密碼來登入。 - 使用登入與密碼 +\n以 OAuth 或使用您的使用者名稱與密碼來登入。 + 以使用者名稱與密碼登入 帳號 - 登入 + 使用者名稱 使用 OpenStreetMap 登入 標記歷史 傳送 GPX 檔案到 OpenStreetMap @@ -3966,14 +3966,26 @@ 「可追蹤」代表軌跡不會在任何公開的清單中顯示,但帶有時間戳(這並不會與您直接相關聯)的已處理追蹤點可從公開的 GPS API 下載。 關閉 OSM 註記 評論 OSM 註記 - 您可以使用安全的 OAuth 方式或是使用您的帳號與密碼來登入。 + 使用安全的 OAuth 方式或是使用您的使用者名稱與密碼來登入。 新增照片 註冊於 \nOpenPlaceReviews.org - 照片由開放資料專案 OpenPlaceReviews.org 提供。為了上傳您的照片,您必須在網站上註冊。 + 登入開放資料專案網站 OpenPlaceReviews.org 以上傳更多照片。 建立新帳號 我已經有帳號了 搜尋歷史紀錄 皮艇 快艇 + 新增到 Mapillary + 新增到 OpenPlaceReviews + OsmAnd 從多個來源顯示照片: +\nOpenPlaceReviews - POI 照片; +\nMapillary - 街景; +\n網路/維基媒體 - 特定 OpenStreetMap 資料的 POI 照片。 + 資源 + 大約檔案大小 + 選取要匯出到檔案的資料。 + 匯入需要 + 您的裝置僅剩 %1$s 可用空間。請釋出一些空間或取消選取要匯出的部份檔案。 + 空間不足 \ No newline at end of file From c75394f82c6e4dcb37f4bbfbd51a343fabcae267 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 20 Nov 2020 02:48:33 +0000 Subject: [PATCH 141/198] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-zh-rTW/phrases.xml | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index c20eccfaf6..083311b0c0 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -3849,4 +3849,34 @@ 屋頂 GPX 點 雷達塔 + + + + + + + 準外交 + 代表處 + 辦公室 + 名譽領事 + 總領事館 + 領事館 + 領事機構 + 由領事率領 + 住宅 + 代表駐地 + 代表機構 + 利益代表處 + 高級專員 + 代表團 + 分處 + 由大使率領 + 聯絡處 + 大使館 + 公民服務 + 移民簽證 + 非移民簽證 + 聯絡處 + 領事館 + 大使館 \ No newline at end of file From 70677ba50b8a801c6dc4e4e6cf4aa8b92ea7d944 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Thu, 19 Nov 2020 23:48:58 +0000 Subject: [PATCH 142/198] Translated using Weblate (Spanish) Currently translated at 100.0% (271 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/es/ --- OsmAnd-telegram/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-es/strings.xml b/OsmAnd-telegram/res/values-es/strings.xml index 29442e4212..d253eabfff 100644 --- a/OsmAnd-telegram/res/values-es/strings.xml +++ b/OsmAnd-telegram/res/values-es/strings.xml @@ -250,7 +250,7 @@ Elige la hora de visualización Fecha de Inicio — Fin Mensajes guardados - Seleccione la zona horaria que desea mostrar en los mensajes de ubicación. + Seleccione la zona horaria a mostrar en sus mensajes de ubicación. Zona horaria Unidades y formatos Cambia las unidades de longitud. From 73cc6b8f95a5737aab37a51a9fecbd1933f138ec Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Fri, 20 Nov 2020 11:13:17 +0000 Subject: [PATCH 143/198] Translated using Weblate (Sardinian) Currently translated at 99.1% (3532 of 3564 strings) --- OsmAnd/res/values-sc/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 1d3af3ce34..c083252cd9 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3964,7 +3964,7 @@ Inserta sas etichetas iscrobadas dae vìrgulas. Pùblica cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Sos datos frunidos pro mèdiu de s\'API non sunt ligados a sa pàgina de sa rasta tua. Sas datas integradas in sos puntos de rasta no ant a èssere a disponimentu pro mèdiu de s\'API GPS, e sos puntos no ant a èssere ordinados in manera cronològica. Nointames custu sos àteros impreadores ant a pòdere iscarrigare sa rasta su matessi dae sa lista pùblica de sas rastas cun totu sas datas e sas oras integradas. Privada cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista, ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu chene datas e oras ma no ant a èssere ordinados in manera cronològica. - Identificàbile cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos datos frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua. Sas datas e sas oras de sos puntos ant a èssere a disponimentu pro mèdiu de s\'API GPS pùblicu. + \"Identificàbile\" cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos puntos de rastas cun datas e oras dae s\'API GPS frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua. \"Arrastàbile\" cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica, ma sos puntos suos cun sas datas (no ant a èssere assotziados diretamente cun tie) l\'ant a èssere pro mèdiu de iscarrigamentos dae s\'API GPS pùblica. Serra sa nota de OSM Cummenta sa nota de OSM From 72ac363d7d2004dc6f0cfb807daf73b7e1258ba0 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Fri, 20 Nov 2020 13:36:44 +0200 Subject: [PATCH 144/198] Fix unnecessary logout --- .../plus/osmedit/OsmEditingFragment.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index 3fb8c62977..5602c23483 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -15,7 +15,6 @@ import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; -import net.osmand.PlatformUtil; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.AndroidUiHelper; @@ -31,16 +30,12 @@ import net.osmand.plus.settings.preferences.SwitchPreferenceEx; import net.osmand.plus.widgets.style.CustomTypefaceSpan; import net.osmand.util.Algorithms; -import org.apache.commons.logging.Log; - import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID; import static net.osmand.plus.osmedit.OsmEditingPlugin.OSM_EDIT_TAB; public class OsmEditingFragment extends BaseSettingsFragment implements OnPreferenceChanged, ValidateOsmLoginListener, OsmAuthorizationListener { - private static final Log log = PlatformUtil.getLog(OsmEditingFragment.class); - private static final String OSM_LOGOUT = "osm_logout"; private static final String OPEN_OSM_EDITS = "open_osm_edits"; public static final String OSM_LOGIN_DATA = "osm_login_data"; @@ -213,16 +208,19 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer } private void osmLogout() { - if (isValidToken()) { - settings.USER_ACCESS_TOKEN.resetToDefault(); - settings.USER_ACCESS_TOKEN_SECRET.resetToDefault(); - authorizationAdapter.resetToken(); - } else { - settings.USER_NAME.resetToDefault(); - settings.USER_PASSWORD.resetToDefault(); + boolean validToken = isValidToken(); + if (validToken || isLoginExists()) { + if (validToken) { + settings.USER_ACCESS_TOKEN.resetToDefault(); + settings.USER_ACCESS_TOKEN_SECRET.resetToDefault(); + authorizationAdapter.resetToken(); + } else { + settings.USER_NAME.resetToDefault(); + settings.USER_PASSWORD.resetToDefault(); + } + app.showShortToastMessage(R.string.osm_edit_logout_success); + updateAllSettings(); } - app.showShortToastMessage(R.string.osm_edit_logout_success); - updateAllSettings(); } @Override From 511bc706394f37116d797b8bb1b0b22ea2a5660e Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Fri, 20 Nov 2020 14:02:15 +0200 Subject: [PATCH 145/198] Fix #10217 --- .../net/osmand/plus/views/layers/GPXLayer.java | 16 ++++++++-------- .../plus/views/layers/geometry/GeometryWay.java | 6 ++++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index c54b6afea5..117c2a4777 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -37,9 +37,6 @@ import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; -import net.osmand.plus.mapmarkers.MapMarkersHelper; -import net.osmand.plus.mapmarkers.MapMarker; -import net.osmand.plus.mapmarkers.MapMarkersGroup; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; @@ -47,6 +44,9 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.PointImageDrawable; import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint; import net.osmand.plus.mapcontextmenu.other.TrackChartPoints; +import net.osmand.plus.mapmarkers.MapMarker; +import net.osmand.plus.mapmarkers.MapMarkersGroup; +import net.osmand.plus.mapmarkers.MapMarkersHelper; import net.osmand.plus.render.OsmandRenderer; import net.osmand.plus.render.OsmandRenderer.RenderingContext; import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu; @@ -353,7 +353,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM } private void drawSelectedFilesSplits(Canvas canvas, RotatedTileBox tileBox, List selectedGPXFiles, - DrawSettings settings) { + DrawSettings settings) { if (tileBox.getZoom() >= START_ZOOM) { // request to load OsmandApplication app = view.getApplication(); @@ -634,7 +634,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM } private void drawSelectedFilesSegments(Canvas canvas, RotatedTileBox tileBox, - List selectedGPXFiles, DrawSettings settings) { + List selectedGPXFiles, DrawSettings settings) { SelectedGpxFile currentTrack = null; for (SelectedGpxFile selectedGpxFile : selectedGPXFiles) { String width = getTrackWidthName(selectedGpxFile.getGpxFile(), ""); @@ -653,7 +653,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM } private void drawSelectedFileSegments(SelectedGpxFile selectedGpxFile, boolean currentTrack, Canvas canvas, - RotatedTileBox tileBox, DrawSettings settings) { + RotatedTileBox tileBox, DrawSettings settings) { List segments = selectedGpxFile.getPointsToDisplay(); for (TrkSegment ts : segments) { String width = getTrackWidthName(selectedGpxFile.getGpxFile(), ""); @@ -1010,8 +1010,8 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM @Override public void applyNewObjectPosition(@NonNull Object o, - @NonNull LatLon position, - @Nullable final ContextMenuLayer.ApplyMovedObjectCallback callback) { + @NonNull LatLon position, + @Nullable final ContextMenuLayer.ApplyMovedObjectCallback callback) { if (o instanceof WptPt) { final WptPt objectInMotion = (WptPt) o; SelectedGpxFile selectedGpxFile = pointFileMap.get(objectInMotion); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/geometry/GeometryWay.java b/OsmAnd/src/net/osmand/plus/views/layers/geometry/GeometryWay.java index 02671e2207..9c7fd1c782 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/geometry/GeometryWay.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/geometry/GeometryWay.java @@ -338,8 +338,8 @@ public abstract class GeometryWay style : styles) { if (style.hasPathLine()) { hasPathLine = true; @@ -360,7 +360,9 @@ public abstract class GeometryWay Date: Fri, 20 Nov 2020 16:28:57 +0200 Subject: [PATCH 146/198] Fix note upload --- .../plus/osmedit/OsmBugsRemoteUtil.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java index f2fba4c52d..f6200d2ad3 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java @@ -1,9 +1,12 @@ package net.osmand.plus.osmedit; +import com.github.scribejava.core.model.Response; + import net.osmand.PlatformUtil; import net.osmand.osm.io.Base64; import net.osmand.osm.io.NetworkUtils; +import net.osmand.osm.oauth.OsmOAuthAuthorizationClient; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.Version; @@ -19,6 +22,7 @@ import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URLEncoder; +import java.util.concurrent.ExecutionException; public class OsmBugsRemoteUtil implements OsmBugsUtil { @@ -95,8 +99,8 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { private OsmBugResult editingPOI(String url, String requestMethod, String userOperation, boolean anonymous) { - OsmOAuthAuthorizationAdapter client = new OsmOAuthAuthorizationAdapter(app); - OsmBugResult r = new OsmBugResult(); + OsmOAuthAuthorizationAdapter authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); + OsmBugResult result = new OsmBugResult(); try { HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url); log.info("Editing poi " + url); @@ -105,8 +109,22 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); //$NON-NLS-1$ if (!anonymous) { - if (client.isValidToken()) { - connection.addRequestProperty("Authorization", "OAuth " + client.getClient().getAccessToken().getToken()); + if (authorizationAdapter.isValidToken()) { + try { + OsmOAuthAuthorizationClient client = authorizationAdapter.getClient(); + Response response = client.performRequest(url, requestMethod, userOperation); + if (response.getCode() != HttpURLConnection.HTTP_OK) { + result.warning = response.getMessage() + "\n" + response.getBody(); + return result; + } + } catch (InterruptedException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (ExecutionException e) { + log.error(e); + result.warning = e.getMessage(); + } + return result; } else { String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); //$NON-NLS-1$ connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ @@ -129,21 +147,20 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { log.info("Response : " + responseBody); //$NON-NLS-1$ connection.disconnect(); if (!ok) { - r.warning = msg + "\n" + responseBody; + result.warning = msg + "\n" + responseBody; } } catch (FileNotFoundException | NullPointerException e) { // that's tricky case why NPE is thrown to fix that problem httpClient could be used String msg = app.getString(R.string.auth_failed); log.error(msg, e); - r.warning = app.getString(R.string.auth_failed) + ""; + result.warning = app.getString(R.string.auth_failed) + ""; } catch (MalformedURLException e) { log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$ - r.warning = e.getMessage() + ""; + result.warning = e.getMessage() + ""; } catch (IOException e) { log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$ - r.warning = e.getMessage() + " link unavailable"; + result.warning = e.getMessage() + " link unavailable"; } - return r; + return result; } - } From 212dbdb8fff47c27aaaffc151da8121bbabafdf9 Mon Sep 17 00:00:00 2001 From: nazar-kutz Date: Fri, 20 Nov 2020 17:20:59 +0200 Subject: [PATCH 147/198] Fix "Local wikipedia results don't show in search history" --- .../src/main/java/net/osmand/osm/MapPoiTypes.java | 14 -------------- .../net/osmand/plus/search/QuickSearchHelper.java | 7 ++++++- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java index 9bff39dcb1..e273fa4e7f 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapPoiTypes.java @@ -205,20 +205,6 @@ public class MapPoiTypes { if (pt != null && !pt.isReference()) { return pt; } - if (pc.isWiki() && name.startsWith(WIKI_LANG)) { - return getPoiTypeForWiki(pc, name); - } - } - return null; - } - - public AbstractPoiType getPoiTypeForWiki(PoiCategory osmwiki, String name) { - for (PoiType pt : osmwiki.getPoiTypes()) { - for (PoiType wikiLangPt : pt.getPoiAdditionals()) { - if (wikiLangPt != null && Algorithms.objectEquals(wikiLangPt.getOsmTag(), name)) { - return wikiLangPt; - } - } } return null; } diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java index 55da1967d0..1213f550c1 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchHelper.java @@ -436,7 +436,12 @@ public class QuickSearchHelper implements ResourceListener { SearchResult sr = new SearchResult(phrase); PointDescription pd = point.getName(); if (pd.isPoiType()) { - AbstractPoiType pt = MapPoiTypes.getDefault().getAnyPoiTypeByKey(pd.getName()); + String name = pd.getName(); + MapPoiTypes mapPoiTypes = MapPoiTypes.getDefault(); + AbstractPoiType pt = mapPoiTypes.getAnyPoiTypeByKey(name); + if (pt == null) { + pt = mapPoiTypes.getAnyPoiAdditionalTypeByKey(name); + } if (pt != null) { sr.localeName = pt.getTranslation(); sr.object = pt; From 240714b4e08b9f193cb7b8eec6d293045220ae18 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Fri, 20 Nov 2020 19:24:38 +0300 Subject: [PATCH 148/198] Added possibility to build OsmAnd as library --- OsmAnd/build.gradle.lib | 521 ++++++++++++++++++ .../osmand/plus/activities/MapActivity.java | 3 - .../audionotes/AudioVideoNotesPlugin.java | 36 +- .../plus/srtmplugin/TerrainFragment.java | 19 +- .../osmand/plus/views/OsmandMapTileView.java | 12 +- 5 files changed, 552 insertions(+), 39 deletions(-) create mode 100644 OsmAnd/build.gradle.lib diff --git a/OsmAnd/build.gradle.lib b/OsmAnd/build.gradle.lib new file mode 100644 index 0000000000..b70a881218 --- /dev/null +++ b/OsmAnd/build.gradle.lib @@ -0,0 +1,521 @@ +//apply plugin: 'com.android.application' +apply plugin: 'com.android.library' + +// Global Parameters accepted +// TARGET_APP_NAME - app name +// APK_NUMBER_VERSION - version number of apk +// APK_VERSION_SUFFIX - build number like #99999Z, appended (for dev builds) to Manifest's versionName as X.X.X#99999Z +// Z means flavor: M=-master, D=-main-default, B=-Blackberry, Des=-design, MQA=-main-qt-arm, MQDA=-main-qt-default-arm, S=-sherpafy +// APP_EDITION - date stamp of builds +// APP_FEATURES - features +play_market +gps_status -parking_plugin -blackberry -free_version -amazon + +// 1. To be done Filter fonts +// +// +// +// +// +// +// Less important + +task printc { + configurations.each { if(it.isCanBeResolved()) println it.name } +} + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.3" + // compileNdkVersion "android-ndk-r17b" + + signingConfigs { + development { + storeFile file("../keystores/debug.keystore") + storePassword "android" + keyAlias "androiddebugkey" + keyPassword "android" + } + + publishing { + storeFile file("/var/lib/jenkins/osmand_key") + storePassword System.getenv("OSMAND_APK_PASSWORD") + keyAlias "osmand" + keyPassword System.getenv("OSMAND_APK_PASSWORD") + } + } + + defaultConfig { + minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15 + targetSdkVersion 29 + versionCode 390 + versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode + multiDexEnabled true + versionName "3.9.0" + versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName + versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName + // Stops the Gradle plugin’s automatic rasterization of vectors + // vectorDrawables.generatedDensities = ['hdpi'] + vectorDrawables.useSupportLibrary = true + } + + lintOptions { + lintConfig file("lint.xml") + abortOnError false + warningsAsErrors false + } + + /* + bundle { + language { + // Specifies that the app bundle should not support + // configuration APKs for language resources. These + // resources are instead packaged with each base and + // dynamic feature APK. + enableSplit = false + } + } + */ + // related to kuromoji + //packagingOptions { + // exclude '/META-INF/CONTRIBUTORS.md' + // exclude '/META-INF/LICENSE.md' + // exclude '/META-INF/NOTICE.md' + //} + + // This is from OsmAndCore_android.aar - for some reason it's not inherited + aaptOptions { + // Don't compress any embedded resources + noCompress "qz" + cruncherEnabled = false + // Flag notifies aapt to keep the attribute IDs around + // additionalParameters "--no-version-vectors" + } + + dexOptions { + javaMaxHeapSize "4g" + } + + sourceSets { + main { + manifest.srcFile "AndroidManifest.xml" + jni.srcDirs = [] + jniLibs.srcDirs = ["libs"] + aidl.srcDirs = ["src"] + java.srcDirs = ["src", "src-google"] + resources.srcDirs = ["src"] + renderscript.srcDirs = ["src"] + res.srcDirs = ["res"] + assets.srcDirs = ["assets"] + } + debug { + manifest.srcFile "AndroidManifest-debug.xml" + } + /* + full { + java.srcDirs = ["src-google"] + } + free { + java.srcDirs = ["src-google"] + manifest.srcFile "AndroidManifest-free.xml" + } + freedev { + java.srcDirs = ["src-google"] + manifest.srcFile "AndroidManifest-freedev.xml" + } + freehuawei { + java.srcDirs = ["src-huawei"] + manifest.srcFile "AndroidManifest-freehuawei.xml" + } + */ + legacy { + jniLibs.srcDirs = ["libc++"] + } + } + + flavorDimensions "coreversion", "abi" + productFlavors { + // ABI + armv7 { + dimension "abi" + ndk { + abiFilter 'armeabi-v7a' + } + } + arm64 { + dimension "abi" + ndk { + abiFilter 'arm64-v8a' + } + } + x86 { + dimension "abi" + ndk { + abiFilters 'x86', 'x86_64' + } + } + armonly { + dimension "abi" + ndk { + abiFilters 'arm64-v8a', 'armeabi-v7a' + } + } + fat { + dimension "abi" + ndk { + abiFilters 'arm64-v8a', 'x86', 'x86_64', 'armeabi-v7a' + } + } + + /* + // Version + freedev { + dimension "version" + applicationId "net.osmand.dev" + // resConfig "en" + } + free { + dimension "version" + applicationId "net.osmand" + } + full { + dimension "version" + applicationId "net.osmand.plus" + } + freehuawei { + dimension "version" + applicationId "net.osmand.huawei" + } + */ + // CoreVersion + // Build that doesn't include 3D OpenGL + legacy { + dimension "coreversion" + } + // Build that includes 3D OpenGL release + qtcore { + dimension "coreversion" + } + // Build that includes 3D OpenGL debug + qtcoredebug { + dimension "coreversion" + } + } + + buildTypes { + debug { + buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" + buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" + buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" + signingConfig signingConfigs.development + } + release { + buildConfigField "String", "OPR_BASE_URL", "\"https://test.openplacereviews.org/\"" + buildConfigField "String", "OSM_OAUTH_CONSUMER_KEY", "\"Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y\"" + buildConfigField "String", "OSM_OAUTH_CONSUMER_SECRET", "\"lxulb3HYoMmd2cC4xxNe1dyfRMAY8dS0eNihJ0DM\"" + signingConfig signingConfigs.publishing + } + } + +} + +def replaceNoTranslate(line) { + if (line.contains("\"app_name\"") && System.getenv("TARGET_APP_NAME")) { + return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<") + } + if (line.contains("\"app_name_free\"") && System.getenv("TARGET_APP_NAME")) { + return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<") + } + if (line.contains("\"app_edition\"") && System.getenv("APP_EDITION")) { + return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_EDITION") + "<") + } + if (line.contains("\"versionFeatures\"") && System.getenv("APP_FEATURES")) { + return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_FEATURES") + "<") + } + return line; +} + +task updateNoTranslate(type: Copy) { + from('.') { + include 'no_translate.xml' + filter { + line -> replaceNoTranslate(line); + } + } + into 'res/values/' +} + +task validateTranslate { + println "Validating translations" + + file("res").eachFileRecurse groovy.io.FileType.FILES, { + if (it.name == "strings.xml" || it.name == "phrases.xml") { + it.eachLine { line -> + if (line.contains("\$ s") || line.contains("\$ d") || line.contains("\$ f") || + line.contains(" \$s") || line.contains(" \$d") || line.contains(" \$f") || + line.contains("1\$ ") || line.contains("2\$ ") || line.contains("3\$ ") || + line.contains("%1s") || line.contains(" 1\$s") || + (line.contains("% \$") || line.contains("% 1") || line.contains("% 2") || + line.contains("% 3") || line.contains("% s"))) { + throw new GradleException("Incorrect translation " + it.getAbsolutePath() + " " + line); + } + } + } + } +} + +task downloadWorldMiniBasemap { + doLast { + ant.get(src: 'http://builder.osmand.net/basemap/World_basemap_mini_2.obf', dest: 'assets/World_basemap_mini.obf', skipexisting: 'true') + } +} + +task collectVoiceAssets(type: Sync) { + from "../../resources/voice" + into "assets/voice" + include "**/*.js" +} + +task cleanNoTranslate(type: Delete) { + delete('res/values/no_translate.xml') +} + +task collectFonts(type: Copy) { + from "../../resources/fonts" + from "../../resources/rendering_styles/fonts" +// from "../../resources/rendering_styles/fonts/OpenSans" + into "assets/fonts" + include "*.ttf" +} + +task collectHelpContentsStyle(type: Copy) { + from("../../help/website/help/") { + include "style.css" + } + into "assets" +} + +task collectHelpContentsAssets(type: Copy) { + from("../../help/website/help") { + include "about.html" + include "changes.html" + include "faq.html" + include "technical-articles.html" + include "map-legend.html" + } + from("../../help/website/feature_articles") { + include "*.html" + } + from("../../help/website/blog_articles") { + include "osmand-3-8-released.html" + } + into "assets/feature_articles" +} + +task copyPoiCategories(type: Copy) { + from("../../resources/poi") { + include "poi_categories.json" + } + into "assets" +} + +task copyMapShaderIcons(type: Sync) { + // from "../../resources/rendering_styles/style-icons/map-shaders-png" + // into "res/" + from "../../resources/rendering_styles/style-icons/map-shaders-vector" + into "res/drawable" + include "**/*.png", "**/*.xml" + preserve { + include '**/*' + exclude "**/h_*" + } +} + +task copyMapPOIIcons(type: Sync) { + from "../../resources/rendering_styles/style-icons/map-icons-vector" + into "res/drawable/" + // from "../../resources/rendering_styles/style-icons/map-icons-png" + // into "res/" + + include "**/*.png", "**/*.xml" + preserve { + include '**/*' + exclude "**/mm_*" + } +} + +task copyLargePOIIcons(type: Sync) { + from "../../resources/rendering_styles/style-icons/poi-icons-vector" + into "res/drawable/" + include "**/*.png", "**/*.xml" + preserve { + include '**/*' + exclude "**/mx_*" + } +} + +task copyWidgetIconsXhdpi(type: Sync) { + from "res/drawable-xxhdpi/" + into "res/drawable-large-xhdpi/" + include "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png" + preserve { + include '*' + exclude "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png" + } +} + +task copyWidgetIconsHdpi(type: Sync) { + from "res/drawable-xhdpi/" + into "res/drawable-large-hdpi/" + include "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png" + preserve { + include '*' + exclude "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png" + } +} + +task copyWidgetIcons(type: Sync) { + from "res/drawable-hdpi/" + into "res/drawable-large/" + include "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png" + preserve { + include '*' + exclude "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png" + } +} + +task collectExternalResources { + dependsOn collectVoiceAssets, + collectFonts, + collectHelpContentsAssets, + collectHelpContentsStyle, + copyMapShaderIcons, + copyMapPOIIcons, + copyLargePOIIcons, + updateNoTranslate, + validateTranslate, + copyWidgetIcons, + copyWidgetIconsHdpi, + copyWidgetIconsXhdpi, + copyPoiCategories, + downloadWorldMiniBasemap +} + +// Legacy core build +import org.apache.tools.ant.taskdefs.condition.Os + +task buildOsmAndCore(type: Exec) { + Gradle gradle = getGradle() + String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase() + String flavour = ""; + if(!tskReqStr.contains("fat")) { + if(tskReqStr.contains("arm64")) { + flavour = flavour.length() == 0 ? "ARM64_ONLY" : "" + } + if(tskReqStr.contains("armv7")) { + flavour = flavour.length() == 0 ? "ARMV7_ONLY" : "" + } + if(tskReqStr.contains("armonly")) { + flavour = flavour.length() == 0 ? "ARM_ONLY" : "" + } + if(tskReqStr.contains("x86")) { + flavour = flavour.length() == 0 ? "X86_ONLY" : "" + } + } + + description "Build Legacy OsmAndCore" + + if (!Os.isFamily(Os.FAMILY_WINDOWS)) { + if(flavour.length() > 0) { + environment "$flavour", "1" + } + commandLine "bash", file("./old-ndk-build.sh").getAbsolutePath() + } else { + commandLine "cmd", "/c", "echo", "Not supported" + } +} + +task cleanupDuplicatesInCore() { + dependsOn buildOsmAndCore + // doesn't work for legacy debug builds + doLast { + file("libc++/armeabi-v7a").mkdirs() + file("libs/armeabi-v7a/libc++_shared.so").renameTo(file("libc++/armeabi-v7a/libc++_shared.so")) + file("libc++/arm64-v8a").mkdirs() + file("libs/arm64-v8a/libc++_shared.so").renameTo(file("libc++/arm64-v8a/libc++_shared.so")) + file("libc++/x86").mkdirs() + file("libs/x86/libc++_shared.so").renameTo(file("libc++/x86/libc++_shared.so")) + file("libc++/x86_64").mkdirs() + file("libs/x86_64/libc++_shared.so").renameTo(file("libc++/x86_64/libc++_shared.so")) + } +} + +afterEvaluate { + android.libraryVariants.all { variant -> + variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore) + } + Gradle gradle = getGradle() + String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase() + if (tskReqStr.contains("huawei")) { + apply plugin: 'com.huawei.agconnect' + } +} + +task appStart(type: Exec) { + // linux + commandLine 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity' + // windows + // commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity' +} + +dependencies { + implementation project(path: ':OsmAnd-java', configuration: 'android') + implementation project(':OsmAnd-api') + implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.gridlayout:gridlayout:1.0.0' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.2.1' + implementation 'androidx.browser:browser:1.0.0' + implementation 'androidx.preference:preference:1.1.0' + implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs') + + implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' + implementation 'commons-codec:commons-codec:1.11' + implementation 'it.unibo.alice.tuprolog:tuprolog:3.2.1' + implementation 'org.apache.commons:commons-compress:1.17' + implementation 'com.moparisthebest:junidecode:0.1.1' + implementation 'org.immutables:gson:2.5.0' + implementation 'com.vividsolutions:jts-core:1.14.0' + implementation 'com.google.openlocationcode:openlocationcode:1.0.4' + implementation 'com.android.billingclient:billing:2.0.3' + // turn off for now + //implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0' + implementation 'com.squareup.picasso:picasso:2.71828' + implementation 'me.zhanghai.android.materialprogressbar:library:1.4.2' + // JS core + implementation group: 'org.mozilla', name: 'rhino', version: '1.7.9' +// size restrictions +// implementation 'com.ibm.icu:icu4j:50.1' +// implementation 'net.sf.trove4j:trove4j:3.0.3' + + qtcoreImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs') + qtcoredebugImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs') + + legacyImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@jar" + qtcoredebugImplementation "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar" + qtcoredebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" + qtcoreImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar" + qtcoreImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" + implementation ("com.getkeepsafe.taptargetview:taptargetview:1.12.0"){ + exclude group: 'com.android.support' + } + implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1' + implementation ("com.github.HITGIF:TextFieldBoxes:1.4.5"){ + exclude group: 'com.android.support' + } + implementation('com.github.scribejava:scribejava-apis:7.1.1'){ + exclude group: "com.fasterxml.jackson.core" + } + implementation 'com.jaredrummler:colorpicker:1.1.0' + + //freehuaweiImplementation 'com.huawei.hms:iap:5.0.2.300' +} diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 9dfe4f46d1..313fa6b917 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -304,9 +304,6 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven } mapActions = new MapActivityActions(this); mapLayers = new MapActivityLayers(this); - if (mapViewTrackingUtilities == null) { - mapViewTrackingUtilities = new MapViewTrackingUtilities(app); - } dashboardOnMap.createDashboardView(); checkAppInitialization(); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index b8d4ef0c92..441600bde2 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -819,7 +819,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { } } }); - mapInfoLayer.registerSideWidget(recordControl, new AudioVideoNotesWidgetState(app), "audionotes", false, 32); + mapInfoLayer.registerSideWidget(recordControl, new AudioVideoNotesWidgetState(app, AV_DEFAULT_ACTION), "audionotes", false, 32); mapInfoLayer.recreateControls(); } } @@ -2153,20 +2153,23 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { return DashAudioVideoNotesFragment.FRAGMENT_DATA; } - public class AudioVideoNotesWidgetState extends WidgetState { + public static class AudioVideoNotesWidgetState extends WidgetState { + + private final CommonPreference defaultActionSetting; private static final int AV_WIDGET_STATE_ASK = R.id.av_notes_widget_state_ask; private static final int AV_WIDGET_STATE_AUDIO = R.id.av_notes_widget_state_audio; private static final int AV_WIDGET_STATE_VIDEO = R.id.av_notes_widget_state_video; private static final int AV_WIDGET_STATE_PHOTO = R.id.av_notes_widget_state_photo; - AudioVideoNotesWidgetState(OsmandApplication ctx) { + AudioVideoNotesWidgetState(OsmandApplication ctx, CommonPreference defaultActionSetting) { super(ctx); + this.defaultActionSetting = defaultActionSetting; } @Override public int getMenuTitleId() { - Integer action = AV_DEFAULT_ACTION.get(); + Integer action = defaultActionSetting.get(); switch (action) { case AV_DEFAULT_ACTION_AUDIO: return R.string.av_def_action_audio; @@ -2181,7 +2184,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public int getMenuIconId() { - Integer action = AV_DEFAULT_ACTION.get(); + Integer action = defaultActionSetting.get(); switch (action) { case AV_DEFAULT_ACTION_AUDIO: return R.drawable.ic_action_micro_dark; @@ -2196,7 +2199,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public int getMenuItemId() { - Integer action = AV_DEFAULT_ACTION.get(); + Integer action = defaultActionSetting.get(); switch (action) { case AV_DEFAULT_ACTION_AUDIO: return AV_WIDGET_STATE_AUDIO; @@ -2226,19 +2229,14 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public void changeState(int stateId) { - switch (stateId) { - case AV_WIDGET_STATE_AUDIO: - AV_DEFAULT_ACTION.set(AV_DEFAULT_ACTION_AUDIO); - break; - case AV_WIDGET_STATE_VIDEO: - AV_DEFAULT_ACTION.set(AV_DEFAULT_ACTION_VIDEO); - break; - case AV_WIDGET_STATE_PHOTO: - AV_DEFAULT_ACTION.set(AV_DEFAULT_ACTION_TAKEPICTURE); - break; - default: - AV_DEFAULT_ACTION.set(AV_DEFAULT_ACTION_CHOOSE); - break; + if (stateId == AV_WIDGET_STATE_AUDIO) { + defaultActionSetting.set(AV_DEFAULT_ACTION_AUDIO); + } else if (stateId == AV_WIDGET_STATE_VIDEO) { + defaultActionSetting.set(AV_DEFAULT_ACTION_VIDEO); + } else if (stateId == AV_WIDGET_STATE_PHOTO) { + defaultActionSetting.set(AV_DEFAULT_ACTION_TAKEPICTURE); + } else { + defaultActionSetting.set(AV_DEFAULT_ACTION_CHOOSE); } } } diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java index 3635aafe89..c142ebcf5c 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java @@ -221,18 +221,13 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL @Override public void onClick(View view) { - switch (view.getId()) { - case R.id.switch_compat: - onSwitchClick(); - break; - case R.id.left_button: - setupTerrainMode(HILLSHADE); - break; - case R.id.right_button: - setupTerrainMode(SLOPE); - break; - default: - break; + int id = view.getId(); + if (id == R.id.switch_compat) { + onSwitchClick(); + } else if (id == R.id.left_button) { + setupTerrainMode(HILLSHADE); + } else if (id == R.id.right_button) { + setupTerrainMode(SLOPE); } } diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java index 260f30fa50..475e7879aa 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java @@ -191,13 +191,13 @@ public class OsmandMapTileView implements IMapDownloaderCallback { private boolean wasZoomInMultiTouch; private float elevationAngle; - public OsmandMapTileView(MapActivity activity, int w, int h) { + public OsmandMapTileView(Activity activity, int w, int h) { this.activity = activity; init(activity, w, h); } // ///////////////////////////// INITIALIZING UI PART /////////////////////////////////// - public void init(final MapActivity ctx, int w, int h) { + public void init(final Activity ctx, int w, int h) { application = (OsmandApplication) ctx.getApplicationContext(); settings = application.getSettings(); @@ -256,7 +256,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { if (isZoomingAllowed(getZoom(), -1.1f)) { getAnimatedDraggingThread().startZooming(getZoom() - 1, currentViewport.getZoomFloatPart(), false); if (wasMapLinkedBeforeGesture) { - ctx.getMapViewTrackingUtilities().setMapLinkedToLocation(true); + application.getMapViewTrackingUtilities().setMapLinkedToLocation(true); } } } @@ -1318,7 +1318,9 @@ public class OsmandMapTileView implements IMapDownloaderCallback { angle = 90f; } this.elevationAngle = angle; - ((MapActivity) activity).setMapElevation(angle); + if (activity instanceof MapActivity) { + ((MapActivity) activity).setMapElevation(angle); + } } private boolean isZoomingAllowed(int baseZoom, float dz) { @@ -1341,7 +1343,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { @Override public boolean onDown(MotionEvent e) { // Facilitates better map re-linking for two finger tap zoom out - wasMapLinkedBeforeGesture = ((MapActivity) activity).getMapViewTrackingUtilities().isMapLinkedToLocation(); + wasMapLinkedBeforeGesture = application.getMapViewTrackingUtilities().isMapLinkedToLocation(); return false; } From 3c05128fd8556b92a11c0898ad495302f736cd80 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 20 Nov 2020 12:14:32 +0000 Subject: [PATCH 149/198] Translated using Weblate (German) Currently translated at 99.9% (3563 of 3564 strings) --- OsmAnd/res/values-de/strings.xml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 00fc2b7047..6c002cae3e 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -3928,13 +3928,13 @@ Zwei-Phasen-Routenberechnung für die Autonavigation. Native ÖPNV Entwicklung Wechseln zu Java (sicher) Berechnung des ÖPNV-Routings - Abmeldung erfolgreich + Abgemeldet Datei wurde bereits in OsmAnd importiert Anmelden über OAuth OpenStreetMap OAuth-Token löschen Was ist neu Für das Schneemobilfahren mit speziellen Straßen und Tracks. - Durchführen eines OAuth-Logins zur Nutzung der osmedit-Funktionen + Anmelden mit OAuth zur Nutzung der osmedit-Funktionen 2-Phasen-A*-Routing-Algorithmus verwenden %1$s Daten sind nur auf den Straßen verfügbar, Sie müssen eine Route mit \"Route zwischen Punkten\" berechnen, um sie zu erhalten. %1$s — %2$s @@ -3957,15 +3957,15 @@ OsmAnd Live Abonnement ist abgelaufen OsmAnd Live Abonnement wurde ausgesetzt OsmAnd Live Abonnement liegt auf Eis - Anmeldung bei OpenStreetMap - Anmeldung bei OpenStreetMap.org + Anmeldung für OpenStreetMap + Anmeldung für OpenStreetMap.org Anmelden mit OpenStreetMap - Sie müssen sich anmelden, um Änderungen hochzuladen. + Melden Sie sich an, um Änderungen hochzuladen, \n -\nSie können sich mit der sicheren OAuth-Methode anmelden oder Ihren Benutzernamen und Ihr Passwort verwenden. - Benutzername und Passwort verwenden +\nentweder mit OAuth oder mit Ihrem Benutzernamen und Passwort. + Anmelden mit Benutzername und Passwort Konto - Login + Benutzername Historie der Marker GPX-Datei an OpenStreetMap senden Geben Sie durch Komma getrennte Tags ein. @@ -3975,14 +3975,26 @@ \"Verfolgbar\" bedeutet, dass die Spur nicht in öffentlichen Auflistungen auftaucht, aber verarbeitete Trackpunkte mit Zeitstempeln davon (die nicht direkt mit Ihnen in Verbindung gebracht werden können) durch Downloads von der öffentlichen GPS API. OSM Notiz schließen OSM Notiz kommentieren - Sie können sich mit der sicheren OAuth-Methode anmelden oder Ihren Benutzernamen und Passwort verwenden. + Melden Sie sich mit der sicheren OAuth-Methode an oder verwenden Sie Ihren Benutzernamen und Ihr Passwort. Foto hinzufügen Registrieren bei \nOpenPlaceReviews.org - Fotos werden vom offenen Datenprojekt OpenPlaceReviews.org zur Verfügung gestellt. Um Ihre Fotos hochladen zu können, müssen Sie sich auf der Website anmelden. + Melden Sie sich auf der Open Data Website OpenPlaceReviews.org an, um noch mehr Fotos hochzuladen. Neues Konto erstellen Ich habe bereits ein Konto Suchverlauf Kajak Motorboot + Zu Mapillary hinzufügen + Zu OpenPlaceReviews hinzufügen + OsmAnd zeigt Fotos aus verschiedenen Quellen: +\nOpenPlaceReviews - POI Fotos; +\nMapillary - Bilder auf Straßenebene; +\nWeb / Wikimedia - POI Fotos, die in OpenStreetMap Daten angegeben sind. + Quellen + Ungefähre Dateigröße + Wählen Sie die Daten aus, die in die Datei exportiert werden sollen. + Benötigt für Import + Ihr Gerät hat nur %1$s Speicherplatz frei. Bitte machen Sie etwas Platz frei oder heben Sie die Auswahl einiger zu exportierender Objekte auf. + Es gibt nicht genug Speicherplatz \ No newline at end of file From 19cc64e8232f41ec42ccd517110fa5b4c91fe3c8 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Fri, 20 Nov 2020 15:31:03 +0000 Subject: [PATCH 150/198] Translated using Weblate (Basque) Currently translated at 99.9% (3562 of 3564 strings) --- OsmAnd/res/values-eu/strings.xml | 498 +++++++++++++++++++++---------- 1 file changed, 342 insertions(+), 156 deletions(-) diff --git a/OsmAnd/res/values-eu/strings.xml b/OsmAnd/res/values-eu/strings.xml index c619c2fc46..42a06769a4 100644 --- a/OsmAnd/res/values-eu/strings.xml +++ b/OsmAnd/res/values-eu/strings.xml @@ -1,15 +1,15 @@ - Deskargatutako zoomak: %1$s - Iraungitze epea (minutuak): %1$s + Deskargatutako zoom mailak: %1$s + Iraungitze denbora (minutuak): %1$s Deskargagarria: %1$s Zoom maximoa: %1$s Zoom minimoa: %1$s Tesela datuak: %1$s %1$s tesela iturburua gorde da - Mercator eliptikoa + Mercator eliptikoa proiekzioa Gehieneko zoom-a - Iraungitze epea (minutuak) + Iraungitze denbora (minutuak) Gutxieneko zoom-a URL Aukeratu badagoena… @@ -21,12 +21,12 @@ EEBB Kanada Europa, Asia, Hego Amerika eta antzekoak - Erresuma Batua, India edo antzekoa + Erresuma Batua, India eta antzekoak Iragarri… - Ezarri iragarpenak: Kaleen izenak, trafiko abisuak (geldialdi behartuak, abiadura mugak), radarren iragarpena. + Ezarri iragarpenak: Kaleen izenak, trafiko abisuak (geldialdi behartuak, abiadura murriztaileak), Abiadura-kameren iragarpena, eta abiadura mugak. Kaleen izenak (TTS) Abiadura muga - Radarrak + Abiadura-kamerak Trafiko abisuak Zehaztu OSM erabiltzailea eta pasahitza \'Ezarpenak\' atalean Garbitu erdibideko puntuak @@ -228,7 +228,7 @@ Turistentzako Gasolina Erakutsi alarmak… - Ezarri trafiko abisuak (abiadura mugak, geldialdi behartuak, abiadura aldaketak, tunelak), abiadura-radar abisuak eta erraien informazioa. + Ezarri trafiko abisuak (abiadura mugak, geldialdi behartuak, abiadura aldaketak, tunelak), abiadura-kameren abisuak eta erraien informazioa. Erabili iparrorratza bestelako norabiderik antzematen ez denean. Erabili iparrorratza Autobiderik ez @@ -238,27 +238,27 @@ Atxikitu errepidera OsmAnd Maps & Nabigazioa Mapa ikusle eta nabigatzaile mugikor globala lineaz kanpoko eta sare bidezko OSM mapetarako - OsmAnd (OSM Automated Navigation Directions) -\n -\nOsmAnd kode irekiko software bidezko nabigaziorako aplikazioa da, OpenStreetMapeko (OSM) mota askotako munduko mapetara sarbidearekin. Mapa guztiak (bektore edo tesela mapak) telefonoaren memoria txartelean gorde daitezke, lineaz kanpoko erabilpena bermatzeko. OsmAndek ere lineaz kanpoko eta sareko ibilbide-kalkulua eskaintzen du, txandakako ahots gidaritzarekin. -\n -\nEzaugarri nagusi batzuk: -\n- Lineaz kanpoko erabateko erabilpena (bektore edo tesela mapak gorde ondoren aukeratu daitezken karpetetan) -\n- Lineaz kanpoko mundu guztiko mapa konpaktuak eskuragarri -\n- Herrialde edo eskualdeetako mapen deskarga, aplikaziotik zuzenean -\n- Gain-geruza desberdin asko ikusi daitezke, GPX edo ibilbide bidea, interes puntuak (POI), gogokoak, sestra-kurbak, garraio publikoaren geltokiak, geruza gardeneko mapa gehigarriak. -\n- Lineaz kanpoko helbide eta lekuen bilatzailea (POI-ak) -\n- Lineaz kanpoko ibilbide-kalkulua distantzia ertainetarako -\n- Kotxea, bizikleta eta oinezkoentzat modua: -\n- Egun/gau ikuspegi automatizatua -\n- Abiaduraren araberako maparen zooma -\n- Maparen lerrokatzea, iparrorratzaren edo norabidearen araberakoa -\n- Errei gidaritza, abiadura muga bistaratzea, grabatutako edo testutik-ahotsera ahotsekin -\n -\nOsmAndeko dohaineko bertsioaren mugak -\n- Mapa kopuruak deskargatzeko muga -\n- Wikipediako POIetara lineaz kanpoko sarbiderik ez -\n + OsmAnd (OSM Automated Navigation Directions) +\n +\nOsmAnd kode irekiko software bidezko nabigaziorako aplikazioa da, OpenStreetMapeko (OSM) mota askotako munduko mapetara sarbidearekin. Mapa guztiak (bektore edo tesela mapak) telefonoaren memoria txartelean gorde daitezke, lineaz kanpoko erabilpena bermatzeko. OsmAndek ere lineaz kanpoko eta sareko ibilbide-kalkulua eskaintzen du, txandakako ahots gidaritzarekin. +\n +\nEzaugarri nagusi batzuk: +\n- Lineaz kanpoko erabateko erabilpena (bektore edo tesela mapak gorde ondoren aukeratu daitezken karpetetan) +\n- Lineaz kanpoko mundu guztiko mapa konpaktuak eskuragarri +\n- Herrialde edo eskualdeetako mapen deskarga, aplikaziotik zuzenean +\n- Gain-geruza desberdin asko ikusi daitezke, GPX edo ibilbide bidea, interesguneak, gogokoak, sestra-kurbak, garraio publikoaren geltokiak, geruza gardeneko mapa gehigarriak. +\n- Lineaz kanpoko helbide eta lekuen bilatzailea (POI-ak) +\n- Lineaz kanpoko ibilbide-kalkulua distantzia ertainetarako +\n- Kotxea, bizikleta eta oinezkoentzat modua: +\n- Egun/gau ikuspegi automatizatua +\n- Abiaduraren araberako maparen zooma +\n- Maparen lerrokatzea, iparrorratzaren edo norabidearen araberakoa +\n- Errei gidaritza, abiadura muga bistaratzea, grabatutako edo testutik-ahotsera ahotsekin +\n +\nOsmAndeko dohaineko bertsioaren mugak +\n- Mapa kopuruak deskargatzeko muga +\n- Wikipediako POIetara lineaz kanpoko sarbiderik ez +\n \nOsmAnd aktiboki garatua izaten ari da eta proiektuaren prozesuak dituen garatze, programatze eta funtzionalitate berrien probak egiteko behar den finantziazio laguntzetan ere oinarritzen da. OsmAnd+ erosiz gero, aplikazioa are zirraragarria izatea laguntzen duzu! Ezaugarri berriak finantzatzea edo dohaintza orokor bat egitea posible da osman.net-en. OsmAnd+ Mapak & Nabigazioa Lineaz Kanpoko eta Sare Bidezko OSM Mapetarako Mapa Ikusle eta Nabigatzaile Mugikor Globala @@ -283,7 +283,7 @@ \n- Aukerazko maparen lerrokatzea, iparrorratzaren edo norabidearen araberakoa \n- Aukerazko errei gidaritza, abiadura muga bistaratzea, grabaketa edo ahots bihurgailua motorra⏎ ⇥ \n - Sortu POI iragazkia + Sortu interesguneen iragazkia Garraio modua: Garraio modua: Egunsentia: %1$s ⏎\nIlunabarra: %2$s @@ -322,7 +322,7 @@ Desblokeatu Pantaila blokeatuta dago Esnatze tartea ezarri: - Radarrak + Abiadura-kamerak Trafiko abisuak Bidesaririk ez Jarraitu aurreko amaitu gabeko nabigazioaren jarraipena egiten? (%1$s segundo) @@ -378,7 +378,7 @@ Erakutsi xehetasun gehiago mapan Ibilbide datuak Formatua - POI (Point of interest) bilaketa + Interesguneen (POI) bilaketa Helbide bilaketa Koordenatuak Bilatu garraio publikoa @@ -411,7 +411,7 @@ Gehigarriak Gehigarriek ezarpen aurreratuak eta funtzionalitate berriak aktibatzen dituzte. Gehigarriak - Egin OSM ekarpenak, esaterako POI objektuak sortzea edo eraldatzea, OSM oharrak irekitzea edo komentatzea, eta sortutako GPX fitxategiak bidaltzea, aplikazioan OSM kredentzialak zehaztuta. OpenStreetMap.org elkarlanean egindako, domeinu publikoko mapa proiektu global bat da. + Egin OSM ekarpenak, esaterako interesgune objektuak sortzea edo eraldatzea, OSM oharrak irekitzea edo komentatzea, eta sortutako GPX fitxategiak bidaltzea, aplikazioan OSM kredentzialak zehaztuta. OpenStreetMap.org elkarlanean egindako, domeinu publikoko mapa proiektu global bat da. Ziurrenik bektore mapak azkarrago kargatu. Baliteke gailu batzuetan ongi ez funtzionatzea. Aukeratu ahotsa eta probatu iragarpenak erreproduzituz: OsmAnd garapena @@ -476,15 +476,15 @@ Gelditu iragarpen automatikoa Hemen nago Aldatu maparen zooma trackball-aren mugimendu horizontalaren bidez. - Trackball-a erabili zooma kontrolatzeko + Erabili trackball-a zooma kontrolatzeko Irisgarritasun hobespenak. Irisgarritasuna Aukeratutako area erakusteko ez dago memoria nahikorik Gain-azal fluoreszenteak Erabili kolore fluoreszenteak lorratzak eta ibilbideak bistaratzeko. Lineaz kanpoko edizioa - Erabili beti lineaz kanpoko edizioa. - Aplikazioaren barneko POI aldaketek ez diete deskargatutako mapa-fitxategiei eragiten, aldaketak zure gailuko fitxategi batean gordetzen dira. + Lineaz kanpoko edizioa aktibatuta badago, aldaketak lokalean gordeko dira eta eskatutakoan igoko dira, bestela aldaketak berehala igoko dira. + Aplikazioan interesguneei egindako aldaketek ez diete deskargatutako mapa-fitxategiei eragiten, aldaketak zure gailuko fitxategi batean gordetzen dira. Igotzen… {0} POI/ohar igo dira Guztia igo @@ -493,15 +493,15 @@ OSM edizio asinkronoa: OSM POI/oharrak gailuan gordeta Erakutsi eta kudeatu gailuko datu-baseko OSM POI/oharrak. - Aukeratu sare bidezko jarraipeneko tartea. - Sare bidezko jarraipen tartea + Zehaztu sare bidezko jarraipenaren tartea. + Sare bidezko jarraipenaren tartea Zehaztu web helbidea ondorengo parametroen sintaxiarekin: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}. - Sare bidezko jarraipeneko web helbidea + Sare bidezko jarraipenaren web helbidea Gorde lorratza GPX trepeta erabiliz edo \'Bidaiaren grabaketa\' ezarpenen bidez. Erakutsi uneko lorratza %1$s mapa deskargatu edo eguneratu ditzakezu. Doainezko bertsioa - Erakutsi POI-aren deskripzioa. + Erakutsi interesgunearen deskripzioa. Ipar Amerika Ipar Amerika - Estatu Batuak Amerika zentrala @@ -530,7 +530,7 @@ Aplikazioaren ezarpen globalak Zure OSM erabiltzailea Beharrezkoa openstreetmap.org-eko bidalketentzat. - Zure OSMeko pasahitza + Pasahitza Atzeko plano modua OsmAnd bigarren planoan dabil pantaila itzalia dagoen bitartean. Ez dago leku nahikorik %1$s MB deskargatzeko (%2$s libre). @@ -558,11 +558,11 @@ Simulazioa hasiarazi Ezin da fitxategia izenez aldatu. Badago izen berdineko beste fitxategi bat. - Lotutako hainbat POI kategoria aurkitu dira. + Erlazionatutako hainbat interesgune-kategoria aurkitu dira. Deskargatu lineaz kanpoko datuak interesezko puntuak bilatzeko. Izenez bilatu - \'%1$s\' POI datuen fitxategia erredundantea da eta ezabatua izan daiteke. - POI aldaketak mantentzeko fitxategi lokala ez da aurkitu eta ezin izan da sortu. + \'%1$s\' interesguneen datuen fitxategia erredundantea da eta ezabatu daiteke. + Interesguneen aldaketak mantentzeko fitxategi lokala ez da aurkitu eta ezin izan da sortu. OsmAnd+ berritu Deskargatu aplikazioaren bertsio berria mapa-fitxategi berriak erabili ahal izateko. Izenez aldatu @@ -607,14 +607,14 @@ Aktibatu Desaktibatu Deskargatu - POI datuak + Interesguneen datuak Helbide datuak Garraio publikoaren datuak Mapa datuak Desaktibatuta Ahots iragarpenak (TTS) Ahots iragarpenak (grabatua) - POI datuak + Interesguneen datuak TTS ahotsa Bilaketa Berria Mapako izenen letra-tamaina: @@ -627,12 +627,12 @@ Instalatutako Android TTS (text-to-speech) motorrak ez du aukeratutako hizkuntza jasaten, lehenetsitako TTS hizkuntza erabiliko da. Beste TTS motor bat bilatu nahi duzu merkatuan\? Falta diren datuak Deskargatu hautatutako hizkuntza? - Alderantzikatu GPXaren noranzkoa + Alderantzikatu lorratzaren noranzkoa Erabili uneko helmuga Pasatu lorratz osotik - Lineaz kanpoko bektore mapa bat dago kokapen honentzat. ⏎ -⇥⏎ -⇥Erabiltzeko, aktibatu \'Menua\' -> \'Konfiguratu mapa\' -> \'Maparen Iturburua…\' -> \'Lineaz kanpoko bektore mapak\'. + Lineaz kanpoko bektore mapa bat dago kokapen honentzat. +\n +\nErabiltzeko, aktibatu \'Menua\' -> \'Konfiguratu mapa\' -> \'Maparen Iturburua…\' -> \'Lineaz kanpoko bektore mapak\'. Ahots gidaritzaren irteera Hautatu ahots gidaritzarako bozgorailua. Ahots deiaren audioa (Kotxearen BlueTooth musika ekipoa eteteko) @@ -703,7 +703,7 @@ Garraioa Helbidea indexatzen… Mapa indexatzen… - POI indexatzen… + Interesguneak indexatzen… Garraioa indexatzen… I/O errorea km @@ -756,8 +756,8 @@ Ezin izan da marrazlea kargatu. Bektore marrazlea Aukeratu marrazketaren itxura - Erakutsi POI-aren webgunea - Erakutsi POI-aren telefonoa + Erakutsi interesgunearen webgunea + Erakutsi interesgunearen telefonoa idatzi iragazteko Erresoluzio handiko bistaratzea Ez luzatu (eta lausotu) mapa teselak erresoluzio handiko bistaratzetan. @@ -774,7 +774,7 @@ Aldatu POI-a Ezabatu POI-a Ipar-orratzaren norabidean - Mugimenduaren noranzkoan + Mugimenduaren norabidea Biraketa gabe (iparra beti gorantza) Maparen lerrokatzea: Maparen orientazioa @@ -787,19 +787,19 @@ Ezin izan da GPX kargatu. Bidali informea Ezin izan da deskargatutako maparik aurkitu memoria txartelean. - Idatzi POI bat bilatzeko + Idatzi interesgune bat bilatzeko Edozein Eskerrik asko Yandex trafikoari buruzko informazioagatik. Yandex trafikoa Ibilbidea Gogokoak OSM oharrak (sarean) - POI gainazala… + Interesguneen gainazala… Maparen iturburua… Mapa geruzak Bilatu POI-a Erabili trackball gailu bat mapa mugitzeko. - Trackball-a erabili + Erabili trackball-a Ezarri onartutako gehieneko itxarote denbora kokapenaren irakurketa bakoitzarentzat. Kokapen irakurketarako gehieneko itxarote denbora Non nago? @@ -865,12 +865,12 @@ Garraioa ADOS Erakutsi garraio publikoaren geltokiak mapan. - Erakutsi garraioaren geltokiak + Erakutsi garraio geltokiak OsmAnd nabigazio aplikazioa - POI datuak eguneratuta ({0} kargatu dira) - Ezin izan da POI zerrenda lokala eguneratu. + Interesguneen datuak eguneratuta ({0} kargatu dira) + Ezin izan da interesguneen zerrenda lokala eguneratu. Ezin izan dira datuak zerbitzaritik kargatu. - Ez dago lineaz kanpoko POI daturik area honentzat + Ez dago lineaz kanpoko interesguneen daturik area honentzat Zooma hurbiltzeak POI-ak eguneratzea ahalbidetzen dizu Eguneratu POI-a Eguneratu datu lokalak Internet bidez? @@ -947,8 +947,8 @@ Ezarpenak Gorde uneko lorratza GPX fitxategi gisa orain. Gorde uneko lorratza - Erregistroen tartea nabigazioan - Zehaztu erregistratze maiztasuna nabigazio bitarteko lorratz grabaketarako + Erregistro- tartea nabigazioan zehar + Zehaztu erregistro-tartea nabigazio bitarteko lorratz grabaketarako GPX lorratza automatikoki gordeko da lorratzen direktorioan nabigazioan zehar. Mapa eguneratu Tesela birkargatu @@ -965,8 +965,8 @@ Erakutsi ikuspegiaren norabidea Gaitu maparen 3D ikuspegia. 3D Mapa Ikuspegia - Erakutsi erabilitako azken POI-a gain-azala. - Erakutsi POI gainazala + Erakutsi erabilitako azken interesguneen gainazala. + Erakutsi interesguneen gainazala Aukeratu sareko edo cacheko mapa teselen iturburua. Tesela maparen iturburua Maparen iturburua @@ -1005,7 +1005,7 @@ Eraikina Bidegurutzatzen den kalea Mapa eguneratu - Sortu POI bat + Sortu interesgune bat Bai Utzi Aplikatu @@ -1024,7 +1024,7 @@ Iruzkina gehituta Ezin izan da iruzkina gehitu. Editatu POI-a - Sortu POI bat + Sortu interesgune bat Ezin da nodoa aurkitu, edo zerbitzua hainbat nodoz osatuta dago, eta ez dago horretarako euskarririk oraindik. {0} ezabatu (iruzkina)? Ezabatu POI-a @@ -1038,7 +1038,7 @@ Nodoari buruzko informazioa ez da kargatu Ireki Iruzkina utzi - POI-a aldatzea + Interesgunea aldatzea Beste etiketa guztiak kontserbatu dira Bidali Garbitu @@ -1176,7 +1176,7 @@ %1$s \nPuntu %1$s -Lorratza %2$s +\n%2$s lorratza Gogokoak Nire lekuak arrosa @@ -1456,7 +1456,7 @@ Lorratza %2$s Mapen biltegiratzea Kopiatu Iragazi izenez - Idatzi denetarik bilatzeko + Idatzi bilatzeko Ireki A-GPS informazioa Kudeatu @@ -1548,7 +1548,7 @@ Lorratza %2$s OsmAnd ibilbidearen lineaz kanpoko kalkulua Ibilbidearen kalkulu azkarrak huts egin du (%s), kalkulu motelera aldatzen. Ibilbide birkalkulatze adimentsua - Bidai luzeetan, birkalkulatu ibilbidearen hasierako partea besterik ez. + Ibilbidearen hasierako partea birkalkulatzen du soilik. Bidai luzeetan erabili daiteke. Hautatu nabigazioan saihestu nahi dituzun errepideak. Errepideak besterik ez Errepide estiloa @@ -1596,7 +1596,7 @@ Lorratza %2$s \n{3} MB behar dira une batez, {1} MB behin betiko. ({2} MB eskuragarri.) Igo zure OSM oharra era anonimoan edo zure OpenStreetMap.org profila erabiliz. Bistaratu mendiko bizikletarako bideak - POI ikonoak + Interesguneen ikonoak Grabaketaren banatzea Erabili grabaketaren banatzea Gainidatzi atalak erabilitako espazioa biltegiratze espazioa baino handiagoa bada. @@ -1605,7 +1605,7 @@ Lorratza %2$s Grabatutako atal guztiekin okupatu daitekeen espazioa. Hautatu ahots bidezko gidaritza Hautatu zure hizkuntzaren ahots bidezko gidaritza. - Zehaztu POI mota egokia edo saltatu. + Zehaztu interesgune mota egokia edo saltatu. Menu botoiak kontrol panela abiatzen du, ez menua \'Desgaituta\' dagoenean mapa abiatzen da zuzenean. Bistaratu posizioa beti erdian @@ -1626,8 +1626,8 @@ Lorratza %2$s Mundu oinarri mapa Sareko OSM mapa klasifikazioa irudiekin. - Herrialde askotan (Besteak beste Alemania, Frantzia Italia...) Radar abisuak jasotzea legez debekatuta dago. OsmAndek ez du erantzukizunik onartuko legea jarraitzen ez baduzu. Mesedez sakatu \'Bai\' soilik ezaugarri hau erabiltzeko eskubidea baduzu. - Radarra + Herrialde askotan (Besteak beste Alemania, Frantzia Italia...) abiadura-kameren abisuak jasotzea legez debekatuta dago. OsmAndek ez du erantzukizunik onartuko legea jarraitzen ez baduzu. Mesedez sakatu \'Bai\' soilik ezaugarri hau erabiltzeko eskubidea baduzu. + Abiadura-kamera Koordenatuen formatua Koordenatu geografikoen formatua. Autobus @@ -1653,7 +1653,7 @@ Lorratza %2$s Albaniera (Tosk) OSM POI-a sortuta %1$sko mapa erabili dezakezu orain. - Fitxategiaren izenak karaktere baliogaberen bat du + Fitxategi-izenak karaktere baliogaberen bat du Erakutsi %1$s mapan Bilatu %1$sra OsmAnd bidez partekatua @@ -1749,7 +1749,7 @@ Lorratza %2$s Deskargatu mapa berria Kudeatu Maparen hizkuntza - Garraioaren geltokiak + Garraio geltokiak Zonaldea Eskuragarri Eguneraketak @@ -1807,7 +1807,7 @@ Lorratza %2$s Erakutsi zoom botoiak Gorde gogokoen talde gisa Ezarri helburuak - POI gainazalaren etiketak + Interesguneen gainazalaren etiketak Serbokroaziera Navajoa Tamilera @@ -1829,7 +1829,7 @@ Lorratza %2$s Erradioa Erregistro tarte orokorra Kokaleku orokorra GPX fitxategian erregistratzea gaitu eta desgaitu daiteke mapako GPX erregistro trepetarekin. - Erregistroaren tartea + Erregistro-tartea Gaitu HTTP proxya Konfiguratu HTTP proxya sare eskaera guztietarako. Proxy ostalaria @@ -1867,7 +1867,7 @@ Lorratza %2$s Eguneratu Erabili menua Maparen legenda - Ziur POI puntua mota gabe gorde nahi duzula? + Ziur interesgunea mota gabe gorde nahi duzula\? Eraldatu OSM aldaketa Bertsioak Artikulu teknikoak @@ -1937,14 +1937,14 @@ mapak eta nabigazioa Itxiera ordua Kontaktu informazioa Gehitu irekiera orduak - POI mota + Interesgune mota Paneleko errenkada kopurua %1$s - Zehaztu POI mota mesedez. + Zehaztu interesgune mota mesedez. Lanegunak Azken tokiak Gogokoak Orain hemen gordeta: %1$s - Aldaketak igotzen dituzunean POI-a ezabatuko da + Aldaketak igotzen dituzunean interesgunea ezabatuko da Lerro kopurua Ziur zaude? Gorde gabeko aldaketak galduko dira, Jarraitu? @@ -2015,7 +2015,7 @@ mapak eta nabigazioa Mapak deskargatzeko beharrezkoa da. Kokalekua bilatzen… Espazio librea - OsmAnd datuen biltegiratzea (mapak, GPX fitxategiak, eta abar): %1$s. + OsmAnd datuen biltegiratzea (mapak, lorratz fitxategiak, eta abar): %1$s. Eman baimena Eman kokapena atzitzeko baimena Jaso jarraibideak eta aurkitu toki berriak Internet konexiorik gabe @@ -2044,18 +2044,18 @@ mapak eta nabigazioa Azpikategoriak Transliteratu %1$s izena falta bada Transliteratu izenak - Idatzi hiria, helbidea, POI izena + Idatzi hiria, helbidea, interesgunearen izena Marroi argia Marroi iluna Ingerada marren kolore eskema Errepidearen gainazalaren integritatea Ingerada marren kolore eskema - Gutxieneko abiadura erregistratzeko + Erregistratzeko abiadura minimoa Iragazkia: Ez erregistratu puntuak abiadura honen azpitik. Erregistratzeko desplazamendu minimoa Iragazkia: Ezarri puntu berri bat erregistratzeko gutxieneko distantzia. - Erregistratzearen gutxieneko zehaztasuna - Iragazkia: Ez erregistratu zehaztasun hau ez badago. + Erregistratzeko zehaztasun minimoa + Iragazkia: Ez erregistratu zehaztasun hau lortu arte. Eguberriko POI Eguberria eta urte berria datozela, zerikusia duten puntuak bistaratzea erabaki dezakezu, eguberri zuhaitzak, merkatuak, eta abar. Erakutsi eguberriko puntuak\? @@ -2069,10 +2069,10 @@ mapak eta nabigazioa Bistaratu bidaiaren grabaketa ahalbidetzen duen jakinarazpen bat. Jakinarazpenak Hartu %1$d. irteera eta jarraitu - Igo POI bat + Igo interesgune bat Ibilbidearen kalkulua - Ez duzu GPX fitxategirik oraindik - GPX fitxategiak karpetara gehitu ditzakezu ere + Ez duzu lorratz fitxategirik oraindik + Lorratz fitxategiak karpetara gehitu ditzakezu ere Gehitu gehiago… Itxura Ongi @@ -2130,7 +2130,7 @@ Area honi dagokio: %1$s x %2$s Pantailaren erdian bideo-ohar bat gehitzeko botoia. Pantailaren erdian argazki-ohar bat gehitzeko botoia. Pantailaren erdian OSM ohar bat gehitzeko botoia. - Pantailaren erdian POI bat gehitzeko botoia. + Pantailaren erdian interesgune bat gehitzeko botoia. Nabigazioan ahots bidezko jarraibideak gaitu edo desgaitzeko botoia. Pantailaren erdian aparkaleku bat gehitzeko botoia. " hona gorde da: " @@ -2149,8 +2149,8 @@ Area honi dagokio: %1$s x %2$s Mezua Gogokoa gordetzeko kategoria: Aukeratu hautazko kategoria. - POI zerrenda - Gehitu POI kategoria bat edo gehiago mapan erakusteko. + Interesguneen zerrenda + Gehitu interesguneen kategoria bat edo gehiago mapan erakusteko. Azpiko zerrendaren hurrengo orria erakusteko botoia. Gehitu mapa estilo bat Bete parametro guztiak @@ -2174,7 +2174,7 @@ Area honi dagokio: %1$s x %2$s Ekintzaren izena Bikoizketa ekiditeko ekintza azkarrari %1$s izena jarri zaio. Gogoko puntuak mapan erakutsi edo ezkutatzeko botoia. - POI puntuak mapan erakutsi edo ezkutatzeko botoia. + Interesguneak mapan erakutsi edo ezkutatzeko botoia. Laga hutsik helbidea edo lekuaren izena erabiltzeko. Automatikoki zatitu grabaketa hutsunea eta gero Hasi segmentu berria 6 minututako hutsune bat eta gero, lorratz berria bi ordu eta gero, edo fitxategi berria hutsune luzeago bat eta gero data aldatzean. @@ -2184,7 +2184,7 @@ Area honi dagokio: %1$s x %2$s Puntuak ezabatu dira. Ziur %1$d puntu ezabatu nahi dituzula\? Ibilbide honetan pasatu beharreko bide-gurutzeak - Bide-puntuak, interesezko puntuak, izena duten ezaugarriak + Bide-puntuak, interesguneak, izena duten ezaugarriak Lorratza Gehieneko abiadura Batezbesteko abiadura @@ -2257,9 +2257,9 @@ Area honi dagokio: %1$s x %2$s Berreskuratu erosketak Maparen letra-tipoak Pausatua - OsmAnd (OSM Automated Navigation Directions) mapa eta nabigazio aplikazio bat da. Doako, mundu osoko eta kalitate altuko OSM mapak eskura jartzen dizkizuna. + OsmAnd (OSM Automated Navigation Directions) mapa eta nabigazio aplikazio bat da. Doako, mundu osoko eta kalitate altuko OSM mapak eskura jartzen dizkizuna. \n -\nGozatu ahots bidezko nabigazioa edo nabigazio grafikoa, ikusi interesezko puntuak (POI), sortu eta kudeatu GPX lorratzak, erabili sestra-kurbak eta garaiera datuak (gehigarri baten bidez), aukeratu kotxe, bizikleta eta oinezko moduen artean, editatu OSM, eta askoz gehiago. +\nGozatu ahots bidezko nabigazioa edo nabigazio grafikoa, ikusi interesguneak (POI), sortu eta kudeatu GPX lorratzak, erabili sestra-kurbak eta garaiera datuak (gehigarri baten bidez), aukeratu kotxe, bizikleta eta oinezko moduen artean, editatu OSM, eta askoz gehiago. Idatzi helbidea GPS nabigazioa \n• Lineaz kanpo (Ibiltaritza kargurik ez atzerrian zaudenean) edo konektatuta (azkarragoa) aritzea erabaki dezakezu @@ -2335,7 +2335,7 @@ Area honi dagokio: %1$s x %2$s Piztu \'Nire posizioa\'-ren mugimendu animatua nabigazioan. %1$s barne "Eskiatu -\nOsmAnd eski-mapak gehigarriak eskiatzeko ibilbideak ikustea baimentzen dizu, konplexutasun mailarekin eta bestelako informazio gehigarriarekin, arrasteak eta bestelako zerbitzuak." +\nOsmAnd eski-mapak gehigarriak eskiatzeko pistak ikustea baimentzen dizu, konplexutasun mailarekin eta bestelako informazio gehigarriarekin, arrasteak eta bestelako zerbitzuak."
Hartu parte OSMn \n• Eman datuen arazoen berri \n• Igo GPX lorratzak OSMra aplikaziotik bertatik @@ -2362,14 +2362,15 @@ Area honi dagokio: %1$s x %2$s Gora/Behera Denbora mugimenduan Max/Min - Mapa -\n• Bistaratu inguruko interesezko puntuak (POI) -\n• Egokitu mapa zure mugimenduaren (edo iparrorratzaren) norabidera -\n• Non zauden eta nora begiratzen duzun erakusten du -\n• Partekatu zure kokalekua lagunek zu aurkitu ahal izateko -\n• Gorde zuretzat garrantzitsuak diren tokiak gogokoetan -\n• Mapan izenak nola bistaratu aukeratzen uzten dizu: zure hizkuntzan, tokiko hizkuntzan, edo ahoskera fonetikoa -\n• Interneteko tesela mapak erakusten ditu, satelite ikuspegia (Bingek eskainia), hainbat gainazal, esaterako turismorako edo nabigaziorako GPX lorratzak eta azal gehigarriak gardentasun aldagarriarekin + Mapa +\n• Bistaratu inguruko interesguneak (POI) +\n• Egokitu mapa zure mugimenduaren (edo iparrorratzaren) norabidera +\n• Non zauden eta nora begiratzen duzun erakusten du +\n• Partekatu zure kokalekua lagunek zu aurkitu ahal izateko +\n• Gorde zuretzat garrantzitsuak diren tokiak gogokoetan +\n• Mapan izenak nola bistaratu aukeratzen uzten dizu: zure hizkuntzan, tokiko hizkuntzan, edo ahoskera fonetikoa +\n• Interneteko tesela mapak erakusten ditu, satelite ikuspegia (Bingek eskainia), hainbat gainazal, esaterako turismorako edo nabigaziorako GPX lorratzak eta azal gehigarriak gardentasun aldagarriarekin +\n Bizikleta \n• Bizikletentzako bideak aurki ditzakezu mapan \n• Bizikletarako GPS nabigazioak ibilbideak bizikletentzako bideak erabiliz eraikiko du @@ -2452,14 +2453,14 @@ Area honi dagokio: %1$s x %2$s Erakutsi \'nabigazioa amaituta\' elkarrizketa-koadroa Hasi/amaitu nabigazioa Nabigazioa hasi edo amaitzeko botoia. - Lineako jarraipenaren denbora-bufferra + Sare bidezko jarraipenaren denbora-bufferra Zehaztu bidaltzeke dauden kokalekuak gordetzeko denbora-buffer bat Mapillary-ko argazkiak linean besterik ez daude eskuragarri. Saiatu berriro Neurtu distantzia Arakatu mapa eta gehitu puntuak Gehitu puntu bat gutxienez. - GPX fitxategiaren izena: + GPX fitxategi-izena: Erakutsi mapan gorde eta gero Gehitu bide-puntua Gorde GPX bide-puntua @@ -2481,7 +2482,7 @@ Area honi dagokio: %1$s x %2$s
Desgaitu maparen animazioak. Jarraitu mapan erakusten Irten gorde gabe? - Gorde puntuak puntu ala lerro gisa. + Gorde puntuak bide-puntu ala lerro gisa. OsmAndek puntuak hautatutako profilaren ibilbideekin lotuko ditu. Hautatu nabigazio profila Gehitu ibilbide-puntuak @@ -2622,16 +2623,16 @@ Area honi dagokio: %1$s x %2$s
Negua eta eskia Bidaiatze ikuspegia Nautikoa - POI etiketak + Interesguneen etiketak Bihar irekiko du ordu honetan - Kopiatu kokaleku edo POI-aren izena + Kopiatu kokaleku edo interesgunearen izena Izen gabeko kokalekua Unekoa Tarteko geldialdia gehitzen du Lehen geldialdia gehitzen du Mugitu helburua gora, eta sortu Erakutsi itxitako oharrak - Erakutsi/ezkutatu OSM oharrak mapan. + Erakutsi edo ezkutatu OSM oharrak mapan. GPX - JOSM edo bestelako OSM editoreentzat esportatzeko egokia. OSC - OSM-ra esportatzeko egokia. GPX fitxategia @@ -2751,7 +2752,7 @@ Area honi dagokio: %1$s x %2$s
Gogokoa Eskuratu OsmAnd Live ezaugarri guztiak desblokeatzeko: Mapen eguneraketak egunero deskarga mugarik gabe, ordainpeko eta doako gehigarri guztiak, Wikipedia, Wikivoyage eta askoz gehiago. Lehenetsitako itxuraren aldaera, oinezko eta bizikleten bideen kontrastea handitzeko. Mapnik kolore zaharrak erabiltzen ditu. - Errepidetik kanpo gidatzeko, \'Topo\' estiloan oinarritua atzealdean sateliteko irudiekin erabiltzeko. Errepide nagusien zabalera estutua, eta bide, bidexka eta bidegorrien zabalera handitua. + Errepidetik kanpo gidatzeko, \'Topo\' estiloan oinarritua atzealdean sateliteko irudiekin erabiltzeko. Errepide nagusien zabalera estutua, eta pista, bidexka eta bidegorrien zabalera handitua. Nabigazio nautikorako. Ezaugarri nagusiak: Boiak, faroak, ibai bideak, itxas erreiak eta markak, portuak, itsas zerbitzuak, sakonera marrak. Eskiatzeko. Ezaugarri nagusiak: Pistak, arrasteak eta abar. Bestelako mapako objektuak leuntzen dira. Gidatzeko estilo sinplea. Begietara xamurra gau moduan, sestra-kurbak, kontraste handiko errepide laranjak, bestelako mapako objektuak leunduak. @@ -2898,7 +2899,7 @@ Area honi dagokio: %1$s x %2$s
Aldatu Erakutsi gehiago Bistaratutako lorratzak - Erakutsi/ezkutatu GPX lorratzak + Erakutsi/ezkutatu lorratzak Gehitu tarteko puntua %1$d transferentzia Gehitu irteera eta helburua @@ -2936,8 +2937,8 @@ Area honi dagokio: %1$s x %2$s Eskailera Bidea Zehaztu gabea - Ezkutatu GPS lorratzak - Erakutsi GPS lorratzak + Ezkutatu lorratzak + Erakutsi lorratzak Gehitu helburua aurretik Aurreko ibilbidea Graduak @@ -2952,7 +2953,7 @@ Area honi dagokio: %1$s x %2$s Trinkotua Zaldi-bidea Bizikletentzako bidea - Hautatutako GPX lorratzak mapan erakutsi edo ezkutatzeko botoia. + Hautatutako lorratzak mapan erakutsi edo ezkutatzeko botoia. Tranbiarik ez Ekidin tranbiak Autobusik ez @@ -3234,7 +3235,7 @@ Area honi dagokio: %1$s x %2$s Mapa nabigazioan zehar Mapa nabigazioan zehar Beste bat - Pisua, altuera, abiadura + Pisua, altuera, luzera, abiadura Ibilgailuaren parametroak Ahots iragarpenak nabigazioan zehar egiten dira soilik. Nabigazio argibideak eta iragarpenak @@ -3310,7 +3311,7 @@ Area honi dagokio: %1$s x %2$s %1$s GB %1$s MB %1$s KB - Lorratzek gordetzeko karpeta + Lorratzak gordetzeko karpeta Lorratzak \'rec\' karpetan edo hilabeteko zein eguneko karpetatan gorde daitezke. Grabatu lorratzak \'rec\' karpetan Grabatu lorratzak eguneko karpetetan @@ -3420,12 +3421,12 @@ Area honi dagokio: %1$s x %2$s Hautatu ikonoa, kolorea eta izena Kokalekua partekatzeko aukera bidai grabaketa erabiliz. Lineako jarraipena - Egunkariaren zehaztasuna + Erregistroaren zehaztasuna Egiaztatu eta partekatu aplikazioaren erregistro zehatzak Baimena beharrezkoa da aukera hau erabiltzeko. - Hau abiadura txikiko atalase iragazkia da, abiadura jakin baten azpitik puntuak ez erregistratzeko. Grabatutako ibilbideak leunagoak izan daitezke mapan ikusitakoan. - Albo-efektua: Zure ibilbidean gutxieneko abiadura irizpidea betetzen ez duten zati guztiak faltako zaizkizu (adibidez, bizikletaz aldapa bat igotzen duzunean). Gainera, ez da atsedenaldi-epeei buruzko informaziorik egongo,. Horrek edozein azterketeta edo post-prozesuri eragingo dio, adibidez, bidaiaren guztizko iraupena, denbora martxan, edo batez besteko abiadura zehazten saiatzean. - Gomendioa: Saiatu lehenbizi mugimenduaren detekzioa erregistroko gutxieneko desplazamendu iragazkiaren bidez (B), emaitza hobeak sor ditzake eta datu gutxiago galduko dituzu. Zure ibilbideak abiadura baxuan zaratatsuak badira, saiatu zeroz kanpoko balioak hemen. Kontuan izan behar da neurketa batzuek ez dutela abiadura balioa emango (sarean oinarritutako metodo batzuk), kasu horretan ez zenuke ezer grabatuko. + Hau abiadura txikiko atalase iragazkia da, abiadura jakin baten azpitik puntuak ez erregistratzeko. Grabatutako lorratzak leunagoak izan daitezke mapan ikusitakoan. + Albo-efektua: Zure lorratzak gutxieneko abiadura irizpidea betetzen ez duten zati guztiak faltako zaizkizu (adibidez, bizikletaz aldapa bat igotzen duzunean). Gainera, ez da atsedenaldi-epeei buruzko informaziorik egongo,. Horrek edozein azterketeta edo post-prozesuri eragingo dio, adibidez, bidaiaren guztizko iraupena, denbora martxan, edo batez besteko abiadura zehazten saiatzean. + Gomendioa: Saiatu lehenbizi mugimenduaren detekzioa erregistroko gutxieneko desplazamendu iragazkiaren bidez (B), emaitza hobeak sor ditzake eta datu gutxiago galduko dituzu. Zure lorratzak abiadura baxuan zaratatsuak badira, saiatu zeroz kanpoko balioak hemen. Kontuan izan behar da neurketa batzuek ez dutela abiadura balioa emango (sarean oinarritutako metodo batzuk), kasu horretan ez zenuke ezer grabatuko. Oharra: abiadura> 0 egiaztatzea: GPS txip gehienek algoritmoak mugimenduan zaudela zehazten duenean bakarrik adierazten dute abiaduraren balioa, eta deus ez bestela. Hori dela eta, iragazki honetan > 0 ezarpena erabiltzean GPS txiparen mugimendua detekzioa erabiltzen duzula esan daiteke. Baina grabaketa garaian hemen iragazi ez bada ere, funtzio hau erabiltzen dugu gure GPX azterketan zuzendutako distantzia zehazteko, hau da, eremu horretan erakutsitako balioa mugimenduan grabatutako distantzia da. Honek gutxieneko zehaztasun adierazlearekin neurtutako puntuak soilik erregistratuko ditu (metro edo oinetan, Android-ek zure txiperako jakinarazi duen moduan). Zehaztasuna neurketa eta egiazko posizioaren arteko hurbiltasuna da, ez dago prezisioarekin lotua, hori errepikatutako neurketen sakabanaketa da. Albo-efektua: Zehaztasunaren arabera iragaztearen ondorioz, puntuak falta daitezke, adibidez, zubien azpian, zuhaitzen azpian, eraikin altuen artean, edo eguraldi jakin batzuekin. @@ -3458,9 +3459,9 @@ Area honi dagokio: %1$s x %2$s \n \n• Beste profil bateko ezarpenak kopiatzeko aukera gehitu da \n -\n• Ordena aldatzeko edo POI kategoriak ezkutatzeko aukera gehitu da +\n• Ordena aldatzeko edo interesgune kategoriak ezkutatzeko aukera gehitu da \n -\n• POI ikonoak mapan behar bezala lerrokatuta +\n• Interesgune ikonoak mapan behar bezala lerrokatuta \n \n• Ilunabarra / egunsentia datuak gehitu da maparen konfigurazioan \n @@ -3509,15 +3510,15 @@ Area honi dagokio: %1$s x %2$s Ibilbidearen birkalkulua Iragarri Erabiltzaile-izena eta pasahitza - Ezarpen hauek profil guztiei aplikatzen zaizkie. + Ezarpen hauek orokorrak dira, eta profil guztiei aplikatzen zaizkie. OSM edizioa - Ikusi zure aldaketak edo oraindik igo gabeko OSM akatsak hemen: %1$s. Igotako puntuak ez dira gehiago erakutsiko. + Oraindik igo gabeko aldaketak edo OSM akatsak hemen ikusi ditzakezu: %1$s. Igotako puntuak ez dira OsmAnd-en erakutsiko. OSM Nabigatu edo mugitzean erakutsitako ikonoa. Atsedenean erakutsitako ikonoa. Ezin izan da \'%s\' geo intent-a errendatu. Oharra: Grabatzen hasi aurretik GPSa itzalita egon bada, neurtutako lehen puntuak zehaztasun txikia izan dezake. Gure kodean puntu bat grabatu aurretik segundo bat itxaron genezake (edo jarraian grabatutako hirutik onena hartu, etab.), baina oraindik ez da hau garatu. - Iragazki honek puntu bikoiztuak grabatzea saihesten du mugimendu txikiegia egon bada. Gero prozesatu ez diren ibilbideetan itxura hobe bat lortzen da. + Iragazki honek puntu bikoiztuak grabatzea saihesten du mugimendu txikiegia egon bada. Gero prozesatu ez diren lorratzetan itxura hobe bat lortzen da. Albo ondorioak: Atseden aldiak ez dira batere erregistratzen edo puntu bakarrarekin erregistratzen dira. Mugimendu txikiak (adibidez, albo batera) iragazi daitezke. Zure fitxategiak informazio gutxiago dauka post-prozesatzeko eta estatistika txarragoakk ditu erregistratzeko garaian puntu erredundanteak iragazi dituelako, agian harrera txarra edo GPS txiparen efektuak eragindako akatsak mantentzen dituen bitartean. Gomendioa: 5 metroko ezarpenak ondo funtziona dezake zuretzat, hori baino gehiagoko xehetasuna behar ez baduzu, eta ez badituzu esplizituki jaso nahi atseden aldiko datuak. Denbora-bufferra @@ -3536,7 +3537,7 @@ Area honi dagokio: %1$s x %2$s Ordenatu kategoriaren arabera Antartika Prestatzen - POI motak + Interesgune motak Ez da ezer hautatu Ekintza azkarrak Profilak @@ -3578,7 +3579,7 @@ Area honi dagokio: %1$s x %2$s Mapako terreno geruza erakutsi edo ezkutatzeko botoia. Erakutsi terrenoa Ezkutatu terrenoa - Erakutsi / ezkutatu terrenoa + Erakutsi edo ezkutatu terrenoa Maldak Erliebea Gaitu erliebea edo malda mapa ikusteko. Mapa mota hauei buruz gehiago irakur dezakezu gure gunean @@ -3611,9 +3612,9 @@ Area honi dagokio: %1$s x %2$s Kolore pertsonalizatua Mapa gehigarriak onartu gabeko ekintza %1$s - Sortu / aldatu POIa + Sortu edo aldatu interesgunea Aparkaleku-posizioak - Gehitu / aldatu gogokoa + Gehitu edo aldatu gogokoa Berrezarri lehenetsitako ordena Itzuli ediziora Ekintza botoiak hautatutako profilen artean txandakatzen du. @@ -3623,12 +3624,12 @@ Area honi dagokio: %1$s x %2$s Munduaren gainbegirada mapa (xehetsua) Onartu gabeko mota Garraio publikoa mapan erakutsi edo ezkutatzen duen botoia. - Hautatu mapan agertuko diren Wikipediako artikuluen hizkuntzak. Hizkuntza eskuragarrien artean txandakatu dezakezu artikulua irakurtzean. + Hautatu mapako Wikipediako artikuluen hizkuntzak. Hizkuntza eskuragarrien artean txandakatu dezakezu artikulua irakurtzean. Wikipediako artikulu batzuk agian ez daude zure hizkuntzan eskuragarri. Malgaxea Aragonera %1$s / %2$s - Bilatu POI motak + Bilatu interesgune motak OsmAnd + Mapillary Ekintza azkarra Erradioaren erregela @@ -3642,8 +3643,8 @@ Area honi dagokio: %1$s x %2$s Nabigazio profilak Ezkutatu garraio publikoa Erakutsi garraio publikoa - Erakutsi/ezkutatu garraio publikoa - OsmAnd Aztarnaria + Erakutsi edo ezkutatu garraio publikoa + OsmAnd aztarnaria Jarraitu Pertsonalizatu \"Tiradera\", \"Konfiguratu mapa\" eta \"Laster-menua\" ataletan dauden elementu kopurua. \n @@ -3695,7 +3696,7 @@ Area honi dagokio: %1$s x %2$s \n Harpidetza automatikoki berrituko da berritze data baino lehen bertan behera uzten ez bada. Berritze-aldian (hilabetea / hiru hilabetea / urtea) kobratuko da kontua. \n \n Zure harpidetzak kudeatu eta bertan behera utzi ditzakezu Google Play ezarpenetara joanez. - Konbinatu kategoria desberdinetako POI motak. Ukitu pizgailua guztiak hautatzeko, ukitu ezkerreko aldea kategoria aukeratzeko. + Konbinatu kategoria desberdinetako interesgune motak. Ukitu pizgailua guztiak hautatzeko, ukitu ezkerreko aldea kategoria aukeratzeko. • Lineaz kanpoko malda-mapa berriak \n \n • Gogokoen eta GPX bide-puntuen pertsonalizazio osoa - kolore, ikono, eta forma pertsonalizatuak @@ -3704,7 +3705,7 @@ Area honi dagokio: %1$s x %2$s \n \n • Wikipedia bereizitako geruza gisa \"Konfiguratu mapa\" atalean, hautatu behar diren hizkuntzak soilik \n -\n • Sortu zure POI iragazkia / mapak malgutasun osoz +\n • Sortu zure interesguneen iragazkia / mapak malgutasun osoz \n \n • Aukerak gehitu profil pertsonalizatuetarako ezarpenak leheneratzeko \n @@ -3739,7 +3740,7 @@ Area honi dagokio: %1$s x %2$s Iraungitze ordua Mercator proiekzioa Biltegiratze formatua - Ezarri zoom maila minimo eta maximoa lineaz kanpoko mapa bistaratu edo kargatzeko. + Ezarri zoom maila minimo eta maximoa sareko mapa bistaratu edo kargatzeko. Parametro hauek bistaratzeari eragingo diote maparen gainazal edo azpiazal gisa erabiltzean. \n \n%1$s: Mapa hautatutako zoom mailetara mugatuko da. @@ -3761,7 +3762,7 @@ Area honi dagokio: %1$s x %2$s Eman zure ibilgailuaren pisua, ibilgailu astunentzako zenbait ibilbide murriztu daitezke. Desgaituta. \"Mantendu pantaila piztuta\" behar da \"Esnatu ondorengo denbora-muga\" atalean. metro - Kontrolatu mapan agertzen diren xehetasun gehigarrien ikusgaitasuna + Erakutsi edo ezkutatu maparen xehetasun gehigarriak Gauerako mapa Erakutsi/ezkutatu Mapillary Ezkutatu Mapillary @@ -3775,30 +3776,28 @@ Area honi dagokio: %1$s x %2$s Gurpil-aulkia Kart Puntuen arteko ibilbidea - Gehitu arrasto batera + Gehitu lorratz batera Hautatu zabalera Hautatu zatiketa aukera: denboraren arabera edo distantziaren arabera. Norabideko geziak Sortu ibilbide berria Distantzia margena - Aukera hau erabiltzeko OsmAnd-ek zure arrastoak mapako errepideetara atxiki behar ditu. -\n -\nHurrengo urratsean, nabigazio profila hautatu beharko duzu baimendutako errepideak eta zure arrastoa errepideetara hurbiltzeko distantzia tartea atzemateko. + Ondoren, lotu zure lorratza baimendutako errepiderik hurbilenera zure nabigazio profil batekin aukera hau erabiltzeko. Editatutako azkena - Inportatu arrastoa - Ireki dagoen arrasto bat - Hautatu irekitzeko arrasto fitxategia - Gainidatzi arrastoa - Gorde arrasto berri gisa + Inportatu lorratza + Ireki dagoen lorratz bat + Hautatu irekitzeko lorratz fitxategia. + Gainidatzi lorratza + Gorde lorratz berri gisa Alderantzizko ibilbidea - Arrasto osoa birkalkulatuko da hautatutako profilaren bidez. - Bakarrik hurrengo segmentua birkalkulatuko da hautatutako profilaren bidez. - Hautatu nola konektatu puntuak, lerro zuzen batez, edo kalkulatu horien arteko ibilbidea hautatutako profilarekin. - Arrasto osoa + Lorratz osoa birkalkulatuko da hautatutako profilaren bidez. + Bakarrik hurrengo segmentua birkalkulatuko da hautatutako profila erabiliz.. + Aukeratu nola konektatu puntuak, lerro zuzen batez, edo kalkulatu horien arteko ibilbidea behean adierazitako moduan. + Lorratz osoa Hurrengo segmentua Nabigazio profila - Hautatu zein arrasto fitxategiari gehituko zaion segmentu berria. - Ezarri behar dituzu lanegunak jarraitzeko + Hautatu zein lorratz fitxategiari gehituko zaion segmentu berria. + Ezarri lanegunak jarraitzeko Gehitu argazkia Sortu kontu berria Kontu bat daukat dagoeneko @@ -3812,4 +3811,191 @@ Area honi dagokio: %1$s x %2$s Inportatzeko beharrezkoa da Zure gailuak %1$s soilik ditu libre. Mesedez, askatu espazioa edo desautatu esportatzeko elementu batzuk. Ez dago espazio nahikorik + Motoa + Zehaztu lorratz orokorreko grabazio erregistroaren tartea (mapan \'Bidaia grabaketa\' trepetaren bidez aktibatuta dago). + Ireki gordetako lorratza + \"Jarraigarria\" esan nahi du lorratza ez dela inolako zerrenda publikoetan agertzen, baina prozesatutako puntuak bere denbora markekin (zurekin zuzenean lotu ezin direnak) GPS API publikoaren deskargen bidez agertzen dira. + + Prestazioa + OpenStreetMap-eko saio hasiera + OpenStreetMap.org-eko saio hasiera + \"Publikoa\" esan nahi du lorratza publikoki erakusten dela zure GPS lorratzen eta GPS lorratz zerrende publikoetan, eta lorratzen zerrenda publikoan denbora markak modu gordinean daudela. APIaren bidez hornitutako datuek ez dute zure lorratz orria aipatzen. Bide-puntuen denbora-zigiluak ez daude eskuragarri GPS API publikoaren bidez, eta bide-puntuak ez daude kronologikoki ordenatuta. + \"Pribatua\" esan nahi du lorratza ez dela inolako zerrenda publikoetan agertzen, baina ordena ez kronologikoan dauden bide-puntuak GPS API publikoaren bidez eskuragarri daude denbora-markarik gabe. + \"Identifikagarria\" esan nahi du lorratza publikoki erakutsiko dela Zure GPS lorratzetan eta GPS lorratz zerrenda publikoetan, hau da, beste erabiltzaileek lorratz gordina deskargatu eta zure erabiltzaile izenarekin lotu ahal izango dute. Bide-puntuen APIaren bidez hornitutako GPS APIaren denbora-markadu bide-puntuak jatorrizko lorratzari egingo diote erreferentzia. + Erregistratu lorratza automatikoki nabigazioan zehar + MGRS + Zer dago berri + Elur-motorra gidatzeko, berezko bide eta lorratzekin. + MGRS + OsmAnd-ek MGRS erabiltzen du, UTM NATO formatuaren antzekoa da. + Eman zure ibilgailuaren luzera, ibilbide batzuetako mugak aplika daitezke ibilgailu luzeentzat. + Herrialde edo eskualde batzuetan, abiadura-kamerak abisatzeko aplikazioak erabiltzea legez debekatuta dago. +\n +\nAukeraketa bat egin behar duzu zure herrialdeko legediaren arabera. +\n +\nAukeratu %1$s eta abiadura-kamerei buruzko alertak eta abisuak jasoko dituzu. +\n +\nAukeratu %2$s eta abiadura-kameraen inguruko datu guztiak, alertak, jakinarazpenak, interesguneak ezabatuko dira OsmAnd erabat berriro instalatu arte. + Mapillary geruza mapan erakutsi edo ezkutatzeko botoia. + Moztu ondoren + • Eguneratutako ibilbidea planifinatzeko funtzioa: Segmentu bakoitzeko nabigazio mota desberdinak erabiltzea eta lorratzak sartzea ahalbidetzen du +\n +\n • Lorratzen itxura menu berria: Hautatu kolorea, lodiera, bistaratzeko norabideko geziak, hasierako eta amaierako ikonoak +\n +\n • Bizikleta nodoen ikusgarritasuna hobetu da. +\n +\n • Orain lorratzetan sakatu daitezke, laster-menua dute oinarrizko informazioarekin. +\n +\n • Bilaketa algoritmoak hobetu dira +\n +\n • Lorratza jarraitzeko aukerak hobetu dira nabigazioan +\n +\n • Profilaren ezarpenak inportatzeko / esportatzeko arazoak konpondu dira +\n +\n + Azken aldaketa + Izena: Z - A + Izena: A - Z + Hasiera eta amaiera ikonoak + Eskerrik asko \"Sestra lerroak\" erosteagatik + Harpidetza kobratuta hautatutako aldirako. Utzi AppGallery-n edozein unetan. + Ordainketa zure AppGallery kontuan kargatuko da erosketa baieztatzean. +\n +\nHarpidetza automatikoki berritzen da, berritze data baino lehen bertan behera utzi ezean. Berritze aldia (hilean / hiru hilean / urtean) berrituko den egunean bertan kobratuko zaizu. +\n +\nHarpidetzak kudeatu eta bertan behera utzi ditzakezu AppGallery-ren ezarpenetara joanda. + Hasi saioa OAuth-ekin osmedit funtzioak erabiltzeko + Hasi saioa OAuth bidez + Garbitu OpenStreetMap OAuth token-a + Saioa amaitu da + Fitxategia dagoeneko OsmAnd-en inportatuta dago + Erabili 2 faseko A* bideratze algoritmoa + Grafikoa + Hasi saioa aldaketak igotzeko, +\n +\nbai OAuth-ekin edo zure erabiltzaile izena eta pasahitza erabiliz. + Hasi saioa erabiltzaile izenarekin eta pasahitzarekin + Kontua + Erabiltzaile-izena + Kudeatu harpidetza + Arazo bat dago zure harpidetzarekin. Egin klik botoian Google Play harpidetzaren ezarpenetara joateko zure ordainketa-metodoa konpontzeko. + OsmAnd Live harpidetza iraungi egin da + OsmAnd Live harpidetza pausatu da + OsmAnd Live harpidetza zain dago + Sartu etiketak komaz bereizita. + Hasi saioa OAuth metodo segurua erabiliz edo erabili zure erabiltzaile izena eta pasahitza. + Erregistratu hemen: +\nOpenPlaceReviews.org + Hasi saioa OpenPlaceReviews.org datu irekien proiektuaren webgunean, argazki gehiago igotzeko. + Gehitu OpenPlaceReviews-era + OsmAnd-ek hainbat iturritako argazkiak erakusten ditu: +\nOpenPlaceReviews - Interesguneen argazkiak; +\nMapillary - Kale mailako irudiak; +\nWeb / Wikimedia - OpenStreetMap datuetan zehaztutako interesguneen argazkiak. + Norabidea + Moztu aurretik + Lorratzaren grabazioa pausatuko du aplikazioa hiltzean (azken aplikazioen bidez). (OsmAnd atzeko planoaren adierazpena Androideko jakinarazpen-barratik desagertzen da.) + Pausatu bidaiaren grabazioa + Berrekin bidaiaren grabazioa + Sisteman lehenetsia + Ondorengo segmentu guztiak + Aurreko segmentua + Aurreko segmentu guztiak + Aukeratutako segmentua soilik birkalkulatuko da hautatutako profila erabiliz. + Ondorengo segmentu guztiak birkalkulatuko dira hautatutako profila erabiliz. + Aurreko segmentu guztiak berriro kalkulatuko dira hautatutako profila erabiliz. + gorde da + Gehitu gutxienez bi puntu. + Berregin + Bidaia + Gutxienez bi puntu gehitu behar dituzu + Hasi saioa OpenStreetMap-ekin + Gehitu lorratzaren bide-puntua + Gehitu lorratzaren bide-puntua + Bidaiaren grabaketa + Gorde lorratz fitxategi gisa + Jarraitu lorratza + Hautatu jarraituko den lorratzaren fitxategia + Aukeratu jarraituko den lorratzaren fitxategia edo inportatu zure gailutik. + Aukeratu beste lorratz bat + Nabigatu nire posiziotik lorratzera + Nabigatzeko lorratzaren puntua + Lorratzaren hasiera + Puntu hurbilena + Erantsi errepideetara + Ezabatu helbidea + Gehitu helbidea + Sartu helbidea + Aldatu ibilbide mota honen aurretik: + Aldatu ibilbide mota honen ondoren: + Lorratz sinplifikatua + Ibilbidearen lerroa bakarrik gordeko da, bide-puntuak ezabatuko dira. + Fitxategi-izena + %s lorratz fitxategi aukeratuta + GRABATU + Saihestu oinezkoen bideak + Saihestu oinezkoen bideak + Garapena + OsmAnd zuzeneko datuak + OsmAnd zuzeneko datuak + Bi faseetako ibilbide kalkulua kotxe bidezko nabigazioarentzat. + Garraio publikoaren garapen natiboa + Aldatu garraio publikoaren ibilbidearen kalkulua Javara (segurua) + %1$s datuak soilik errepideetan soilik daude eskuragarri, eskuratzeko ibilbidea kalkulatu behar duzu \"Puntuen arteko ibilbidea\" erabiliz. + Itxaron ibilbidea berkalkulatu arte. +\nGrafikoa erabilgarri egongo da berkalkulatu ondoren. + Tokiko mapak + %1$s — %2$s + Berezia + Garraioa + Zerbitzua + Sinboloak + Kirola + Larrialdia + Abiadura-kameren interesguneak + Gailu honek ez du abiadura-kamerarik. + Desinstalatu abiadura-kamerak + Legezkoa + Mantendu aktibo + Desinstalatu + Abiadura-kameren alertak herrialde batzuetan legeak debekatuta daude. + tonuak + Gehitu sareko iturria + Aldaketa hauek aplikatzean lauzen iturburu honetako cache datuak garbituko dira + Ezarri ontziaren altuera + Ontziaren altuera ezar dezakezu zubi baxuak ekiditeko. Gogoan izan, zubia mugikorra bada, irekita dagoeneko altuera erabiliko dugula. + Ezarri ontziaren altuera zubi baxuak ekiditeko. Gogoan izan, zubia mugikorra bada, irekita dagoeneko altuera erabiliko dugula. + Ezarri ontziaren zabalera zubi estuak ekiditeko + Zehaztu ibilbideetan baimendutako ibilgailu-luzera. + Luzera muga + %1$s ezabatuta + Berrabiarazi aplikazioa abiadura-kameraren datu guztiak ezabatzeko. + Desinstalatu eta berrabiarazi + Lerroko patinak + Kontrolatu maparen zoom maila gailuaren bolumen botoiekin. + Eman izena puntuari + Deskargatu Wikipediako mapak + Gehitutako puntua ez da mapan ikusiko, hautatutako taldea ezkutatuta dagoelako, \"%s\" atalean aurkitu dezakezu. + Itxitako OSM oharra + Planifikatu ibilbidea + Erakutsi hasierako eta amaierako ikonoak + Aukeratu markatzaileak lorratzean bistaratzeko tartea distantzian edo denboran. + Pertsonalizatua + Solidoa + Kale mailako irudiak + Ziur al zaude aurreikusitako ibilbidean egindako aldaketa guztiak baztertu nahi dituzula eta itxi\? + Alderantzizko norabidearen kasuan + Gorde lorratz fitxategi berri gisa + Gehitu lorratz fitxategi batean + Lorratzak + Lorratzak + Lorratzak + Erregistratu lorratza GPX fitxategian + Lorratz ibilbidea + Gehitu lorratz fitxategiak + Inportatu edo grabatu lorratz fitxategiak + Itxi OSM oharra + Markatzaileen historia + Bidali GPX fitxategia OpenStreetMap-era + Egin iruzkina OSM oharrean \ No newline at end of file From da711c60fe1e59515ce3bfa718e3573743284c32 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Fri, 20 Nov 2020 11:21:10 +0000 Subject: [PATCH 151/198] Translated using Weblate (Sardinian) Currently translated at 99.7% (3556 of 3564 strings) --- OsmAnd/res/values-sc/strings.xml | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index c083252cd9..3a6de6cbea 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -786,7 +786,7 @@ Subrapositziones fluorescentes Imprea colores fluorescentes pro visualizzare rastas e àndalas. Modìficas chene lìnia - Si sa sa modìfica chene lìnia est abilitada, sas modìficas ant a èssere sarvadas in locale, in antis, e carrigadas si benit pedidu. Si nono, ant a èssere carrigadas immediatamente. + Si sa modìfica chene lìnia est abilitada, sas modìficas ant a èssere sarvadas in locale, in antis, e carrigadas si benit pedidu. Si nono, ant a èssere carrigadas immediatamente. Sa modìficas de sos PDI intre s’aplicatzione non tenent efetos in sas mapas iscarrigadas, sunt imbetzes sarvadas in su dispositivu. {0} PDI/notas carrigados/as Càrriga sa modìfica in OSM @@ -2639,7 +2639,7 @@ Còpia sa positzione/su nùmene de su PDI Logu chene nùmene Ammustra sas notas serradas - Ammustra/cua sas notas OSM in sa mapa. + Ammustra o cua sas notas OSM in sa mapa. GPX - adatu pro s\'esportatzione a JOSM o a àteros editores OSM. OSC - adatu pro s\'esportatzione in OpenStreetmap. Documentu GPX @@ -3084,9 +3084,9 @@ Ischerta sos profilos chi cheres chi siant visìbiles in s’aplicatzione. Profilos de s\'aplicatzione Annanghe a su mancu un\'elementu a sa lista in sas impostatziones pro sas atziones lestras - Iscì alpinu/de achirrada + Iscì alpinu e de achirrada Pistas pro iscì alpinu o de achirrada e atzessu a sos impiantos de artiada. - Iscì de fundu/nòrdicu + Iscì de fundu e nòrdicu Pistas pro s\'iscì nòrdicu o de fundu. Iscì-alpinismu Àndalas pro s\'iscì-alpinismu. @@ -3577,7 +3577,7 @@ Umbraduras de sos rilievos %1$s de %2$s Pistas - Ammustra / cua su terrinu + Ammustra o cua su terrinu Cua su terrinu Ammustra su terrinu Unu butone pro ammustrare o cuare s\'istratu de su terrinu in sa mapa. @@ -3695,11 +3695,11 @@ Podes atzèdere a custas atziones incarchende su butone \"%1$s\". Cua sos trasportos pùblicos Ammustra sos trasportos pùblicos - Ammustra/cua sos trasportos pùblicos + Ammustra o cua sos trasportos pùblicos Butone pro ammustrare o cuare sos trasportos pùblicos in sa mapa. - Crea / Modìfica unu PDI + Crea o modìfica unu PDI Logos de parchègiu - Annanghe / Modìfica unu preferidu + Annanghe o modìfica unu preferidu Riprìstina s\'òrdine predefinidu de sos elementos Torra a modificare Su butone de atzione faghet colare dae unu profilu ischertadu a s\'àteru. @@ -3852,7 +3852,7 @@ Sighi cun sa registratzione de su biàgiu Sarva comente documentu de rasta %s documentos de rasta ischertados - Dislinda s’intervallu pro sa registratzione generale de sas rastas (abilitadu pro mèdiu de su widget registratzione GPX in sa mapa). + Dislinda s’intervallu pro sa registratzione generale de sas rastas (allutu pro mèdiu de su widget \'Registratzione GPX\' in sa mapa). Registra Àndala de una rasta Sighi sa rasta @@ -3887,7 +3887,7 @@ Torra a fàghere • Funtzionalidade de pranificatione de un\'àndala agiornada: permitit de impreare castas diferentes de navigatzione pro segmentu e s\'inclusione de rastas \n -\n • Menù de Aparèntzia nou pro sas rastas: ischerta su colore, grussària, visulaizatzione de sas fritzas de diretzione, iconas de incumintzu/fine +\n • Menù de Aparèntzia nou pro sas rastas: ischerta su colore, grussària, visulaizatzione de sas fritzas de diretzione, iconas de incumintzu e fine \n \n • Visibilidade megiorada de sos nodos pro sas bitzicletas. \n @@ -3903,7 +3903,7 @@ Ùrtima modìfica Nùmene: Z – A Nùmene: A – Z - Iconas de incumintzu/fine + Iconas de incumintzu e fine Gràtzias pro àere comporadu \'Curvas de livellu\' Costu periòdicu de s\'abbonamentu. Lu podes anullare in AppGallery cando boles. Su pagamentu at a èssere addebitadu a su contu tuo de AppGallery cando sa còmpora at a èssere cunfirmada. @@ -3923,7 +3923,7 @@ Intra cun OAuth pro impreare sas funtzionalidades osmedit Intra impreende OAuth Iscantzella su getone OAuth de OpenStreetMap - Essida fata chene problemas + Essidu Su documentu est giai importadu in OsmAnd Imprea un\'algoritmu de càrculu de s\'àndala A* a duas fases Pro sa ghia de motoislitas cun caminos e rastas dedicados. @@ -3947,13 +3947,13 @@ Depes annànghere a su mancu duos puntos Intra in OpenStreetMap Intra in OpenStreetMap.org - Identìfica·ti cun OpenStreetMap - Depes intrare pro pòdere carrigare modìficas noas o mudadas. + Intra cun OpenStreetMap + Intra pro carrigare modìficas noas o mudadas, \n -\nPodes intrare impreende su mètodu seguru OAuth o cun s\'identificadore (su nùmene de impreadore) tuo e sa crae de intrada tua. - Imprea un\'identificadore e una crae de intrada +\nimpreende su mètodu seguru OAuth o cun su nùmene de impreadore tuo e sa crae de intrada tua. + Intra cun unu nùmene de impreadore e una crae de intrada Contu - Identificadore + Nùmene impreadore Amministra s\'abbonamentu B\'at unu problema cun s\'abbonamentu tuo. Incarca su butone pro andare a sas impostatziones de sos abbonamentos de Google Play pro acontzare sa manera de pagamentu tua. S\'abbonamentu de OsmAnd Live est iscadidu @@ -3962,8 +3962,8 @@ Cronologia de sos marcadores Imbia unu documentu GPX a OpenStreetMap Inserta sas etichetas iscrobadas dae vìrgulas. - Pùblica cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Sos datos frunidos pro mèdiu de s\'API non sunt ligados a sa pàgina de sa rasta tua. Sas datas integradas in sos puntos de rasta no ant a èssere a disponimentu pro mèdiu de s\'API GPS, e sos puntos no ant a èssere ordinados in manera cronològica. Nointames custu sos àteros impreadores ant a pòdere iscarrigare sa rasta su matessi dae sa lista pùblica de sas rastas cun totu sas datas e sas oras integradas. - Privada cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista, ma sos puntos suos ant a èssere a disponimentu su matessi pro mèdiu de s\'API GPS pùblicu chene datas e oras ma no ant a èssere ordinados in manera cronològica. + \"Pùblica\" cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas, in sas listas de rastas GPS pùblicas e in sa lista de rastas pùblicas cun datas e oras in forma originale. Sos datos frunidos pro mèdiu de s\'API non sunt ligados a sa pàgina de sa rasta tua. Sas datas e sas oras integradas in sos puntos de rasta no ant a èssere a disponimentu pro mèdiu de s\'API GPS, e sos puntos no ant a èssere ordinados in manera cronològica. + \"Privada\" cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista, ma sos puntos suos ant a èssere a disponimentu su matessi, in òrdine cronològicu, pro mèdiu de s\'API GPS pùblica chene datas e oras. \"Identificàbile\" cheret nàrrere chi sa rasta at a èssere ammustrada in manera pùblica in sas rastas GPS tuas e in sas listas de rastas GPS pùblicas. Est a nàrrere chi àteros impreadores ant a pòdere iscarrigare sa rasta e l\'ant a pòdere assotziare a su nùmene de impreadore tuo. Sos puntos de rastas cun datas e oras dae s\'API GPS frunidos pro mèdiu de s\'API de sos puntos de sas rastas ant a èssere ligados a sa pàgina de sa rasta originale tua. \"Arrastàbile\" cheret nàrrere chi sa rasta no at a èssere ammustrada in peruna lista pùblica, ma sos puntos suos cun sas datas (no ant a èssere assotziados diretamente cun tie) l\'ant a èssere pro mèdiu de iscarrigamentos dae s\'API GPS pùblica. Serra sa nota de OSM From f918f5474e485ad981b911ed30860b0e1139c958 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 20 Nov 2020 15:04:40 +0000 Subject: [PATCH 152/198] Translated using Weblate (German) Currently translated at 99.6% (3847 of 3860 strings) --- OsmAnd/res/values-de/phrases.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-de/phrases.xml b/OsmAnd/res/values-de/phrases.xml index e9f39131f9..950388e493 100644 --- a/OsmAnd/res/values-de/phrases.xml +++ b/OsmAnd/res/values-de/phrases.xml @@ -3853,4 +3853,34 @@ Dachparkplätze GPX-Wegpunkt Radarturm + nein + ja + nein + ja + nein + ja + Subnationales Büro + Repräsentanzbüro + Verbindungsbüro + Honorarkonsul + Generalkonsulat + Konsularbüro + Konsularagentur + Geleitet von einem Konsul + Residenz + Nuntiatur + Mission + Interessenvertretung + Hochkommissar + Delegation + Niederlassung + Geleitet von einem Botschafter + Verbindungsbüro + Botschaft + Dienstleistungen für Bürger + Einwanderungsvisa + Nicht-Einwanderungsvisa + Verbindungsbüro + Konsulat + Botschaft \ No newline at end of file From 0c58a9063c150a7fdfa3a89e9b1fd6891974189c Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Fri, 20 Nov 2020 11:26:46 +0000 Subject: [PATCH 153/198] Translated using Weblate (Sardinian) Currently translated at 99.2% (3832 of 3860 strings) --- OsmAnd/res/values-sc/phrases.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index 5dcc8b52d1..5998039bd6 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -3846,4 +3846,19 @@ Cobertura Puntu GPX Torre ràdar + Nono + Eja + Nono + Eja + Nono + Eja + Ufìtziu + Consoladu generale + Residèntzia + Missione + Commissione arta + Delegatzione + Ambassada + Consoladu + Ambassada \ No newline at end of file From f4920a0ff13999bc3cb91289ff5653c459dde996 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Fri, 20 Nov 2020 12:18:05 +0000 Subject: [PATCH 154/198] Translated using Weblate (Esperanto) Currently translated at 99.2% (3536 of 3564 strings) --- OsmAnd/res/values-eo/strings.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 2246163a37..2de782c6c3 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -3980,4 +3980,14 @@ Serĉi en historio Kajako Motorboato + OsmAnd montras fotojn el diversaj fontoj: +\nOpenPlaceReviews – fotoj de interesejoj; +\nMapillary – strat‑nivela fotaro; +\ninterreto, Vikimedio – fotoj de interesejoj difinitaj en OpenStreetMap-datumoj. + Rimedoj + Proksimuma dosiergrando + Elektu datumojn por elporti al dosiero. + Necesa por enporti + En via aparato estas nur %1$s da libera spaco. Liberigu iom da spaco aŭ malelektu iujn elementojn de elporto. + Mankas spaco \ No newline at end of file From b0db8cc1c3164c4cfe985f60e3d56078ab0ac6c1 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Fri, 20 Nov 2020 15:34:45 +0000 Subject: [PATCH 155/198] Translated using Weblate (Basque) Currently translated at 98.6% (3806 of 3860 strings) --- OsmAnd/res/values-eu/phrases.xml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/OsmAnd/res/values-eu/phrases.xml b/OsmAnd/res/values-eu/phrases.xml index 0bb27ef42b..5d48a182e9 100644 --- a/OsmAnd/res/values-eu/phrases.xml +++ b/OsmAnd/res/values-eu/phrases.xml @@ -1749,7 +1749,7 @@ Oin-sendagile Zerga aholkularien bulegoa Ice stock kirola - Korfbal + Korfball Paddle tenisa Erraketa (kirol tresna) Errugbi elkartea @@ -2592,7 +2592,7 @@ Motorizatua Bonba gabekoa Minerala - Uraren ezaugarria: lokatza + Lokatza Sulfurikoa Ur-puntua Poste adierazlea @@ -3549,18 +3549,18 @@ Zailtasun-kategoria н/к н/к* - + 1A 1А* - - 1Б* - - 2А* - - 2Б* - - 3А* - - 3Б* + 1B + 1B* + 2A + 2A* + 2B + 2B* + 3A + 3A* + 3B + 3B* Ezabatutako objektua Erradioterapia Bai @@ -3789,7 +3789,7 @@ Kabina mota Bai Ez - Zutoina aurkitzeko seinalea + Internet sarbidea: Bezeroak Ibiltzea baimenduta dagoenean soilik Kontrastatua Primitiboa @@ -3803,7 +3803,7 @@ Ur maila: boladaka Edateko ura betetzeko sarea Edateko ura betetzeko: ez - Edateko ura betetzeko: bai + Bai Trabatzea Ur maila: batezbestekotik behera Ur maila: batezbestekotik gora From 1fac7d773867374ebb75c9ed23437a491f6f9e13 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Sat, 21 Nov 2020 05:28:27 +0200 Subject: [PATCH 156/198] Add ExportItemsBottomSheet --- OsmAnd/res/layout/settings_group_title.xml | 108 ++++++ OsmAnd/res/values/strings.xml | 2 + .../backend/backup/SettingsHelper.java | 117 +++---- .../settings/fragments/ExportDataObject.java | 26 -- .../fragments/ExportItemsBottomSheet.java | 321 ++++++++++++++++++ .../fragments/ExportSettingsAdapter.java | 100 +++--- .../fragments/ExportSettingsFragment.java | 30 +- .../fragments/SettingsCategoryItems.java | 30 ++ 8 files changed, 581 insertions(+), 153 deletions(-) create mode 100644 OsmAnd/res/layout/settings_group_title.xml delete mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java create mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java create mode 100644 OsmAnd/src/net/osmand/plus/settings/fragments/SettingsCategoryItems.java diff --git a/OsmAnd/res/layout/settings_group_title.xml b/OsmAnd/res/layout/settings_group_title.xml new file mode 100644 index 0000000000..269d018021 --- /dev/null +++ b/OsmAnd/res/layout/settings_group_title.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 8fa1c6ab03..b14a87fdbd 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,8 @@ Thx - Hardy --> + Select items that will be imported. + Select groups that will be imported. There is not enough space Your device only has %1$s free. Please free up some space or unselect some items to export. Needed for import diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 424bf42ad3..969c59d8c1 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -43,7 +43,7 @@ import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; -import net.osmand.plus.settings.fragments.ExportDataObject; +import net.osmand.plus.settings.fragments.SettingsCategoryItems; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -472,13 +472,11 @@ public class SettingsHelper { } public List getFilteredSettingsItems(List settingsTypes, boolean globalExport) { - Map> dataList = getAdditionalData(globalExport); Map> typesMap = new HashMap<>(); - for (List objects : dataList.values()) { - for (ExportDataObject exportObject : objects) { - typesMap.put(exportObject.getType(), exportObject.getItems()); - } - } + typesMap.putAll(getSettingsItems(globalExport)); + typesMap.putAll(getMyPlacesItems()); + typesMap.putAll(getResourcesItems()); + return getFilteredSettingsItems(typesMap, settingsTypes); } @@ -499,67 +497,64 @@ public class SettingsHelper { return settingsItems; } - public Map> getAdditionalData(boolean globalExport) { - Map> dataList = new LinkedHashMap<>(); + public Map getAdditionalData(boolean globalExport) { + Map dataList = new LinkedHashMap<>(); - List settingsItems = getSettingsItems(globalExport); - List myPlacesItems = getMyPlacesItems(); - List resourcesItems = getResourcesItems(); + Map> settingsItems = getSettingsItems(globalExport); + Map> myPlacesItems = getMyPlacesItems(); + Map> resourcesItems = getResourcesItems(); if (!settingsItems.isEmpty()) { - sortExportSettingsObjects(settingsItems); - dataList.put(ExportSettingsCategory.SETTINGS, settingsItems); + dataList.put(ExportSettingsCategory.SETTINGS, new SettingsCategoryItems(settingsItems)); } if (!myPlacesItems.isEmpty()) { - sortExportSettingsObjects(myPlacesItems); - dataList.put(ExportSettingsCategory.MY_PLACES, myPlacesItems); + dataList.put(ExportSettingsCategory.MY_PLACES, new SettingsCategoryItems(myPlacesItems)); } if (!resourcesItems.isEmpty()) { - sortExportSettingsObjects(resourcesItems); - dataList.put(ExportSettingsCategory.RESOURCES, resourcesItems); + dataList.put(ExportSettingsCategory.RESOURCES, new SettingsCategoryItems(resourcesItems)); } return dataList; } - private List getSettingsItems(boolean globalExport) { - List settingsItems = new ArrayList<>(); + private Map> getSettingsItems(boolean globalExport) { + Map> settingsItems = new LinkedHashMap<>(); if (globalExport) { List appModeBeans = new ArrayList<>(); for (ApplicationMode mode : ApplicationMode.allPossibleValues()) { appModeBeans.add(mode.toModeBean()); } - settingsItems.add(new ExportDataObject(ExportSettingsType.PROFILE, appModeBeans)); + settingsItems.put(ExportSettingsType.PROFILE, appModeBeans); } - settingsItems.add(new ExportDataObject(ExportSettingsType.GLOBAL, Collections.singletonList(new GlobalSettingsItem(app.getSettings())))); + settingsItems.put(ExportSettingsType.GLOBAL, Collections.singletonList(new GlobalSettingsItem(app.getSettings()))); QuickActionRegistry registry = app.getQuickActionRegistry(); List actionsList = registry.getQuickActions(); if (!actionsList.isEmpty()) { - settingsItems.add(new ExportDataObject(ExportSettingsType.QUICK_ACTIONS, actionsList)); + settingsItems.put(ExportSettingsType.QUICK_ACTIONS, actionsList); } List poiList = app.getPoiFilters().getUserDefinedPoiFilters(false); if (!poiList.isEmpty()) { - settingsItems.add(new ExportDataObject(ExportSettingsType.POI_TYPES, poiList)); + settingsItems.put(ExportSettingsType.POI_TYPES, poiList); } List historyEntries = SearchHistoryHelper.getInstance(app).getHistoryEntries(false); if (!historyEntries.isEmpty()) { - settingsItems.add(new ExportDataObject(ExportSettingsType.SEARCH_HISTORY, historyEntries)); + settingsItems.put(ExportSettingsType.SEARCH_HISTORY, historyEntries); } Map impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads(); if (!impassableRoads.isEmpty()) { - settingsItems.add(new ExportDataObject(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values()))); + settingsItems.put(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values())); } return settingsItems; } - private List getMyPlacesItems() { - List myPlacesItems = new ArrayList<>(); + private Map> getMyPlacesItems() { + Map> myPlacesItems = new LinkedHashMap<>(); List favoriteGroups = app.getFavorites().getFavoriteGroups(); if (!favoriteGroups.isEmpty()) { - myPlacesItems.add(new ExportDataObject(ExportSettingsType.FAVORITES, favoriteGroups)); + myPlacesItems.put(ExportSettingsType.FAVORITES, favoriteGroups); } File gpxDir = app.getAppPath(IndexConstants.GPX_INDEX_DIR); List gpxInfoList = GpxUiHelper.getSortedGPXFilesInfo(gpxDir, null, true); @@ -572,18 +567,18 @@ public class SettingsHelper { } } if (!files.isEmpty()) { - myPlacesItems.add(new ExportDataObject(ExportSettingsType.TRACKS, files)); + myPlacesItems.put(ExportSettingsType.TRACKS, files); } } OsmEditingPlugin osmEditingPlugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class); if (osmEditingPlugin != null) { List notesPointList = osmEditingPlugin.getDBBug().getOsmbugsPoints(); if (!notesPointList.isEmpty()) { - myPlacesItems.add(new ExportDataObject(ExportSettingsType.OSM_NOTES, notesPointList)); + myPlacesItems.put(ExportSettingsType.OSM_NOTES, notesPointList); } List editsPointList = osmEditingPlugin.getDBPOI().getOpenstreetmapPoints(); if (!editsPointList.isEmpty()) { - myPlacesItems.add(new ExportDataObject(ExportSettingsType.OSM_EDITS, editsPointList)); + myPlacesItems.put(ExportSettingsType.OSM_EDITS, editsPointList); } } AudioVideoNotesPlugin plugin = OsmandPlugin.getPlugin(AudioVideoNotesPlugin.class); @@ -596,7 +591,7 @@ public class SettingsHelper { } } if (!files.isEmpty()) { - myPlacesItems.add(new ExportDataObject(ExportSettingsType.MULTIMEDIA_NOTES, files)); + myPlacesItems.put(ExportSettingsType.MULTIMEDIA_NOTES, files); } } List mapMarkers = app.getMapMarkersHelper().getMapMarkersFromDefaultGroups(false); @@ -605,7 +600,7 @@ public class SettingsHelper { String groupId = ExportSettingsType.ACTIVE_MARKERS.name(); MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE); markersGroup.setMarkers(mapMarkers); - myPlacesItems.add(new ExportDataObject(ExportSettingsType.ACTIVE_MARKERS, Collections.singletonList(markersGroup))); + myPlacesItems.put(ExportSettingsType.ACTIVE_MARKERS, Collections.singletonList(markersGroup)); } List markersHistory = app.getMapMarkersHelper().getMapMarkersFromDefaultGroups(true); if (!markersHistory.isEmpty()) { @@ -613,23 +608,23 @@ public class SettingsHelper { String groupId = ExportSettingsType.HISTORY_MARKERS.name(); MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE); markersGroup.setMarkers(markersHistory); - myPlacesItems.add(new ExportDataObject(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup))); + myPlacesItems.put(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup)); } return myPlacesItems; } - private List getResourcesItems() { - List resourcesItems = new ArrayList<>(); + private Map> getResourcesItems() { + Map> resourcesItems = new LinkedHashMap<>(); Map externalRenderers = app.getRendererRegistry().getExternalRenderers(); if (!externalRenderers.isEmpty()) { - resourcesItems.add(new ExportDataObject(ExportSettingsType.CUSTOM_RENDER_STYLE, new ArrayList<>(externalRenderers.values()))); + resourcesItems.put(ExportSettingsType.CUSTOM_RENDER_STYLE, new ArrayList<>(externalRenderers.values())); } File routingProfilesFolder = app.getAppPath(IndexConstants.ROUTING_PROFILES_DIR); if (routingProfilesFolder.exists() && routingProfilesFolder.isDirectory()) { File[] fl = routingProfilesFolder.listFiles(); if (fl != null && fl.length > 0) { - resourcesItems.add(new ExportDataObject(ExportSettingsType.CUSTOM_ROUTING, Arrays.asList(fl))); + resourcesItems.put(ExportSettingsType.CUSTOM_ROUTING, Arrays.asList(fl)); } } List iTileSources = new ArrayList<>(); @@ -649,22 +644,22 @@ public class SettingsHelper { } } if (!iTileSources.isEmpty()) { - resourcesItems.add(new ExportDataObject(ExportSettingsType.MAP_SOURCES, iTileSources)); + resourcesItems.put(ExportSettingsType.MAP_SOURCES, iTileSources); } List localIndexInfoList = getLocalIndexData(); List files = getFilesByType(localIndexInfoList, LocalIndexType.MAP_DATA, LocalIndexType.TILES_DATA, LocalIndexType.SRTM_DATA, LocalIndexType.WIKI_DATA); if (!files.isEmpty()) { sortLocalFiles(files); - resourcesItems.add(new ExportDataObject(ExportSettingsType.OFFLINE_MAPS, files)); + resourcesItems.put(ExportSettingsType.OFFLINE_MAPS, files); } files = getFilesByType(localIndexInfoList, LocalIndexType.TTS_VOICE_DATA); if (!files.isEmpty()) { - resourcesItems.add(new ExportDataObject(ExportSettingsType.TTS_VOICE, files)); + resourcesItems.put(ExportSettingsType.TTS_VOICE, files); } files = getFilesByType(localIndexInfoList, LocalIndexType.VOICE_DATA); if (!files.isEmpty()) { - resourcesItems.add(new ExportDataObject(ExportSettingsType.VOICE, files)); + resourcesItems.put(ExportSettingsType.VOICE, files); } return resourcesItems; @@ -793,35 +788,32 @@ public class SettingsHelper { return settingsItems; } - public static Map> getSettingsToOperateByCategory(List items, boolean importComplete) { - Map> exportMap = new LinkedHashMap<>(); + public static Map getSettingsToOperateByCategory(List items, boolean importComplete) { + Map exportMap = new LinkedHashMap<>(); Map> settingsToOperate = getSettingsToOperate(items, importComplete); - List settingsItems = new ArrayList<>(); - List myPlacesItems = new ArrayList<>(); - List resourcesItems = new ArrayList<>(); + Map> settingsItems = new LinkedHashMap<>(); + Map> myPlacesItems = new LinkedHashMap<>(); + Map> resourcesItems = new LinkedHashMap<>(); for (Map.Entry> entry : settingsToOperate.entrySet()) { ExportSettingsType type = entry.getKey(); if (type.isSettingsCategory()) { - settingsItems.add(new ExportDataObject(type, entry.getValue())); + settingsItems.put(type, entry.getValue()); } else if (type.isMyPlacesCategory()) { - myPlacesItems.add(new ExportDataObject(type, entry.getValue())); + myPlacesItems.put(type, entry.getValue()); } else if (type.isResourcesCategory()) { - resourcesItems.add(new ExportDataObject(type, entry.getValue())); + resourcesItems.put(type, entry.getValue()); } } if (!settingsItems.isEmpty()) { - sortExportSettingsObjects(settingsItems); - exportMap.put(ExportSettingsCategory.SETTINGS, settingsItems); + exportMap.put(ExportSettingsCategory.SETTINGS, new SettingsCategoryItems(settingsItems)); } if (!myPlacesItems.isEmpty()) { - sortExportSettingsObjects(myPlacesItems); - exportMap.put(ExportSettingsCategory.MY_PLACES, myPlacesItems); + exportMap.put(ExportSettingsCategory.MY_PLACES, new SettingsCategoryItems(myPlacesItems)); } if (!resourcesItems.isEmpty()) { - sortExportSettingsObjects(resourcesItems); - exportMap.put(ExportSettingsCategory.RESOURCES, resourcesItems); + exportMap.put(ExportSettingsCategory.RESOURCES, new SettingsCategoryItems(resourcesItems)); } return exportMap; @@ -1017,15 +1009,4 @@ public class SettingsHelper { } }); } - - private static void sortExportSettingsObjects(List items) { - Collections.sort(items, new Comparator() { - @Override - public int compare(ExportDataObject lhs, ExportDataObject rhs) { - int order1 = lhs.getType().ordinal(); - int order2 = rhs.getType().ordinal(); - return (order1 < order2) ? -1 : ((order1 == order2) ? 0 : 1); - } - }); - } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java deleted file mode 100644 index e8ede12a77..0000000000 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportDataObject.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.osmand.plus.settings.fragments; - -import androidx.annotation.NonNull; - -import net.osmand.plus.settings.backend.ExportSettingsType; - -import java.util.List; - -public class ExportDataObject { - - private ExportSettingsType type; - private List items; - - public ExportDataObject(@NonNull ExportSettingsType type, @NonNull List items) { - this.type = type; - this.items = items; - } - - public ExportSettingsType getType() { - return type; - } - - public List getItems() { - return items; - } -} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java new file mode 100644 index 0000000000..8c62e04ccf --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java @@ -0,0 +1,321 @@ +package net.osmand.plus.settings.fragments; + +import android.content.res.ColorStateList; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.core.widget.CompoundButtonCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; + +import net.osmand.AndroidUtils; +import net.osmand.IndexConstants; +import net.osmand.PlatformUtil; +import net.osmand.map.ITileSource; +import net.osmand.map.TileSourceManager.TileSourceTemplate; +import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; +import net.osmand.plus.SQLiteTileSource; +import net.osmand.plus.UiUtilities; +import net.osmand.plus.audionotes.AudioVideoNotesPlugin; +import net.osmand.plus.base.MenuBottomSheetDialogFragment; +import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; +import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton; +import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton.Builder; +import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; +import net.osmand.plus.base.bottomsheetmenu.simpleitems.SimpleDividerItem; +import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; +import net.osmand.plus.helpers.FileNameTranslationHelper; +import net.osmand.plus.helpers.GpxUiHelper; +import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; +import net.osmand.plus.mapmarkers.MapMarkersGroup; +import net.osmand.plus.osmedit.OpenstreetmapPoint; +import net.osmand.plus.osmedit.OsmEditingPlugin; +import net.osmand.plus.osmedit.OsmNotesPoint; +import net.osmand.plus.poi.PoiUIFilter; +import net.osmand.plus.profiles.ProfileIconColors; +import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources; +import net.osmand.plus.quickaction.QuickAction; +import net.osmand.plus.render.RenderingIcons; +import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; +import net.osmand.plus.settings.backend.ExportSettingsType; +import net.osmand.plus.settings.backend.backup.FileSettingsItem; +import net.osmand.plus.settings.backend.backup.GlobalSettingsItem; +import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedListener; +import net.osmand.util.Algorithms; +import net.osmand.view.ThreeStateCheckbox; + +import org.apache.commons.logging.Log; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import static net.osmand.view.ThreeStateCheckbox.State.CHECKED; +import static net.osmand.view.ThreeStateCheckbox.State.MISC; +import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; + +public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment { + + public static final String TAG = ExportItemsBottomSheet.class.getSimpleName(); + private static final Log LOG = PlatformUtil.getLog(ExportItemsBottomSheet.class); + + private OsmandApplication app; + private UiUtilities uiUtilities; + + private ExportSettingsType type; + private List allItems; + private List selectedItems = new ArrayList<>(); + + private TextView selectedSize; + private ThreeStateCheckbox checkBox; + + private int activeColorRes; + private int secondaryColorRes; + + @Override + public void createMenuItems(Bundle savedInstanceState) { + app = requiredMyApplication(); + uiUtilities = app.getUIUtilities(); + activeColorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light; + secondaryColorRes = nightMode ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light; + + items.add(createTitleItem()); + items.add(new SimpleDividerItem(app)); + + for (Object object : allItems) { + final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; + Builder builder = (BottomSheetItemWithCompoundButton.Builder) new Builder() + .setChecked(selectedItems.contains(object)) + .setButtonTintList(AndroidUtils.createCheckedColorStateList(app, secondaryColorRes, activeColorRes)) + .setLayoutId(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean checked = !item[0].isChecked(); + item[0].setChecked(checked); + if (checked) { + selectedItems.add(item[0].getTag()); + } else { + selectedItems.remove(item[0].getTag()); + } + updateTitleView(); + } + }) + .setTag(object); + setupBottomSheetItem(builder, object); + item[0] = (BottomSheetItemWithCompoundButton) builder.create(); + items.add(item[0]); + } + } + + private BaseBottomSheetItem createTitleItem() { + LayoutInflater themedInflater = UiUtilities.getInflater(requireContext(), nightMode); + View view = themedInflater.inflate(R.layout.settings_group_title, null); + + checkBox = view.findViewById(R.id.check_box); + selectedSize = view.findViewById(R.id.selected_size); + TextView textView = view.findViewById(R.id.title); + textView.setText(type.getTitleId()); + view.findViewById(R.id.select_all_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + checkBox.performClick(); + boolean checked = checkBox.getState() == CHECKED; + if (checked) { + selectedItems.addAll(allItems); + } else { + selectedItems.clear(); + } + updateTitleView(); + updateItems(checked); + } + }); + setupDescription(view); + updateTitleView(); + + return new SimpleBottomSheetItem.Builder().setCustomView(view).create(); + } + + private void updateTitleView() { + if (Algorithms.isEmpty(selectedItems)) { + checkBox.setState(UNCHECKED); + } else { + checkBox.setState(selectedItems.containsAll(allItems) ? CHECKED : MISC); + } + int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; + CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); + + selectedSize.setText(getString(R.string.ltr_or_rtl_combine_via_slash, selectedItems.size(), allItems.size())); + } + + private void updateItems(boolean checked) { + for (BaseBottomSheetItem item : items) { + if (item instanceof BottomSheetItemWithCompoundButton) { + ((BottomSheetItemWithCompoundButton) item).setChecked(checked); + } + } + } + + @Override + protected int getDismissButtonTextId() { + return R.string.shared_string_cancel; + } + + @Override + protected int getRightBottomButtonTextId() { + return R.string.shared_string_apply; + } + + @Override + protected void onRightBottomButtonClick() { + Fragment target = getTargetFragment(); + if (target instanceof OnItemSelectedListener) { + OnItemSelectedListener listener = (OnItemSelectedListener) target; + listener.onItemsSelected(type, selectedItems); + } + dismiss(); + } + + public static void showInstance(@NonNull ExportSettingsType type, List selectedItems, List allItems, @NonNull FragmentManager fm, @Nullable Fragment target) { + try { + if (!fm.isStateSaved() && fm.findFragmentByTag(TAG) == null) { + ExportItemsBottomSheet fragment = new ExportItemsBottomSheet(); + fragment.type = type; + fragment.allItems = (List) allItems; + if (selectedItems != null) { + fragment.selectedItems.addAll(selectedItems); + } + fragment.setTargetFragment(target, 0); + fragment.show(fm, TAG); + } + } catch (RuntimeException e) { + LOG.error("showInstance", e); + } + } + + private String setupDescription(View view) { + TextView description = view.findViewById(R.id.description); + if (type == ExportSettingsType.FAVORITES) { + description.setText(R.string.select_groups_for_import); + } else { + description.setText(R.string.select_items_for_import); + } + return null; + } + + private void setupBottomSheetItem(BottomSheetItemWithCompoundButton.Builder builder, Object object) { + if (object instanceof ApplicationModeBean) { + ApplicationModeBean modeBean = (ApplicationModeBean) object; + String profileName = modeBean.userProfileName; + if (Algorithms.isEmpty(profileName)) { + ApplicationMode appMode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null); + profileName = getString(appMode.getNameKeyResource()); + } + builder.setTitle(profileName); + + String routingProfile = ""; + String routingProfileValue = modeBean.routingProfile; + if (!routingProfileValue.isEmpty()) { + try { + routingProfile = getString(RoutingProfilesResources.valueOf(routingProfileValue.toUpperCase()).getStringRes()); + routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfile); + } catch (IllegalArgumentException e) { + routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfileValue); + LOG.error("Error trying to get routing resource for " + routingProfileValue + "\n" + e); + } + } + if (!Algorithms.isEmpty(routingProfile)) { + builder.setDescription(getString(R.string.ltr_or_rtl_combine_via_colon, getString(R.string.nav_type_hint), routingProfile)); + } else { + builder.setDescription(getString(R.string.profile_type_base_string)); + } + int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName); + ProfileIconColors iconColor = modeBean.iconColor; + builder.setIcon(uiUtilities.getIcon(profileIconRes, iconColor.getColor(nightMode))); + } else if (object instanceof QuickAction) { + QuickAction quickAction = (QuickAction) object; + builder.setTitle(quickAction.getName(app)); + builder.setIcon(uiUtilities.getIcon(quickAction.getIconRes(), activeColorRes)); + } else if (object instanceof PoiUIFilter) { + PoiUIFilter poiUIFilter = (PoiUIFilter) object; + builder.setTitle(poiUIFilter.getName()); + int iconRes = RenderingIcons.getBigIconResourceId(poiUIFilter.getIconId()); + builder.setIcon(uiUtilities.getIcon(iconRes != 0 ? iconRes : R.drawable.ic_action_user, activeColorRes)); + } else if (object instanceof TileSourceTemplate || object instanceof SQLiteTileSource) { + ITileSource tileSource = (ITileSource) object; + builder.setTitle(tileSource.getName()); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_map, activeColorRes)); + } else if (object instanceof File) { + setupBottomSheetItemForFile(builder, (File) object); + } else if (object instanceof FileSettingsItem) { + FileSettingsItem fileSettingsItem = (FileSettingsItem) object; + setupBottomSheetItemForFile(builder, fileSettingsItem.getFile()); + } else if (object instanceof AvoidRoadInfo) { + AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) object; + builder.setTitle(avoidRoadInfo.name); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_alert, activeColorRes)); + } else if (object instanceof OsmNotesPoint) { + OsmNotesPoint osmNotesPoint = (OsmNotesPoint) object; + builder.setTitle(osmNotesPoint.getText()); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_osm_note_add, activeColorRes)); + } else if (object instanceof OpenstreetmapPoint) { + OpenstreetmapPoint openstreetmapPoint = (OpenstreetmapPoint) object; + builder.setTitle(OsmEditingPlugin.getTitle(openstreetmapPoint, app)); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_info_dark, activeColorRes)); + } else if (object instanceof FavoriteGroup) { + FavoriteGroup group = (FavoriteGroup) object; + builder.setTitle(group.getDisplayName(app)); + int color = group.getColor() == 0 ? ContextCompat.getColor(app, R.color.color_favorite) : group.getColor(); + builder.setIcon(uiUtilities.getPaintedIcon(R.drawable.ic_action_folder, color)); + } else if (object instanceof GlobalSettingsItem) { + GlobalSettingsItem globalSettingsItem = (GlobalSettingsItem) object; + builder.setTitle(globalSettingsItem.getPublicName(app)); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_settings, activeColorRes)); + } else if (object instanceof MapMarkersGroup) { + MapMarkersGroup markersGroup = (MapMarkersGroup) object; + if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) { + builder.setTitle(getString(R.string.map_markers)); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_flag, activeColorRes)); + } else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) { + builder.setTitle(getString(R.string.map_markers)); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_history, activeColorRes)); + } + } else if (object instanceof HistoryEntry) { + HistoryEntry historyEntry = (HistoryEntry) object; + builder.setTitle(historyEntry.getName().getName()); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_history, activeColorRes)); + } + } + + private void setupBottomSheetItemForFile(Builder builder, File file) { + FileSettingsItem.FileSubtype fileSubtype = FileSettingsItem.FileSubtype.getSubtypeByPath(app, file.getPath()); + builder.setTitle(file.getName()); + if (file.getAbsolutePath().contains(IndexConstants.RENDERERS_DIR)) { + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_map_style, activeColorRes)); + } else if (file.getAbsolutePath().contains(IndexConstants.ROUTING_PROFILES_DIR)) { + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes)); + } else if (file.getAbsolutePath().contains(IndexConstants.GPX_INDEX_DIR)) { + builder.setTitle(GpxUiHelper.getGpxTitle(file.getName())); + builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes)); + } else if (file.getAbsolutePath().contains(IndexConstants.AV_INDEX_DIR)) { + int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file); + if (iconId == -1) { + iconId = R.drawable.ic_action_photo_dark; + } + builder.setIcon(uiUtilities.getIcon(iconId, activeColorRes)); + } else if (fileSubtype.isMap() + || fileSubtype == FileSettingsItem.FileSubtype.TTS_VOICE + || fileSubtype == FileSettingsItem.FileSubtype.VOICE) { + builder.setTitle(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName())); + builder.setIcon(uiUtilities.getIcon(fileSubtype.getIconId(), activeColorRes)); + } + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java index 65cd471216..452573091e 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsAdapter.java @@ -21,6 +21,7 @@ import net.osmand.plus.helpers.FontCache; import net.osmand.plus.settings.backend.ExportSettingsCategory; import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.FileSettingsItem; +import net.osmand.util.Algorithms; import net.osmand.view.ThreeStateCheckbox; import org.apache.commons.logging.Log; @@ -28,8 +29,6 @@ import org.apache.commons.logging.Log; import java.io.File; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -44,9 +43,9 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { private final OsmandApplication app; private final UiUtilities uiUtilities; - private List itemsTypes = new ArrayList<>(); - private Map> selectedItemsMap = new HashMap<>(); - private Map> itemsMap = new LinkedHashMap<>(); + private List itemsTypes; + private Map> selectedItemsMap; + private Map itemsMap; private final OnItemSelectedListener listener; @@ -73,7 +72,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { group = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); } final ExportSettingsCategory category = itemsTypes.get(groupPosition); - final List items = itemsMap.get(category); + final SettingsCategoryItems items = itemsMap.get(category); String title = app.getString(category.getTitleId()); TextView titleTv = group.findViewById(R.id.title_tv); @@ -83,9 +82,8 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { subTextTv.setText(getCategoryDescr(category)); int selectedTypes = 0; - for (int i = 0; i < items.size(); i++) { - ExportDataObject object = items.get(i); - if (selectedItemsMap.containsKey(object.getType())) { + for (ExportSettingsType type : items.getTypes()) { + if (!Algorithms.isEmpty(selectedItemsMap.get(type))) { selectedTypes++; } } @@ -93,7 +91,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { if (selectedTypes == 0) { checkBox.setState(UNCHECKED); } else { - checkBox.setState(selectedTypes == items.size() ? CHECKED : MISC); + checkBox.setState(selectedTypes == items.getTypes().size() ? CHECKED : MISC); } int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); @@ -103,17 +101,6 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { public void onClick(View view) { checkBox.performClick(); boolean selected = checkBox.getState() == CHECKED; - if (selected) { - for (ExportDataObject object : items) { - if (!selectedItemsMap.containsKey(object.getType())) { - selectedItemsMap.put(object.getType(), object.getItems()); - } - } - } else { - for (ExportDataObject object : items) { - selectedItemsMap.remove(object.getType()); - } - } if (listener != null) { listener.onCategorySelected(category, selected); } @@ -136,26 +123,29 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { if (child == null) { child = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false); } - final ExportDataObject currentItem = itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); - List selectedItems = selectedItemsMap.get(currentItem.getType()); + final ExportSettingsCategory category = itemsTypes.get(groupPosition); + final SettingsCategoryItems categoryItems = itemsMap.get(category); + final ExportSettingsType type = categoryItems.getTypes().get(childPosition); + final List items = categoryItems.getItemsForType(type); + List selectedItems = selectedItemsMap.get(type); TextView titleTv = child.findViewById(R.id.title_tv); - titleTv.setText(currentItem.getType().getTitleId()); + titleTv.setText(type.getTitleId()); TextView subTextTv = child.findViewById(R.id.sub_text_tv); - subTextTv.setText(getSelectedTypeDescr(currentItem)); + subTextTv.setText(getSelectedTypeDescr(type, items)); ImageView icon = child.findViewById(R.id.explist_indicator); - setupIcon(icon, currentItem.getType().getIconRes(), selectedItems != null); + setupIcon(icon, type.getIconRes(), !Algorithms.isEmpty(selectedItems)); final ThreeStateCheckbox checkBox = child.findViewById(R.id.check_box); if (selectedItems == null) { checkBox.setState(UNCHECKED); - } else if (selectedItems.containsAll(currentItem.getItems())) { + } else if (selectedItems.containsAll(items)) { checkBox.setState(CHECKED); } else { boolean contains = false; - for (Object object : currentItem.getItems()) { + for (Object object : items) { if (selectedItems.contains(object)) { contains = true; break; @@ -163,7 +153,14 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { } checkBox.setState(contains ? MISC : UNCHECKED); } - + child.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onTypeClicked(category, type); + } + } + }); int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes; CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor))); child.findViewById(R.id.check_box_container).setOnClickListener(new View.OnClickListener() { @@ -171,13 +168,8 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { public void onClick(View view) { checkBox.performClick(); boolean selected = checkBox.getState() == CHECKED; - if (selected) { - selectedItemsMap.put(currentItem.getType(), currentItem.getItems()); - } else { - selectedItemsMap.remove(currentItem.getType()); - } if (listener != null) { - listener.onTypeSelected(currentItem.getType(), selected); + listener.onItemsSelected(type, selected ? items : new ArrayList<>()); } notifyDataSetChanged(); } @@ -195,7 +187,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { @Override public int getChildrenCount(int i) { - return itemsMap.get(itemsTypes.get(i)).size(); + return itemsMap.get(itemsTypes.get(i)).getTypes().size(); } @Override @@ -205,7 +197,9 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { @Override public Object getChild(int groupPosition, int childPosition) { - return itemsMap.get(itemsTypes.get(groupPosition)).get(childPosition); + SettingsCategoryItems categoryItems = itemsMap.get(itemsTypes.get(groupPosition)); + ExportSettingsType type = categoryItems.getTypes().get(groupPosition); + return categoryItems.getItemsForType(type).get(childPosition); } @Override @@ -237,19 +231,15 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { } } - public void updateSettingsList(Map> itemsMap) { + public void updateSettingsItems(Map itemsMap, + Map> selectedItemsMap) { this.itemsMap = itemsMap; this.itemsTypes = new ArrayList<>(itemsMap.keySet()); + this.selectedItemsMap = selectedItemsMap; Collections.sort(itemsTypes); notifyDataSetChanged(); } - public void clearSettingsList() { - this.itemsMap.clear(); - this.itemsTypes.clear(); - notifyDataSetChanged(); - } - public boolean hasSelectedData() { return !selectedItemsMap.isEmpty(); } @@ -265,21 +255,20 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { private String getCategoryDescr(ExportSettingsCategory category) { long itemsSize = 0; int selectedTypes = 0; - List items = itemsMap.get(category); - for (int i = 0; i < items.size(); i++) { - ExportDataObject object = items.get(i); - if (selectedItemsMap.containsKey(object.getType())) { + SettingsCategoryItems items = itemsMap.get(category); + for (ExportSettingsType type : items.getTypes()) { + if (!Algorithms.isEmpty(selectedItemsMap.get(type))) { selectedTypes++; - itemsSize += calculateItemsSize(object.getItems()); + itemsSize += calculateItemsSize(items.getItemsForType(type)); } } String description; if (selectedTypes == 0) { description = app.getString(R.string.shared_string_none); - } else if (selectedTypes == items.size()) { + } else if (selectedTypes == items.getTypes().size()) { description = app.getString(R.string.shared_string_all); } else { - description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.size())); + description = app.getString(R.string.ltr_or_rtl_combine_via_slash, String.valueOf(selectedTypes), String.valueOf(items.getTypes().size())); } String formattedSize = AndroidUtils.formatSize(app, itemsSize); return itemsSize == 0 ? description : app.getString(R.string.ltr_or_rtl_combine_via_comma, description, formattedSize); @@ -297,12 +286,11 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { return itemsSize; } - private String getSelectedTypeDescr(ExportDataObject dataObject) { + private String getSelectedTypeDescr(ExportSettingsType type, List items) { long itemsSize = 0; int selectedTypes = 0; - List items = dataObject.getItems(); - List selectedItems = selectedItemsMap.get(dataObject.getType()); + List selectedItems = selectedItemsMap.get(type); if (selectedItems != null) { for (int i = 0; i < items.size(); i++) { Object object = items.get(i); @@ -333,9 +321,11 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter { interface OnItemSelectedListener { + void onItemsSelected(ExportSettingsType type, List selectedItems); + void onCategorySelected(ExportSettingsCategory type, boolean selected); - void onTypeSelected(ExportSettingsType type, boolean selected); + void onTypeClicked(ExportSettingsCategory category, ExportSettingsType type); } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java index ce9d1f414e..77960d9cef 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -50,7 +50,10 @@ import org.apache.commons.logging.Log; import java.io.File; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -74,7 +77,9 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yy", Locale.US); private OsmandApplication app; - private Map> dataList; + + private Map> selectedItemsMap = new HashMap<>(); + private Map dataList = new LinkedHashMap<>(); private ProgressDialog progress; private ApplicationMode appMode; @@ -179,7 +184,7 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem }); adapter = new ExportSettingsAdapter(app, this, nightMode); - adapter.updateSettingsList(dataList); + adapter.updateSettingsItems(dataList, selectedItemsMap); expandableList.setAdapter(adapter); CollapsingToolbarLayout toolbarLayout = root.findViewById(R.id.toolbar_layout); @@ -292,15 +297,32 @@ public class ExportSettingsFragment extends BaseOsmAndFragment implements OnItem } @Override - public void onCategorySelected(ExportSettingsCategory type, boolean selected) { + public void onCategorySelected(ExportSettingsCategory category, boolean selected) { + SettingsCategoryItems categoryItems = dataList.get(category); + for (ExportSettingsType type : categoryItems.getTypes()) { + List selectedItems = selected ? categoryItems.getItemsForType(type) : new ArrayList<>(); + selectedItemsMap.put(type, selectedItems); + } updateAvailableSpace(); } @Override - public void onTypeSelected(ExportSettingsType type, boolean selected) { + public void onItemsSelected(ExportSettingsType type, List selectedItems) { + selectedItemsMap.put(type, selectedItems); + adapter.notifyDataSetChanged(); updateAvailableSpace(); } + @Override + public void onTypeClicked(ExportSettingsCategory category, ExportSettingsType type) { + FragmentManager fragmentManager = getFragmentManager(); + if (fragmentManager != null && type != ExportSettingsType.GLOBAL && type != ExportSettingsType.SEARCH_HISTORY) { + List items = (List) dataList.get(category).getItemsForType(type); + List selectedItems = (List) selectedItemsMap.get(type); + ExportItemsBottomSheet.showInstance(type, selectedItems, items, fragmentManager, this); + } + } + private void prepareFile() { if (app != null) { exportingStarted = true; diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/SettingsCategoryItems.java b/OsmAnd/src/net/osmand/plus/settings/fragments/SettingsCategoryItems.java new file mode 100644 index 0000000000..2f37f9fd0e --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/SettingsCategoryItems.java @@ -0,0 +1,30 @@ +package net.osmand.plus.settings.fragments; + +import androidx.annotation.NonNull; + +import net.osmand.plus.settings.backend.ExportSettingsType; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SettingsCategoryItems { + + private final Map> itemsMap; + + public SettingsCategoryItems(@NonNull Map> itemsMap) { + this.itemsMap = itemsMap; + } + + public List getTypes() { + return new ArrayList<>(itemsMap.keySet()); + } + + public List getItemsForType(ExportSettingsType type) { + return itemsMap.get(type); + } + + public Map> getItemsMap() { + return itemsMap; + } +} \ No newline at end of file From 2c103cb81b65d0e9bae0281a67a17fe126d28508 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Sat, 21 Nov 2020 11:05:55 +0300 Subject: [PATCH 157/198] Fix editing gpx (save existing wpt) --- .../osmand/plus/measurementtool/MeasurementToolFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index 16c8e2309c..3b70d79f11 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -722,7 +722,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { if (editingCtx.getPointsCount() > 0) { - if (editingCtx.isNewData() || isInEditMode()) { + if (editingCtx.isNewData()) { if (showDialog) { openSaveAsNewTrackMenu(mapActivity); } else { From cc1776ec33a89c76aa02dede931d18b83b68ba4c Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Sun, 22 Nov 2020 00:56:29 +0200 Subject: [PATCH 158/198] Plan Route Fix UI margins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Primary button (Add, Apply): minimum width size 64dp, left/right inner margins = 16dp Lost divider between the top and bottom parts of the menu. Scrollable toggles, graph switchers: left/right inner margins = 16dp (make it default value) Menu shouldn't auto close when user add a new point Убрать красные точки во время просмотра графика (точка = засечка на графике) Toggle "Points/Graph" should be visible when the menu is closed. Tap in "Point" or "Graph" button should open Point or graph. --- OsmAnd/res/layout/custom_radio_buttons.xml | 21 +++---- .../res/layout/fragment_measurement_tool.xml | 31 +++++++--- OsmAnd/src/net/osmand/plus/UiUtilities.java | 34 ++++++----- .../other/HorizontalSelectionAdapter.java | 2 + .../other/TrackDetailsMenu.java | 7 ++- .../MeasurementToolFragment.java | 56 ++++++++++++++----- 6 files changed, 100 insertions(+), 51 deletions(-) diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index a5ec943f6a..c15757f4b0 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -25,6 +25,8 @@ android:background="?attr/selectableItemBackground" android:gravity="center" android:textSize="@dimen/default_desc_text_size" + android:foreground="?attr/selectableItemBackground" + android:textColor="@drawable/radio_flat_text_selector_light" osmand:typeface="@string/font_roboto_medium" tools:text="@string/shared_string_left"/> @@ -32,20 +34,10 @@ - - + android:layout_weight="0" + android:background="@color/divider_color"> @@ -61,8 +53,9 @@ android:layout_height="match_parent" android:background="?attr/selectableItemBackground" android:gravity="center" - android:textSize="@dimen/default_desc_text_size" + android:textColor="@drawable/radio_flat_text_selector_light" osmand:typeface="@string/font_roboto_medium" + android:textSize="@dimen/default_desc_text_size" tools:text="@string/shared_string_right"/> diff --git a/OsmAnd/res/layout/fragment_measurement_tool.xml b/OsmAnd/res/layout/fragment_measurement_tool.xml index 2fe4dc1416..3cdf5b3f46 100644 --- a/OsmAnd/res/layout/fragment_measurement_tool.xml +++ b/OsmAnd/res/layout/fragment_measurement_tool.xml @@ -30,22 +30,22 @@ + tools:src="@drawable/ic_action_ruler" /> + + + - - @@ -150,6 +158,11 @@ + + items, - final AdapterView.OnItemClickListener listener) { + View v, int minWidth, + List items, + final AdapterView.OnItemClickListener listener) { int contentPadding = themedCtx.getResources().getDimensionPixelSize(R.dimen.content_padding); int contentPaddingHalf = themedCtx.getResources().getDimensionPixelSize(R.dimen.content_padding_half); int defaultListTextSize = themedCtx.getResources().getDimensionPixelSize(R.dimen.default_list_text_size); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java index 06783d6f50..28cea2eb1e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/HorizontalSelectionAdapter.java @@ -64,6 +64,8 @@ public class HorizontalSelectionAdapter extends RecyclerView.Adapter 0) { - if (editingCtx.isNewData()) { + if (editingCtx.isNewData() || isInEditMode()) { if (showDialog) { openSaveAsNewTrackMenu(mapActivity); } else { @@ -1030,7 +1058,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route @Override public void onChangeApplicationMode(ApplicationMode mode, RouteBetweenPointsDialogType dialogType, - RouteBetweenPointsDialogMode dialogMode) { + RouteBetweenPointsDialogMode dialogMode) { MeasurementToolLayer measurementLayer = getMeasurementLayer(); if (measurementLayer != null) { ChangeRouteType changeRouteType = ChangeRouteType.NEXT_SEGMENT; @@ -1465,9 +1493,10 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route private void collapseAdditionalInfoView() { if (portrait) { additionalInfoExpanded = false; - updateUpDownBtn(); additionalInfoContainer.setVisibility(View.GONE); setDefaultMapPosition(); + changeAdditionalInfoType(null); + updateUpDownBtn(); } } @@ -1479,6 +1508,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route collapseAdditionalInfoView(); } else if (pointsCount < 1) { disable(upDownBtn); + collapseAdditionalInfoView(); if (additionalInfoExpanded) { collapseAdditionalInfoView(); } @@ -1866,7 +1896,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route } public static boolean showInstance(FragmentManager fragmentManager, MeasurementEditingContext editingCtx, - boolean followTrackMode) { + boolean followTrackMode) { MeasurementToolFragment fragment = new MeasurementToolFragment(); fragment.setEditingCtx(editingCtx); fragment.setMode(FOLLOW_TRACK_MODE, followTrackMode); From b2a6177d990a74e484176cb74a0c3026ce5fc7d0 Mon Sep 17 00:00:00 2001 From: Kintu Date: Sat, 21 Nov 2020 01:32:38 +0000 Subject: [PATCH 159/198] Translated using Weblate (Catalan) Currently translated at 96.4% (3437 of 3564 strings) --- OsmAnd/res/values-ca/strings.xml | 182 +++++++++++++++---------------- 1 file changed, 85 insertions(+), 97 deletions(-) diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index a8b5d32da2..9e017a5447 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -89,7 +89,7 @@ Utilitza mapes en línia (les tessel·les es baixen i es desen a la tarja de memòria). Mapes en línia Seleccioneu les fonts de mapes de tessel·les en línia o a la memòria cau. - "Fa disponible directament des OsmAnd les característiques d\'accessibilitat del dispositiu. Us permet, per exemple, ajustar la velocitat de la veu sintetitzada, configurar la navegació amb cursors, utilitzant un ratolí de bola per controlar el zoom o rebre notificacions amb veu sintetitzada, per exemple per anunciar automàticament la vostra posició." + Fa disponible directament des OsmAnd les característiques d\'accessibilitat del dispositiu. Us permet, per exemple, ajustar la velocitat de la veu sintetitzada, configurar la navegació amb cursors, utilitzant un ratolí de bola per controlar el zoom o rebre notificacions amb veu sintetitzada, per exemple per anunciar automàticament la vostra posició. Gestor de connectors Cerca de PDI (punt d\'interès) Gestor de connectors @@ -351,55 +351,38 @@ Carpeta d\'emmagatzematge de dades OsmAnd (OSM Automated Navigation Directions) \n -\n \nOsmAnd és una aplicació de navegació feta amb programari de codi obert amb accés a una gran varietat de dades globals d\'OSM. Totes les dades dels mapes (siguin mapes vectorials o de tessel·les), es poden desar a la targeta de memòria del telèfon pel seu en desconnexió. També calcula rutes, amb connexió o sense, incloent l\'orientació per veu. \n -\n -\nAlgunes de les característiques principals: -\n -\n- Funcionament complet en desconnexió (desa localment els mapes vectorials i de tessel·les baixats) -\n -\n- Mapes vectorials compactes de tot el món per usar en desconnexió -\n -\n- Baixada de mapes nacionals o regionals directament des de l\'aplicació -\n -\n- Diverses capes de mapes alhora, com traces GPX o de navegació, punts d\'interès, Preferits, parades de transport públic, etc. amb nivell d\'opacitat personalitzada -\n -\n- Cerca, fora de línia, d\'adreces i llocs -\n +\nAlgunes de les característiques principals: +\n- Funcionament complet en desconnexió (desa localment els mapes vectorials i de tessel·les baixats) +\n- Mapes vectorials compactes de tot el món per usar en desconnexió +\n- Baixada de mapes nacionals o regionals directament des de l\'aplicació +\n- Diverses capes de mapes alhora, com traces GPX o de navegació, punts d\'interès, Preferits, parades de transport públic, etc. amb nivell d\'opacitat personalitzada +\n- Cerca, fora de línia, d\'adreces i llocs \n- Càlcul de rutes fora de línia fins per distàncies d\'abast mitjà. +\n- Modalitats opcionals de cotxe, bicicleta i vianant +\n- Canvi automàtic de vista diürna a nocturna +\n- Escala del mapa en funció de la velocitat +\n- Orientació del mapa segons la brúixola o la direcció del moviment +\n- Indicació de carril, velocitat màxima permesa, veus enregistrades i/o sintetitzades \n -\n- Modalitats opcionals de cotxe, bicicleta i vianant +\nLimitacions d\'aquesta versió gratuïta de OsmAnd: +\n- Limitació en el nombre de mapes baixats +\n- No hi ha accés als PDIs de la Viquipèdia sense connexió \n -\n- Canvi automàtic de vista diürna a nocturna -\n -\n- Escala del mapa en funció de la velocitat -\n -\n- Orientació del mapa segons la brúixola o la direcció del moviment -\n -\n- Indicació de carril, velocitat màxima permesa, veus enregistrades i/o sintetitzades -\n -\n -\nLimitacions d\'aquesta versió gratuïta de OsmAnd: -\n -\n- Limitació en el nombre de mapes baixats -\n -\n- No hi ha accés als PDIs de la Viquipèdia sense connexió -\n -\n \nOsmAnd es desenvolupa activament i el nostre projecte i el seu progrés continu depenen de donacions pel desenvolupament i proves de noves funcions. Si us plau, considereu la compra d\'OsmAnd+ o patrocinar una nova característica concreta, o fer una donació genèrica a la pàgina https\\\\osmand.net. - "OsmAnd+ (OSM Automated Navigation Directions) + OsmAnd+ (OSM Automated Navigation Directions) \n \nL\'OsmAnd+ és un programari de navegació de codi obert amb accés a una gran varietat de dades globals de OSM. Totes les dades de mapes (mapes de tessel·les o vectorials) poden emmagatzemar-se a la targeta de memòria del telèfon pel seu ús sense connexió. També proporciona la funcionalitat de càlcul de rutes sigui amb connexió o sense, incloent orientació per veu. \n \nL\'OsmAnd+ és la versió de pagament; comprant-la esteu donant suport al projecte, financeu el desenvolupament de noves funcions i rebreu les darreres actualitzacions. \n \nAlgunes de les característiques centrals són: -\n- Funcionalitat completa fora de línia (desa en el dispositiu d\'emmagatzemament els mapes vectorials i de mosaic baixats) +\n- Funcionalitat completa fora de línia (desa en el dispositiu d\'emmagatzemament els mapes vectorials i de mosaic baixats) \n- Mapes vectorials compactes de tot el món disponibles \n- Baixada il·limitada de mapes nacionals o regionals directament des de l\'aplicació \n- Disponibilitat sense connexió dels PDI baixats prèviament de Viquipèdia, ideal per fer turisme -\n- Possibilitat de superposar diverses capes de mapes simultànies, com traces GPX o de navegació, Punts d\'interès, Favorits, corbes de nivell, parades de transport públic, mapes addicionals amb nivell de transparència ajustable +\n- Possibilitat de superposar diverses capes de mapes simultànies, com traces GPX o de navegació, Punts d\'interès, Favorits, corbes de nivell, parades de transport públic, mapes addicionals amb nivell de transparència ajustable \n \n- Cerca fora de línia d\'adreces i llocs (PDIs) \n- Càlcul de rutes fora de línia per distàncies d\'abast mitjà @@ -408,7 +391,7 @@ \n- Escala automàtica del mapa segons la velocitat \n- Orientació del mapa segons la brúixola o la direcció del moviment \n- Indicacions de carril, velocitat màxima permesa, veus enregistrades i sintetitzades -\n" +\n Seleccioneu el nivell mínim de zoom per mostrar el mapa si està disponible. Caldrà el fitxer SRTM separat: Aquest connector mostra la configuració de característiques per al desenvolupament i depuració com la verificació o simulació de rutes, el rendiment del renderitzat o les indicacions de veu. Aquestes configuracions s\'adrecen a desenvolupadors i no són d\'utilitat per a un usuari normal. En consonància amb la configuració del sistema Android @@ -578,7 +561,7 @@ Mapa superposat Temps de sincronització del mapa seguint la nova posició. Mapa de fons - Escolliu mapa de fons. + Escolliu mapa de fons Escolliu el mapa superposat Llengua de visualització de l\'aplicació (s\'actualitzarà quan reinicieu OsmAnd). ft @@ -605,7 +588,7 @@ El mateix que el dispositiu Afegir nova regla No hi ha dades PDI fora de linía per a aquesta area - "No s\'ha pogut actualitzar la llista local de PDIs" + No s\'ha pogut actualitzar la llista local de PDIs. Max. zooms en linía Servei de navegació Baixant llista de les regions disponibles… @@ -641,7 +624,7 @@ Edita el PDI Elimina el PDI Crea un PDI - "Gràcies per utilitzar l\'OsmAnd. Baixeu informació regional fora de línia a través de \'Configuració\' → \'Gestió de fitxers de mapes\' per veure mapes, situar adreces, buscar els PDIs, trobar transports públics i més." + Gràcies per utilitzar l\'OsmAnd. Baixeu informació regional fora de línia a través de \'Configuració\' → \'Gestió de fitxers de mapes\' per veure mapes, situar adreces, buscar els PDIs, trobar transports públics i més. El mapa mundial de fons necessari per les funcionalitats bàsiques està a la cua de baixades. Mostra paràmetres per activar el seguiment i la navegació en procés de fons mitjançant l\'activació periòdica del dispositiu GPS (amb la pantalla apagada). Preferències relatives a l\'accessibilitat. @@ -690,7 +673,7 @@ Seleccioneu un paquet de guiatge de veu Ajusteu el criteri de commutació entre el mode nocturn i el diürn. Aquest mapa podria no haver-se baixat - No s\'ha pogut dibuixar l\'àrea triada + No s\'ha pogut dibuixar l\'àrea triada. Utilitza la ubicació… El renderitzador s\'ha carregat No hi ha punts Preferits @@ -701,8 +684,8 @@ Transport públic Emergències Restaurants - "Permet fer contribucions a OSM com la creació o modificació de PDIs d\'OSM, obrir o comentar anotacions OSM i aportar fitxers enregistrats GPX amb OsmAnd en subministrar el vostre usuari i contrasenya. OpenStreetMap.org és un projecte gestionat per una comunitat, de domini públic i de cartografia global." - "La llengua seleccionada no està suportada per el motor de TTS (text a veu) d\'Android instal·lat, s\'usarà la llengua del TTS per defecte. Voleu buscar un altre motor TTS a la botiga\?" + Permet fer contribucions a OSM com la creació o modificació de PDIs d\'OSM, obrir o comentar anotacions OSM i aportar fitxers enregistrats GPX amb OsmAnd en subministrar el vostre usuari i contrasenya. OpenStreetMap.org és un projecte gestionat per una comunitat, de domini públic i de cartografia global. + La llengua seleccionada no està suportada per el motor de TTS (text a veu) d\'Android instal·lat, s\'usarà la llengua del TTS per defecte. Voleu buscar un altre motor TTS a la botiga\? Comparteix l\'ubicació usant Format de mapa «{0}» obsolet, no s\'admet Màxim zoom en precàrrega @@ -711,7 +694,7 @@ Resultats de transport ({0} al destí): La llibreria seleccionada de missatges de veu no està disponible Esperant el senyal… - No es pot canviar el format d\'horaris d\'obertura + No es pot canviar el format d\'horaris d\'obertura. prioritza distancia Aplicació de navegació OsmAnd Accediu a diferents tipus de mapa (anomenats de tessel·les o de bits), des de les tessel·les predefinides d\'OSM (com Mapnik) a imatges de satèl·lit i capes específiques com mapes meteorològics, climàtics, geològics, de relleu, etc. @@ -793,7 +776,7 @@ Objectiu El filtre \'%1$s\' s\'ha eliminat Les dades dels PDI s\'han actualitzat (se n\'han carregat {0}) - No s\'han pogut carregar dades del servidor + No s\'han pogut carregar dades del servidor. Acostar el zoom us permet actualitzar els PDIs Voleu actualitzar les dades locals des d\'Internet? Edificis: {0}, {1}, {2} @@ -814,7 +797,7 @@ Voleu eliminar aquest filtre\? Sense ruta Àudio de trucada telefònica (interrupció de la música Bluetooth del cotxe) - "Habiliteu el connector \"Enregistrament de ruta\" per utilitzar els serveis de registre d\'ubicació (enregistrament GPX, seguiment en directe)" + Habiliteu el connector \"Enregistrament de ruta\" per utilitzar els serveis de registre d\'ubicació (enregistrament GPX, seguiment en directe) Habiliteu el GPS a les preferències L\'aplicació ZXing Barcode Scanner no està instal·lada. La voleu cercar a Google Play? Esquema de color de carreteres @@ -875,7 +858,7 @@ peces Línies de nivell Corbes de nivell - "Carreteres " + Carreteres Mapes estàndards No mostris els límits administratius regionals (nivells 5 a 9). Límit de velocitat @@ -918,7 +901,7 @@ Espera màxima per corregir Dades d\'àudio/vídeo Esteu segur què voleu aturar la navegació? - "N\'esteu segur que voleu eliminar la vostra destinació (i les vostres fites)?" + N\'esteu segur que voleu eliminar la vostra destinació (i les vostres fites)\? Mostra Fotografia %1$s %2$s Fes una fotografia @@ -1091,9 +1074,9 @@ Info depuració FPS Ordre optimitzat de les fites de la ruta fins a la destinació. Creació d\'itineraris prement el mapa o utilitzant o modificant fitxers GPX existents, per planificar un trajecte i mesurar la distància entre punts. El resultat es pot desar com un fitxer GPX que podreu usar més endavant com una referència. - "Des de la versió 4.4 d\'Android (KitKat) no podeu baixar i actualitzar els mapes en l\'antiga carpeta (%s). Voleu copiar tots els fitxers de l\'OsmAnd a la nova destinació? -\n Nota 1: Els vostres fitxers obsolets quedaran intactes (els podeu esborrar manualment). -\n Nota 2: En el nou lloc d\'emmagatzemament no serà possible compartir fitxers entre l\'OsmAnd i l\'OsmAnd+." + Des de la versió 4.4 d\'Android (KitKat) no podeu baixar i actualitzar els mapes en l\'antiga carpeta (%s). Voleu copiar tots els fitxers de l\'OsmAnd a la nova destinació\? +\n Nota 1: Els vostres fitxers obsolets quedaran intactes (els podeu esborrar manualment). +\n Nota 2: En el nou lloc d\'emmagatzemament no serà possible compartir fitxers entre l\'OsmAnd i l\'OsmAnd+. S\'està copiant el fitxer (%s) a la nova destinació… S\'estan copiant els fitxers de dades de l\'OsmAnd a la nova destinació (%s)… S\'estan copiant fitxers de dades de l\'OsmAnd… @@ -1304,7 +1287,7 @@ Als darrers metres Edificis amb colors codificats per tipus Mida d\'imatge de la càmera - Estableix la mida de la imatge de la càmera. + Estableix la mida de la imatge de la càmera Mapa esquemàtic Cotxe Bicicleta @@ -1319,7 +1302,6 @@ Tot Aquest connector activa la funcionalitat d\'enregistrar i desar els vostres trajectes, sigui prement sobre el mapa el giny de gravació GPX, o sigui desant-los tots en un fitxer GPX automàticament. \n -\n \nLes rutes enregistrades es poden compartir amb els vostres amics o aportar-les per ser utilitzades a OSM. Els atletes poden utilitzar els seus registres per monitoritzar els seus entrenaments. Es pot fer una anàlisi bàsica de les rutes directament a OsmAnd com la durada de cada volta, velocitat mitjana, etc., i, per descomptat, es poden analitzar amb eines especialitzades de tercers. Enregistrament de trajectes h @@ -1373,7 +1355,7 @@ Amaga Activa la pantalla Activa la pantalla del dispositiu (si no ho està) en aproximar-se a un gir. - "%1$s necessita aquest permís per la funcionalitat de posar la pantalla en mode d\'estalvi d\'energia." + %1$s necessita aquest permís per la funcionalitat de posar la pantalla en mode d\'estalvi d\'energia. Mai Inici Cerca per @@ -1521,10 +1503,10 @@ No utilitzeu Adreça Aquest connector completa el mapa OsmAnd i la seva navegació en produir mapes nàutics per cabotatge, regates i altres tipus de esports d\'aigua. - -Un complement de mapa específic per OsmAnd us proporcionarà tot tipus de senyals nàutiques i símbols gràfics, per navegació interior o propera a la costa. La descripció de cada senyal de navegació us donarà els detalls que calguin per identificar-les i del seu significat (categoria, forma, color, seqüència, referència, etc.). - -Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aquest connector o canviar a com es desitgi <<Estil del Mapa>> dins <<Configuració del Mapa>>. +\n +\nUn complement de mapa específic per OsmAnd us proporcionarà tot tipus de senyals nàutiques i símbols gràfics, per navegació interior o propera a la costa. La descripció de cada senyal de navegació us donarà els detalls que calguin per identificar-les i del seu significat (categoria, forma, color, seqüència, referència, etc.). +\n +\nPer retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aquest connector o canviar a com es desitgi <<Estil del Mapa>> dins <<Configuració del Mapa>>. Aquest connector per l\'OsmAnd us proporciona els detalls de les pistes d\'esquí en baixada, de travessa i alpí així com de telefèrics i remuntadors a tot el món. Les rutes i pistes es mostren amb el codi de colors que els correspon segons la seva dificultat i amb un estil de mapa especial «Hivern» que s\'associa a un paisatge nevat. \n \nEn activar aquests canvis de visualització l\'estil del mapa canvia a «Hivern i esquí», i es mostren totes les característiques del paisatge a l\'hivern. Aquesta vista es pot revertir tant en activar-la altra cop com en canviar-la a «Estil del mapa» dins «Configuració del mapa». @@ -1712,7 +1694,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu Utilitzeu un nom de categoria que encara no existeixi. Nom de categoria Afegeix una nova categoria - "El mapa restringit a carreteres no cal, donat que ja teniu el mapa estàndard (complet). Que baixi igualment?" + El mapa restringit a carreteres no cal, donat que ja teniu el mapa estàndard (complet). Que baixi igualment\? %1$.1f de %2$.1f MB %.1f MB Actualitzeu tot (%1$s MB) @@ -1729,7 +1711,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu El mapa de %1$s està a punt per ser utilitzat. Mostra el mapa El mapa base mundial (d\'abast mundial i poc detall) no es troba o està caducat. Considereu baixar-lo per una tenir una perspectiva global. - Si es desactiva s\'engega amb la pantalla del mapa. + «Desactivat» inicia el mapa directament. Indiqueu el nom del país Pujada S\'ha creat un PDI a OSM @@ -1929,11 +1911,10 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu Marcadors actius Marcadors de mapa Marcador de mapa - El nom de fitxer inclou un caràcter il·legal + Caràcter il·legal en el nom del fitxer Afegiu els marcadors de mapa amb el mapa Aquesta subscripció permet actualitzacions horàries de tots els mapes del món. \nPart dels ingressos es retornen a la comunitat OSM en retribuir cada contribució OSM. -\n \nSi aprecieu OsmAnd i OSM i els voleu recolzar mentre l\'utilitzeu, aquesta és la via perfecta per fer-ho. Pugeu la vostra nota OSM anònimament o utilitzant el vostre perfil OpenStreetMap.org. Afegeix un lapse de temps @@ -2020,7 +2001,7 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu És necessari per baixar mapes. Cercant la localització… Espai lliure - "Magatzem de dades d\'OsmAnd (per mapes, fitxers GPX, etc.): %1$s." + Magatzem de dades d\'OsmAnd (per mapes, traces, etc.): %1$s. Autoritza Permet accedir a la localització Troba la meva localització @@ -2180,11 +2161,11 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu S\'ha canviat el mapa de fons a \"%s\". Codi de localització obert OLC no vàlid - +\n OLC curt -Proporcioneu el codi complet - OLC complet vàlid -Abasta l\'àrea: %1$s x %2$s +\nProporcioneu el codi complet + OLC complet vàlid +\nRepresenta l\'àrea: %1$s x %2$s Un botó per paginar la llista que segueix. Divisió automàtica de les gravacions un cop aturades Comença un nou segment desprès de 6 min d\'interrupció, una traça nova si es superen les 2 hores o un nou fitxer si encara dura més i ha canviat la data. @@ -2241,7 +2222,7 @@ Abasta l\'àrea: %1$s x %2$s \n Gaudiu del guiatge visual i de veu, representant PDIs (punts d\'interès), creant i gestionat traces GPX, activant la representació de corbes de nivell i d\'informació d\'elevació (requereix connector), optant entre els modes de conducció amb vehicle, bicicleta o com vianant, editant d\'OSM i molt més. Recupera les compres Tipus de lletra - Navegació GPS + Navegació GPS \n• Trieu el mode desconnectat (no hi hauran càrrecs de roaming si sou a l\'estranger) o el mode en línia (més àgil) \n• El guiatge de veu gir-a-gir us dirigeix pel camí (veus enregistrades i sintètiques) \n• La ruta es tornarà a calcular si us desvieu de la proposta anterior @@ -2251,7 +2232,8 @@ Abasta l\'àrea: %1$s x %2$s \n• L\'escala del mapa s\'ajusta a la vostra velocitat \n• Cerca de destinacions per adreça, tipus (p. ex.: Aparcament, restaurant, hotel, gasolinera, museu), o per les coordenades geogràfiques \n• Gestiona punts de pas en el vostre itinerari -\n• Enregistreu la vostra o baixeu una traça GPX i seguiu-la +\n• Enregistreu la vostra o baixeu una traça GPX i seguiu-la +\n Esquí \nEl connector de mapes d\'esquí d\'OsmAnd us permet veure les pistes segons la seva dificultat i d\'altres informacions addicionals, com ara la ubicació dels ascensors i altres equipaments. Ciclisme @@ -2265,11 +2247,13 @@ Abasta l\'àrea: %1$s x %2$s \n• La Viquipèdia, en el vostre idioma preferit, us pot ajudar molt visitant una ciutat \n• Parades de transport públic (autobús, tramvia, tren), incloent-hi noms de línia, suport per la navegació en una ciutat nova \n• La navegació GPS en mode vianant genera la vostra ruta per on pugueu passar -\n•Baixeu i seguiu una traça GPX o enregistreu i compartiu la vostra - "Col·laboreu amb Openstreetmap (OSM) +\n• Baixeu i seguiu una traça GPX o enregistreu i compartiu la vostra +\n + Col·laboreu amb Openstreetmap (OSM) \n• Informant de dades errònies \n• Pujant traces GPX a OSM directament des de l\'aplicació -\n• Afegint PDIs i penjar-los a OSM directament (o més tard si no esteu connectats)" +\n• Afegint PDIs i penjar-los a OSM directament (o més tard si no esteu connectats) +\n Analitza en el mapa Visible OsmAnd es de codi obert i s\'està desenvolupant activament. Tothom pot contribuir a l\'aplicació informant d\'errors, millorant traduccions o aportant codi de noves característiques. A més, el projecte es recolza en contribucions econòmiques per finançar la programació i les proves de noves funcionalitats. @@ -2329,14 +2313,16 @@ Abasta l\'àrea: %1$s x %2$s \n• Compartiu la vostra ubicació perquè els vostres amics us puguin trobar \n• Conserveu els vostres llocs més importants a \'Preferits\' \n• Us permet escollir com es mostrar els noms al mapa: en anglès, la lengua local o amb ortografia fonètica -\n• Mostra representacions especialitzades disponibles a la xarxa, imatges de satèl·lit (Bing), diferents superposicions com traces GPX d\'exploració/navegació i capes addicionals amb un grau transparència variable +\n• Mostra representacions especialitzades disponibles a la xarxa, imatges de satèl·lit (Bing), diferents superposicions com traces GPX d\'exploració/navegació i capes addicionals amb un grau transparència variable +\n Navegació \n• Funciona en línia (ràpid) o sense connexió (sense càrrecs de roaming quan sigueu a l\'estranger) \n• Indicacions de veu a cada gir (amb missatges gravats i sintetitzats) \n• Orientació opcional del carril, visualització del nom de la via i el temps estimat d\'arribada \n• Admet punts de pas intermedis \n• Revisió automàtica de la ruta quan us aparteu de la ruta proposada -\n• Cerca de llocs per adreça, tipus (per exemple: restaurant, hotel, gasolinera, museu) o coordenades geogràfiques +\n• Cerca de llocs per adreça, tipus (per exemple: restaurant, hotel, gasolinera, museu) o coordenades geogràfiques +\n OsmAnd + (OSM Automated Navigation Directions) és una aplicació per consulta de mapes i de navegació, amb accés a les dades obertes d\'OSM, d\'abast mundial i gran qualitat. \nFruïu la navegació amb indicacions visuals i de veu, mostrant PDIs (punts d\'interès), creant i gestionant traces GPX, disposant de corbes de nivell i cotes puntuals, seleccioneu la navegació per vehicle, bicicleta o com a vianant, editeu OSM i molt més. \n @@ -2367,24 +2353,25 @@ Abasta l\'àrea: %1$s x %2$s \n• Mapes vectorials compactes en local que s\'actualitzen un cop al mes, com a mínim \n \n• Opció entre dades completes d\'una regió o només la xarxa viària (Exemple: tot el Japó ocupa 700 MB però només 200 MB per a la xarxa viària) - "Característiques de seguretat + Característiques de seguretat \n• Canvi automàtic entre el mode diürn/nocturn (opcional) \n• Indicacions del límit de velocitat i notificació d\'excés (opcional) -\n• Escala en funció de la velocitat (opcional) -\n• Si compartiu la vostra ubicació, els vostres amics us podran trobar" +\n• Escala en funció de la velocitat (opcional) +\n• Si compartiu la vostra ubicació, els vostres amics us podran trobar +\n Característiques per ciclistes i vianants \n• Visualització de vies per vianants, senderisme i carrils bici, ideal per activitats a l\'aire lliure \n• Representació i navegació a mida per ciclistes i vianants \n• Indicació opcional de les parades del transport públic (autobús, tramvia, tren), incloent-hi noms de línia \n• Enregistrament opcional del trajecte en un fitxer GPX local o a un servei a la xarxa \n• Indicació opcional de la velocitat i l\'altitud • Visualització de corbes de nivell i ombrejat de relleu (requereix connector) - "Col·laboreu directament a OSM + Col·laboreu directament a OSM \n• Notifiqueu errors en les dades \n• Pugeu traces GPX directament a OSM des de l\'aplicació \n• Afegiu PDIs i pugeu-los OSM (o feu-ho més tard si no esteu connectats) -\n• Enregistrament opcional del trajecte, també en segon pla (mentre el dispositiu està bloquejat) +\n• Enregistrament opcional del trajecte, també en segon pla (mentre el dispositiu està bloquejat) \nOsmAnd és un programari de codi obert que es desenvolupa activament. Tothom pot recolzar l\'aplicació informant d\'errors, millorant traduccions o programant noves característiques. El projecte també es fonamenta en les aportacions econòmiques per patrocinar la programació i validació de noves funcionalitats. -\n" +\n Visió general Anima la pròpia posició Activa el desplaçament animat del mapa de \'La meva posició\' durant la navegació. @@ -2587,7 +2574,7 @@ Abasta l\'àrea: %1$s x %2$s Mostra una línia de direcció entre la vostra ubicació i les dels marcadors actius. Mostra una o dues fletxes indicant la direcció dels marcadors actius. Seleccioneu com indicar la distància als marcadors actius. - Indiqueu el nombre d\'indicadors de direcció: + Indiqueu el nombre d\'indicadors de direcció. Més Cercant traces amb fites Crea o modifica objectes OSM @@ -2646,14 +2633,14 @@ Abasta l\'àrea: %1$s x %2$s Copia nom d\'ubicació/PDI Ubicació sense nom Mostra notes amagades - Mostra/amaga notes OSM en el mapa. + Mostra o amaga notes OSM en el mapa. GPX - adient per exportar-lo a JOSM o a altres editors d\'OSM. OSC - adient per exportar-lo a OSM. Arxiu GPX Arxiu OSC Seleccioneu el tipus de fitxer Exportació com notes d\'OSM, PDIs o les dues coses. - "Totes les dades" + Totes les dades Notes OSM Túnel encarat Túnels @@ -2677,7 +2664,7 @@ Abasta l\'àrea: %1$s x %2$s O S N - "Nom opcional del punt " + Nom opcional del punt Rutes properes a dins A dins Introduïu el nom del fitxer. @@ -2755,7 +2742,7 @@ Abasta l\'àrea: %1$s x %2$s Viquipèdia sense connexió Mapes amb corbes de nivell i ombrejat de relleu Desbloca totes les funcions de OsmAnd - "Viquiviatges " + Viquiviatges Articles de Viquiviatges d\'arreu Obre l\'enllaç en línia de Viquipèdia L\'enllaç s\'obrirà en el vostre navegador. @@ -2865,7 +2852,7 @@ Abasta l\'àrea: %1$s x %2$s Subscripcions Només mostra imatges de 360º Arrenca - "Esteu utilitzant el mapa {0} mitjançant OsmAnd. Voleu iniciar la versió sencera d\'OsmAnd \?" + Esteu utilitzant el mapa {0} mitjançant OsmAnd. Voleu iniciar la versió sencera d\'OsmAnd \? Voleu iniciar OsmAnd\? Guaraní Un botó per canviar entre els modes diürn i nocturn d\'OsmAnd. @@ -3088,7 +3075,7 @@ Abasta l\'àrea: %1$s x %2$s Navegació de tercers Seleccioneu els perfils que voleu que es mostrin a l\'aplicació. Perfils d\'aplicació - Esquí alpí/descens + Esquí alpí i de descens Servei de baixades d\'OsmAnd Magenta Icona @@ -3157,7 +3144,7 @@ Abasta l\'àrea: %1$s x %2$s Utilitza el sensor de proximitat Bicicleta de muntanya, ciclomotor, cavall BRouter (fora de línia) - Esquí nòrdic o de fons + Esquí nòrdic i de fons Pistes per a esquí nòrdic o de fons. Permet les rutes avançades Rutes difícils, amb obstacles perillosos i seccions amb pendents fortes. @@ -3207,8 +3194,8 @@ Abasta l\'àrea: %1$s x %2$s Per defecte Occità Camioneta descoberta - "Ruta: distància %s, durada %s -\nCàlcul: %.1f s, %d vies, %d tessel·les)" + Ruta: distància %s, durada %s +\nCàlcul: %.1f s, %d vies, %d tessel·les) Dia Dies Dies @@ -3375,7 +3362,7 @@ Abasta l\'àrea: %1$s x %2$s Bescanvia %1$s i %2$s Punt d\'inici La traça s\'ha desat - No hi ha nom de fitxer + Nom de fitxer buit Reverteix Voleu netejar %1$s\? Diàlegs i notificacions @@ -3567,7 +3554,7 @@ Abasta l\'àrea: %1$s x %2$s Un botó per mostrar o amagar la capa de terreny al mapa. Mostra el terreny Amaga el terreny - Mostra/amaga el relleu + Mostra o amaga el relleu Ombrejat del relleu Llegenda Nivells de zoom @@ -3741,11 +3728,11 @@ Abasta l\'àrea: %1$s x %2$s Compres OsmAnd Perfils de navegació Amaga el transport públic - Mostra/amaga el transport públic + Mostra o amaga el transport públic Botó que mostra o oculta el transport públic al mapa. - Crea / Edita PDI + Crea o edita PDI Posicions d’aparcament - Afegeix / Edita Preferits + Afegeix o edita preferit Restableix la ordenació dels elements predeterminats Torna a l\'edició A cada instrucció de navegació s\'activarà la pantalla. @@ -3835,7 +3822,7 @@ Abasta l\'àrea: %1$s x %2$s Botó d\'activació • S\'ha actualitzat la funció Planifica una ruta: permet utilitzar diferents tipus de navegació per segments i afegir traces \n -\n • Nou menú Aspecte per les traces: seleccioneu color, gruix, representació de les fletxes de direcció, icones inici/fi +\n • Nou menú Aspecte per les traces: seleccioneu color, gruix, representació de les fletxes de direcció, icones d\'inici i final \n \n • S\'ha millorat la visibilitat dels nodes ciclistes. \n @@ -3858,7 +3845,7 @@ Abasta l\'àrea: %1$s x %2$s Desenvolupament %1$s — %2$s Canvieu el càlcul de rutes de Transport Public a Java (segur) - Icones d\'Inici/Final + Icones d\'inici i final Gràcies per comprar \'Corbes de nivell\' Evita els camins per a vianants Evita els camins per a vianants @@ -3868,7 +3855,7 @@ Abasta l\'àrea: %1$s x %2$s Inicieu la sessió mitjançant OAuth per fer servir les funcionalitats osmedit Inicieu la sessió via OAuth Neteja el testimoni OAuth d\'OpenStreetMap - La sessió s\'ha tancat correctament + Sessió tancada El fitxer ja s\'ha importat a OsmAnd Mapes locals Especial @@ -3881,4 +3868,5 @@ Abasta l\'àrea: %1$s x %2$s Discontinu Proporcioneu la llargada del vostre vehicle, pot haver-hi rutes restringides als vehicles llargs. No s\'ha generat correctament l\'arxiu GPX. Indiqueu-ho a l\'equip de suport per continuar investigant. + Enregistra automàticament la traça durant la navegació \ No newline at end of file From 01a133c2e512f304fff6d7294c36b6aefd73b579 Mon Sep 17 00:00:00 2001 From: ssantos Date: Sat, 21 Nov 2020 15:32:38 +0000 Subject: [PATCH 160/198] Translated using Weblate (Portuguese) Currently translated at 99.2% (3538 of 3564 strings) --- OsmAnd/res/values-pt/strings.xml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index 5cef9b374a..07c9e35cd1 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -3973,11 +3973,11 @@ Rastreável significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de rastreamento a partir dele ainda estarão disponíveis através da API pública do GPS com carimbos de tempo. Outros utilizadores só poderão descarregar pontos de rastreamento processados do seu rastreamento que não podem ser associados diretamente a si. Fechar nota do OSM Comentário de nota do OSM - Pode entrar a usar o método seguro OAuth ou usar o seu login e palavra-passe. + Faça login a usar o método seguro OAuth ou use o seu nome de utilizador e a palavra-passe. Adicionar fotos Cadastre-se em \nOpenPlaceReviews.org - As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site. + Faça login no site do projeto de dados abertos OpenPlaceReviews.org para enviar ainda mais fotos. Criar uma conta Já tenho uma conta Histórico de pesquisa @@ -3989,4 +3989,10 @@ Necessário para a importação O seu aparelho só tem %1$s livre. Por favor, libere algum espaço ou desmarque alguns itens para exportar. Não há espaço suficiente + Adicionar ao Mapillary + Adicionar ao OpenPlaceReviews + OsmAnd mostra fotos de várias fontes: +\nOpenPlaceReviews - fotos de POI; +\nMapillary - imagens ao nível da rua; +\nWeb / Wikimedia - fotos de POI especificadas nos dados do OpenStreetMap. \ No newline at end of file From bcbbcbd2ad40763b67326306124b2ce2a256fc59 Mon Sep 17 00:00:00 2001 From: nyqvist Date: Sat, 21 Nov 2020 16:22:28 +0000 Subject: [PATCH 161/198] Translated using Weblate (Swedish) Currently translated at 60.9% (2174 of 3564 strings) --- OsmAnd/res/values-sv/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index a1bda1b036..c6cd3aca26 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -2842,7 +2842,7 @@ Vänligen tillhandahåll fullständig kod Mjuk Ytfasthet %s är sparat - Öppet spår + Öppna spår Spår %s är sparat Ta bort mellanrum Överväg tillfälliga begränsningar From 3a39f54cb7a3e3b4b266a2a5804c893f44c7d0d3 Mon Sep 17 00:00:00 2001 From: Samantaz Fox Date: Sun, 22 Nov 2020 18:01:00 +0000 Subject: [PATCH 162/198] Translated using Weblate (French) Currently translated at 99.8% (3558 of 3564 strings) --- OsmAnd/res/values-fr/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 189f7afc8e..0bdf9963e6 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -695,7 +695,7 @@ Dès que possible Public Identifiable - Suivi + Traçable Privé Récupérer le véhicule au parking Avertissement @@ -3951,8 +3951,8 @@ Connectez-vous pour envoyer vos modifications, \n \nsoit avec OAuth soit avec votre identifiant et mot de passe. - Vous pouvez vous connecter avec la méthode sécurisée OAuth ou utiliser votre identifiant et votre mot de passe. - Les photos sont fournies par le projet open data OpenPlaceReviews.org. Pour envoyer vos photos, vous devez au préalable être inscrit sur ce site Web. + Connectez-vous avec la méthode sécurisée OAuth ou utilisez votre identifiant et votre mot de passe. + Connectez-vous au site web du projet OpenPlaceReviews.org pour ajouter des photos. Historique de recherche Kayak Votre appareil n\'a que %1$s disponible. Veuillez libérer de l\'espace ou désélectionner l\'export pour certains éléments. From 964dd69846170e717f9de1cf614d4db1e9799d72 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sat, 21 Nov 2020 22:23:22 +0000 Subject: [PATCH 163/198] Translated using Weblate (French) Currently translated at 99.8% (3558 of 3564 strings) --- OsmAnd/res/values-fr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 0bdf9963e6..49838f2f3c 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3964,4 +3964,8 @@ L\'espace disponible est insuffisant Ajouter à Mapillary Ajouter à OpenPlaceReviews + OsmAnd affiche des photos de plusieurs sources : +\nOpenPlaceReviews : photos de PI ; +\nMapillary : photos de rue ; +\nWeb / Wikimedia : photos de PI réféfencés dans OpenStreetMap. \ No newline at end of file From fe591a62ba9fce20fa97b5a74354a62e62410142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Sun, 22 Nov 2020 10:30:16 +0000 Subject: [PATCH 164/198] Translated using Weblate (Turkish) Currently translated at 100.0% (3564 of 3564 strings) --- OsmAnd/res/values-tr/strings.xml | 80 +++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 26 deletions(-) diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index 0f284bf937..4ef8de0e10 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -535,7 +535,7 @@ Floresan üst katmanlar İzlenen yolları ve rotaları görüntülemek için floresan renkler kullan. Çevrim dışı düzenleme - Her zaman çevrim dışı düzenlemeyi kullanın. + Çevrim dışı düzenleme etkinleştirilirse, değişiklikler önce yerel olarak kaydedilecek ve istek üzerine karşıya yüklenecek, aksi takdirde değişiklikler hemen karşıya yüklenecek. Uygulama içinde POI değişiklikleri indirilen harita dosyalarını etkilemez, bunun yerine değişiklikler cihazınızda bir dosya olarak kaydedilir. Yükleniyor… {0} POI/not karşıya yüklendi @@ -1236,7 +1236,7 @@ Vazgeç seçili Seçimini kaldırın - Tüm Seçimleri Kaldır + Tüm seçimleri kaldır Daralt İzlenen yollar Şu anda kaydedilen yol @@ -1854,7 +1854,7 @@ Şunun için rapor Veri mevcut değil Durum - Değişiklikleri Kaydet + Değişiklikleri kaydet E-posta adresi Yeraltı nesneleri Devamını oku @@ -1943,7 +1943,7 @@ Uygulamanın şimdi harici depolamaya yazma izni var, ancak bunu yapmak için yeniden başlatılması gerekir. Tam rapor OSM kullanıcı adı ve parolası - Dosya adı geçersiz karakter içermektedir + Dosya adında geçersiz karakter 7/24 açık Bellek kartı Koordinat biçimi @@ -2805,7 +2805,7 @@ POI etiketleri Yarın şu saatte açılıyor Kapalı notları göster - Haritada OSM notlarını göster/gizle. + Haritada OSM notlarını göster veya gizle. GPX - JOSM veya diğer OSM düzenleyicilerine aktarmak için uygundur. OSC - OSM\'ye aktarmak için uygundur. OSC dosyası @@ -3156,7 +3156,7 @@ Sık Kullanılanları içe aktarın veya haritadaki noktaları işaretleyerek ekleyin. GPX dosyasını içe aktar %1$s dosyası ara noktalar içermiyor, izlenen yol olarak içe aktar\? - Hareket Noktası + Noktayı Taşı OSM alıcıları Toplam bağış kapalı @@ -3186,9 +3186,9 @@ Gündüz/gece modunu değiştir Parke veya kaldırım taşı yok \'Hızlı eylem\' ayarlarında listeye en az bir öge ekleyin - Alp/yokuş aşağı kayak + Alp ve yokuş aşağı kayak Alp veya yokuş aşağı kayak ve kayak teleferiklerine erişim için yamaçlar. - Kros/İskandinav kayak + Kros ve İskandinav kayak İskandinav veya kros kayağı pistleri. Kayak turu Kayak turu rotaları. @@ -3322,7 +3322,7 @@ Başlangıç noktası Bilinmeyen yol türleri için varış zamanını tahmin eder ve tüm yollar için hızı sınırlar (güzergahı etkileyebilir) Yol izi kaydedildi - Dosya adı boş + Boş dosya adı Eski haline döndür Ekranın, kalkış noktasını ortalamasını sağlamak için bir düğme. Daha sonra hedef belirlemeyi veya rota hesaplamasını tetiklemeyi isteyecektir. Düğüm ağı bisiklet rotalarını göster @@ -3384,7 +3384,7 @@ Kullanıcı adı ve parola Bu eklenti ayarları geneldir ve tüm profiller için geçerlidir OSM düzenleme - Yüklenmemiş tüm düzenlemelerinizi veya OSM hatalarınızı %1$s\'de görüntüleyebilirsiniz. Karşıya yüklenen noktalar OsmAnd\'da gösterilmez. + Henüz karşıya yüklenmemiş tüm düzenlemelerinizi veya OSM hatalarınızı %1$s\'de görüntüleyebilirsiniz. Karşıya yüklenen noktalar OsmAnd\'da gösterilmez. OSM Navigasyon sırasında veya harekete halindeyken gösterilen simge. Dinlenme anında gösterilen simge. @@ -3495,7 +3495,7 @@ Hepsini değiştir Her ikisini de sakla İçe aktarılan ögelere ön ek eklenecek - OsmAnd\'da içe aktarılanlarla aynı isme sahip ögeler zaten var. + OsmAnd\'da içe aktarılanlarla aynı ada sahip ögeler zaten var. \n \nBir eylem seçin. Bazı ögeler zaten var @@ -3532,7 +3532,7 @@ Güzergahtan geçerli konuma olan mesafe seçilen değerden fazla ise güzergah yeniden hesaplanacaktır. %1$s / %2$s Yamaçlar - Araziyi göster / gizle + Araziyi göster veya gizle Araziyi gizle Araziyi göster Haritada arazi katmanını göstermek veya gizlemek için bir düğme. @@ -3650,11 +3650,11 @@ Bu eylemlere “%1$s” düğmesine dokunarak erişebilirsiniz. Toplu taşıma araçlarını gizle Toplu taşıma araçlarını göster - Toplu taşıma araçlarını göster/gizle + Toplu taşıma araçlarını göster veya gizle Haritada toplu taşıma araçlarını gösteren veya gizleyen düğme. - POI Oluştur / Düzenle + POI oluştur veya düzenle Park etme alanları - Sık Kullanılan Ekle / Düzenle + Sık kullanılan ekle veya düzenle Öntanımlı öge sıralamasını geri yükle Düzenlemeye geri dön Eylem düğmesi seçilen profiller arasında geçiş yapar. @@ -3779,7 +3779,7 @@ Bitti Yolun üzerine yaz Ardından, bu seçeneği kullanmak için navigasyon profillerinizden biriyle izlenen yolunuzu izin verilen en yakın yola tutturun. - Yeni bir yol olarak kaydet + Yeni bir izleme olarak kaydet Ters güzergah Tüm yol, seçilen profil kullanılarak yeniden hesaplanacaktır. Sadece sonraki bölüm, seçilen profil kullanılarak yeniden hesaplanacaktır. @@ -3811,7 +3811,7 @@ Yol dosyası olarak kaydet %s yol dosyası seçildi (Son uygulamalar aracılığıyla) uygulama kapatıldığında yol kaydını duraklatacaktır. (OsmAnd arka plan göstergesi Android bildirim çubuğundan kaybolur.) - Genel yol kaydı için kayıt aralığını seçin (haritadaki seyahat kayıt widget\'ı aracılığıyla etkin). + Genel yol kaydı için kayıt aralığını belirtin (haritadaki \'Seyahat kaydetme\' widget\'ı aracılığıyla açıldı). Seyahat kaydetmeyi duraklat Seyahat kaydetmeyi devam ettir En yakın nokta @@ -3843,7 +3843,7 @@ Basitleştirilmiş yol • Güzergah planlama işlevi güncellendi: her bölüm için farklı navigasyon türlerinin kullanılmasına ve izlenen yolların dahil edilmesine izin veriliyor \n -\n • İzlenen yollar için yeni görünüm menüsü: renk ve kalınlık seçimi, yön oklarının gösterilmesi, başlangıç/bitiş simgeleri +\n • İzlenen yollar için yeni görünüm menüsü: renk ve kalınlık seçimi, yön oklarının gösterilmesi, başlangıç ve bitiş simgeleri \n \n • Bisiklet düğümlerinin görünürlüğü iyileştirildi. \n @@ -3859,7 +3859,7 @@ Son değiştirme İsim: Z – A İsim: A – Z - Başlangıç/bitiş simgeleri + Başlangıç ve bitiş simgeleri \'Eş yükselti eğrileri\'ni satın aldığınız için teşekkürler Abonelik seçilen dönem başına ücretlendirilir. İstediğiniz zaman AppGallery\'den iptal edin. Ödeme, satın alma onaylandığında AppGallery hesabınızdan alınacaktır. @@ -3877,10 +3877,10 @@ Yerel Toplu Taşıma geliştirme Java (güvenli) Toplu Taşıma yönlendirme hesaplamasına geçin Yenilikler - osmedit özelliklerini kullanmak için OAuth oturum açma işlemi gerçekleştirin + osmedit özelliklerini kullanmak için OAuth ile oturum açın OAuth ile oturum aç OpenStreetMap OAuth belirtecini temizle - Oturum kapatma başarılı + Oturum kapatıldı Dosya zaten OsmAnd\'da içe aktarıldı 2 aşamalı A* yönlendirme algoritması kullan Ayrılmış yollar ve parkurlarla kar arabası sürüşü için. @@ -3903,12 +3903,12 @@ Acil Seyahat En az iki nokta eklemelisiniz - OpenStreetMap\'te oturum aç - OpenStreetMap.org\'da oturum aç - Yenilikleri veya değişiklikleri karşıya yüklemek için oturum açmanız gerekir. + OpenStreetMap için oturum aç + OpenStreetMap.org için oturum aç + Yenilikleri veya değişiklikleri karşıya yüklemek için oturum açın, \n -\nGüvenli OAuth yöntemini kullanarak oturum açabilir veya kullanıcı adı ve parolanızı kullanabilirsiniz. - Kullanıcı adı ve parola kullan +\nOAuth ile oturum açabilir veya kullanıcı adı ve parolanızı kullanabilirsiniz. + Kullanıcı adı ve parola ile oturum aç Kullanıcı adı Hesap Aboneliği yönet @@ -3920,4 +3920,32 @@ İşaretleyiciler geçmişi GPX dosyasını OpenStreetMap\'e gönder Virgülle ayrılmış etiketleri girin. + \"Genel\", izlemenin GPS izlerinizde ve genel GPS izleme listelerinde herkese açık olarak ve ham biçimde zaman damgalarıyla birlikte genel izleme listesinde gösterileceği anlamına gelir. API aracılığıyla sunulan veriler, izleme sayfanızı göstermez. İzleme noktası zaman damgaları, genel GPS API\'si aracılığıyla kullanılamaz ve izleme noktaları kronolojik olarak sıralanmaz. + \"Özel\", izlemenin herkese açık herhangi bir listede gösterilmediği, ancak ondan alınan izleme noktalarının zaman damgası olmadan genel GPS API\'si aracılığıyla eşzamanlı olmayan sırada kullanılabileceği anlamına gelir. + \"Teşhis edilebilir\", izlemenin GPS izlerinizde ve genel GPS izleme listelerinde herkese açık olarak gösterileceği anlamına gelir, yani diğer kullanıcılar ham izi indirebilir ve kullanıcı adınızla ilişkilendirebilir. İzleme noktaları API\'si aracılığıyla sunulan GPS API\'sinden alınan herkese açık zaman damgalı izleme noktası verileri, orijinal izleme sayfanızı gösterecektir. + \"Takip edilebilir\", izlemenin herkese açık herhangi bir listede gösterilmediği, ancak (sizinle doğrudan ilişkilendirilemeyen) zaman damgaları olan işlenen izleme noktalarının herkese açık GPS API\'sinden indirmeler yoluyla göründüğü anlamına gelir. + OSM Notunu Kapat + OSM Notuna Yorum Yap + Güvenli OAuth yöntemini kullanarak oturum açın veya kullanıcı adınızı ve parolanızı kullanın. + Fotoğraf ekle + OpenPlaceReviews.org\'a +\nkaydolun + Daha da fazla fotoğraf yüklemek için açık veri projesi web sitesi OpenPlaceReviews.org\'da oturum açın. + Yeni hesap oluştur + Zaten bir hesabım var + Arama geçmişi + Kano + Motorlu tekne + Mapillary\'ye ekle + OpenPlaceReviews\'a ekle + OsmAnd çeşitli kaynaklardan fotoğraflar gösterir: +\nOpenPlaceReviews - POI fotoğrafları; +\nMapillary - sokak seviyesi görüntüleri; +\nİnternet / Wikimedia - OpenStreetMap verilerinde belirtilen POI fotoğrafları. + Kaynaklar + Yaklaşık dosya boyutu + Dosyaya aktarılacak verileri seçin. + İçe aktarma için gerekli + Aygıtınızda yalnızca %1$s boş alan var. Lütfen biraz alan boşaltın veya dışa aktarılacak bazı ögelerin seçimini kaldırın. + Yeterli alan yok \ No newline at end of file From 5bbbfea687e5f8c394efa3d47b9cf8d46a204ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Babos=20G=C3=A1bor?= Date: Fri, 20 Nov 2020 20:03:00 +0000 Subject: [PATCH 165/198] Translated using Weblate (Hungarian) Currently translated at 99.9% (3563 of 3564 strings) --- OsmAnd/res/values-hu/strings.xml | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index 046855440d..db7ac30daa 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -3917,7 +3917,7 @@ Az OSM-szerkesztési funkciók használatához jelentkezzék be az OAuth segítségével Bejelentkezés OAuth segítségével OpenStreetMap OAuth token törlése - Sikeresen kijelentkezett + Kijelentkezett Kétszakaszos A* útvonaltervezési algoritmus használata A fájl már importálva van az OsmAndba %1$s - %2$s @@ -3951,12 +3951,12 @@ Az OsmAnd Live-előfizetés szünetel Az OsmAnd Live-előfizetés lejárt Probléma van az előfizetésével. A fizetési mód kijavítása érdekében kattintson a gombra a Google Play előfizetési beállításaihoz történő ugráshoz. - Bejelentkezés + Felhasználónév Fiók - Fióknév és jelszó használata - Az új vagy módosított szerkesztések feltöltéséhez be kell jelentkeznie. + Bejelentkezés felhasználónévvel és jelszóval + Új vagy módosított szerkesztések feltöltéséhez jelentkezzék be \n -\nBejelentkezhet a biztonságos OAuth-módszerrel vagy használhatja fióknevét és jelszavát. +\naz OAuth segítségével vagy felhasználónevével és jelszavával. Bejelentkezés OpenStreetMap-fiókkal Bejelentkezés az OpenStreetMapre Bejelentkezés az OpenStreetMap.org-ra @@ -3966,10 +3966,22 @@ Fénykép hozzáadása Regisztráció az \nOpenPlaceReviews.org oldalon - A fényképeket a OpenPlaceReviews.org nyílt adatprojekt biztosítja. Saját fényképei feltöltéséhez be kell jelentkeznie a weboldalon. + Még több fénykép feltöltéséhez jelentkezzék be az OpenPlaceReviews.org nyílt adatprojekt weboldalára. Új fiók létrehozása Már van fiókom Motorcsónak Kajak Keresési előzmények + Források + Hozzáadás a Mapillaryhez + Hozzáadása az OpenPlaceReviewshoz + Az OsmAnd több forrásból jelenít meg fényképeket: +\nOpenPlaceReviews – POI-fotók; +\nMapillary – utcaszintű képek; +\nWeb / Wikimedia – az OpenStreetMap-adatokban meghatározott POI-fotók. + Hozzávetőleges fájlméret + Jelölje ki a fájlba exportálandó adatokat. + Szükséges az importáláshoz + A készülékén csak %1$s szabad hely van. Szabadítson fel valamennyi helyet, vagy szüntesse meg néhány exportálandó elem kijelölését. + Nincs elég hely \ No newline at end of file From 33b3698e720c12040d13f7e03348e7deca2a1adf Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Sun, 22 Nov 2020 18:16:39 +0000 Subject: [PATCH 166/198] Translated using Weblate (Italian) Currently translated at 89.0% (3175 of 3564 strings) --- OsmAnd/res/values-it/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index f7bb74d54c..1f40937ddc 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -3979,4 +3979,16 @@ \"Privato\" significa che la traccia non è visualizzabile in alcuna lista pubblica ma i suoi punti, in ordine non cronologico, sono disponibili attraverso le API GPS senza le informazioni temporali. \"Identificabile\" significa che la traccia è visualizzabile nelle Mie tracce GPS e nelle liste pubbliche, es. gli altri utenti potranno scaricare la traccia grezza e associarla con il tuo nome utente. I punti della traccia, con le loro informazioni temporali, saranno riconducibili, attraverso le API GPS, alla tua traccia originale. \"Tracciabile\" significa che la traccia non è visualizzabile in alcuna lista pubblica, ma solo i suoi punti, processati, con le informazioni temporali (che non possono essere direttamente associati a te) attraverso le API GPS pubbliche. + Aggiungi a Mapillary + Aggiungi a OpenPlaceReviews + OsmAnd mostra foto da più sorgenti: +\nOpenPlaceReviews - foto PDI; +\nMapillary - immagini stradali; +\nWeb / Wikimedia - foto PDI OpenStreetMap. + Risorse + Dimesione approssimativa del file + Seleziona i dati da esportare nel file. + Necessario per l\'importazione + Il tuo dispositivo ha solo %1$s liberi. Libera dello spazio i deseleziona alcune voci da esportare. + Non c\'è abbastanza spazio \ No newline at end of file From 1f9b6d1ee16dce1467187cdbcfcdd918b8d8b0d7 Mon Sep 17 00:00:00 2001 From: cha-tzi Date: Sun, 22 Nov 2020 11:49:11 +0000 Subject: [PATCH 167/198] Translated using Weblate (Greek) Currently translated at 95.2% (3393 of 3564 strings) --- OsmAnd/res/values-el/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index 9ef59f2e76..780a4d0fef 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -3264,7 +3264,7 @@ Οι φωνητικές ανακοινώσεις να γίνονται μόνο κατά την πλοήγηση. Οδηγίες πλοήγησης και ανακοινώσεις Φωνητικές ανακοινώσεις - Οπτικές προειδοποιήσεις + Προειδοποιήσεις οθόνης Ρύθμιση παραμέτρων διαδρομής Παράμετροι διαδρομής Εκτιμά τον χρόνο άφιξης αγνώστων τύπων δρόμων και περιορίζει την ταχύτητα σε όλους τους δρόμους (μπορεί να επηρεάσει τη διαδρομή) From bbbc49d2077ccede726fc64357f24675027bedea Mon Sep 17 00:00:00 2001 From: ace shadow Date: Sat, 21 Nov 2020 22:01:07 +0000 Subject: [PATCH 168/198] Translated using Weblate (Slovak) Currently translated at 99.8% (3560 of 3564 strings) --- OsmAnd/res/values-sk/strings.xml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 2b246edb29..2e0a815d55 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3922,10 +3922,10 @@ Natívna hromadná doprava (vo vývoji) Prepnúť na výpočet trasy hromadnej dopravy v Jave (bezpečné) Čo je nové - Vykonať prihlásenie cez OAuth pre použitie funkcií upravovania OSM + Prihláste sa cez OAuth pre použitie funkcií upravovania OSM Prihlásiť pomocou OAuth Vymazať token OpenStreetMap OAuth - Odhlásenie úspešné + Odhlásené Pre jazdu na snežnom vozidle po na to určených cestách. Súbor je už importovaný v OsmAnd Použiť dvojfázový algoritmus A* na výpočet trasy @@ -3953,13 +3953,13 @@ Predplatné OsmAnd Live skončilo Predplatné OsmAnd Live je pozastavené Predplatné OsmAnd Live je zablokované - Prihlásiť sa do OpenStreetMap - Prihlásiť sa do OpenStreetMap.org - Zaregistrovať sa do OpenStreetMap - Musíte sa prihlásiť pre odoslanie nových alebo zmenených údajov. + Prihlásenie pre OpenStreetMap + Prihlásenie pre OpenStreetMap.org + Prihlásiť sa do OpenStreetMap + Prihláste sa pre odoslanie nových alebo zmenených údajov, \n -\nMôžete sa prihlásiť pomocou bezpečnej metódy OAuth alebo pomocou mena a hesla. - Použiť meno a heslo +\nbuď pomocou metódy OAuth alebo pomocou mena a hesla. + Prihlásiť sa menom a heslom Účet Prihlasovacie meno História značiek @@ -3967,14 +3967,26 @@ Zadajte značky oddelené čiarkou. Zatvoriť OSM poznámku Komentovať OSM poznámku - Môžete sa prihlásiť bezpečnou metódou OAuth alebo použite meno a heslo. + Prihláste sa bezpečnou metódou OAuth alebo použite meno a heslo. Pridať foto Zaregistrovať na \nOpenPlaceReviews.org - Fotografie sú poskytované projektom OpenPlaceReviews.org s otvorenými dátami. Na odoslanie vašich fotiek sa musíte zaregistrovať na webovej stránke. + Prihláste sa na webstránke projektu OpenPlaceReviews.org s otvorenými dátami pre odoslanie ďalších fotografií. Vytvoriť nový účet Už mám účet História hľadania Kajak Motorový čln + Pridať do Mapillary + Pridať do OpenPlaceReviews + OsmAnd szobrazuje fotografie z rôznych zdrojov: +\nOpenPlaceReviews - fotografie bodov záujmu; +\nMapillary - fotografie z ulice; +\nWeb / Wikimedia - fotografie bodov záujmu špeficikované v údajoch OpenStreetMap. + Zdroje + Približná veľkosť súboru + Zvoľte údaje na export do súboru. + Potrebné pre import + Na vašom zariadení je len %1$s voľného miesta. Prosím uvoľnite miesto alebo zrušte niektoré položky z exportu. + Nie je dostatok miesta \ No newline at end of file From 2e1793aa5f389a2942ac64c228b349a32a323f2c Mon Sep 17 00:00:00 2001 From: D M Date: Sat, 21 Nov 2020 17:53:11 +0000 Subject: [PATCH 169/198] Translated using Weblate (Serbian) Currently translated at 96.7% (3449 of 3564 strings) --- OsmAnd/res/values-sr/strings.xml | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index e0ac87a53f..c96a4e09e4 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -3865,8 +3865,35 @@ Промените врсту руте након Шта је ново Име фајла - + Паузирај снимање пута Додајте бар две тачке. Одјава успешна + „Приватно“ значи да се траг не појављује ни на једној јавној листи, али су тачке праћења у њему у нехронолошком редоследу доступне путем јавног ГПС АПИ-ја без временских ознака. + „Могуће је идентификовати“ значи да ће се траг јавно приказати у вашим ГПС траговима и у јавним списковима ГПС трагова, тј. други корисници ће моћи да преузму необрађени траг и повежу га са вашим корисничким именом. Јавни подаци о временским тачкама трага из ГПС АПИ-ја који се сервирају путем АПИ-ја за тачке праћења имаће референцу на вашу оригиналну страницу праћења. + „Следљиво“ значи да се траг не приказује нигде на јавним листама, али обрађене тачке праћења са временским ознакама у њима (које не могу бити директно повезане са вама) иду кроз преузимања са јавног ГПС АПИ-ја. + Затвори ОСМ белешку + Коментар ОСМ напомене + Пријавите се помоћу сигурне методе ОАутх или користите своје корисничко име и лозинку. + Додај фотографију + Региструјте се на +\nOpenPlaceReviews. + Пријавите се на веб локацију пројекта отворених података OpenPlaceReviews.орг да бисте отпремили још више фотографија. + Направите нови налог + Већ имам + Претрага + Кајак + Моторни чамац + Додај у Мапилари + Додај у ОпенПлејсРевјуз + ОсмАнд приказује фотографије из неколико извора: +\nОпенПлејсРевјуз - ПОИ фотографије; +\nМапилари - слике на нивоу улице; +\nВеб / Викимедиа - ПОИ фотографије наведене у подацима ОпенСтритМап. + Ресурси + Приближна величина датотеке + Изаберите податке за извоз у датотеку. + Потребно за увоз + Уређај има слободно само %1$s. Ослободите мало простора или поништите одабир неких предмета за извоз. + Нема довољно простора \ No newline at end of file From 2e96c25b08b97c11a926a44f830b21c97e092c4c Mon Sep 17 00:00:00 2001 From: Guntis Ozols Date: Sun, 22 Nov 2020 12:18:09 +0000 Subject: [PATCH 170/198] Translated using Weblate (Latvian) Currently translated at 62.7% (2237 of 3564 strings) --- OsmAnd/res/values-lv/strings.xml | 35 +++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/OsmAnd/res/values-lv/strings.xml b/OsmAnd/res/values-lv/strings.xml index e505fe8b91..2c392c4614 100644 --- a/OsmAnd/res/values-lv/strings.xml +++ b/OsmAnd/res/values-lv/strings.xml @@ -3212,7 +3212,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Maršruta pārrēķināšana Paziņošana Lietotāja vārds un parole - Šie iestatījumi darbosies visos profilos. + Šie iestatījumi ir globāli un darbosies visos profilos OSM rediģēšana Skatiet vēl neaugšupielādētos labojumus vai OSM kļūdas %1$s mapē. Augšupielādētie punkti vairs netiks rādīti. OSM @@ -3278,13 +3278,13 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Ārkārtas Ceļošana Nepieciešams pievienot vismaz divus punktus - Ieiet OpenStreetMap - Ieiet OpenStreetMap.org + Pierakstīties OpenStreetMap + Pierakstīties OpenStreetMap.org Pierakstīties ar OpenStreetMap Lai sūtītu labojumus vai jaunus datus, ir nepieciešams pierakstīties. \n -\nJūs varat pierakstīties, lietojot drošo OAuth metodi vai ar savu lietotāja vārdu un paroli. - Lietot pierakstīšanās datus +\nJūs varat pierakstīties, lietojot OAuth vai ar savu lietotāja vārdu un paroli. + Pierakstīties ar lietotāja vādu un paroli Konts Lietotājs Pārvaldīt abonomentu @@ -3297,10 +3297,31 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl Ievadiet tagus, atdalītus ar komatu. Aizvērt OSM Note Komentēt OSM Note - Jūs varat ielogoties lietojot drošo OAuth metodi vai savu lietotāja vārdu un paroli. + Ielogojieties lietojot drošo OAuth metodi vai savu lietotāja vārdu un paroli. Pievienot foto Reģistrēties \nOpenPlaceReviews.org - Fotogrāfijas tiek piegādātas no atvērtā koda projekta OpenPlaceReviews.org. Lai pievienotu savas fotogrāfijas, nepieciešams reģistrēties šajā interneta vietnē. + Lai augšupielādētu vēl fotogrāfijas, ielogojieties atvērtā koda projekta OpenPlaceReviews.org vietnē. Izveidot jaunu kontu + Simboli + Sports + \"Privāts\" nozīmē, ka trase neparādīsies nevienā publiskā sarakstā, bet trases punkti nehronoloģiskā secībā būs pieejami caur publisko GPS API bez laika atzīmēm. + \"Identificējams\" nozīmē, ka trase būs redzama jūsu GPS trasēs un publiskajos GPS trašu sarakstos, t.i. citi lietotāji varēs lejupielādēt trasi un asociēt to ar jūsu vārdu. Publiskie trases punktu dati ar laika atzīmēm no GPS API caur trackpoints API dos referenci uz jūsu oriģinālo trases lapu. + \"Izsekojams\" nozīmē, ka pati trase neparādās publiskajos sarakstos, bet tikai apstrādātie trackpointi ar laika atzīmēm (nevar tikt asociēti konkrēti ar jums) caur lejupielādēm no publiskā GPS API. + Man jau ir konts + Meklēšanas vēsture + Kajaks + Motorlaiva + Pievienot Mapillary + Pievienot OpenPlaceReviews + OsmAnd rāda attēlus no dažādiem avotiem: +\nOpenPlaceReviews - POI bildes; +\nMapillary - ielas līmeņa attēli; +\nWeb / Wikimedia - POI bildes no OpenStreetMap datiem. + Resursi + Aptuvenais faila izmērs + Izvēlieties datus eksportēšanai failā. + Nepieciešams importam + Ierīcē ir tikai %1$s brīvās vietas. Lūdzu atbrīvojiet vietu vai izvēlieties mazāk detaļu eksportam. + Nepietiek brīvās vietas \ No newline at end of file From 84abe75ed092be6f3325f656255c519b61470758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Sat, 21 Nov 2020 11:01:02 +0000 Subject: [PATCH 171/198] Translated using Weblate (Czech) Currently translated at 90.6% (3232 of 3564 strings) --- OsmAnd/res/values-cs/strings.xml | 174 +++++++++++++++++-------------- 1 file changed, 93 insertions(+), 81 deletions(-) diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index c23e4be8e6..4b67dca251 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -2269,7 +2269,7 @@ Zobrazená oblast: %1$s x %2$s Změňte vyhledávací dotaz nebo zvětšete okruh hledání. Přepnout zobrazení poznámek OSM Oprávnění - OsmAnd nemůže naimportovat soubor. Prosím zkontrolujte, zda má oprávnění číst soubor z tohoto umístění. + Nepodařilo se naimportovat soubor. Prosím zkontrolujte, zda má OsmAnd oprávnění ke čtení souboru. Vzdálenost opravená Obrázek Mapillary Otevřít Mapillary @@ -2307,10 +2307,10 @@ Zobrazená oblast: %1$s x %2$s Max/Min Min/Max Pozastavit/pokračovat v navigaci - Stiskněte toto tlačítko na pozastavení, nebo pokračování navigace. + Tlačítko pro pozastavení nebo pokračování navigace. Zobrazit zprávu \"Navigace ukončena\" Spustit/ukončit navigaci - Stiskněte toto tlačítko pro spuštění, nebo zastavení navigace. + Tlačítko pro spuštění nebo zastavení navigace. Průhledná růžová Prosím přidejte alespoň jeden bod. Název souboru GPX: @@ -2348,7 +2348,7 @@ Zobrazená oblast: %1$s x %2$s Indikace vzdálenosti Seřadit podle Bez animací - Zakáže animace v aplikaci. + Vypne animace mapy. Stále zobrazovat na mapě Ukončit bez uložení? Práh pro změnu orientace mapy @@ -2365,7 +2365,7 @@ Zobrazená oblast: %1$s x %2$s Posledních 7 dní Tento rok Použít umístění - Přidat svou polohu jako startovní bod do plánu ideální trasy. + Přidejte svou polohu jako počáteční bod do plánu ideální trasy. Moje poloha Dokončit Naplánovat trasu @@ -2377,24 +2377,24 @@ Zobrazená oblast: %1$s x %2$s Zobrazit vodicí čáry Zobrazit šipky na mapě Odebrat z mapových značek - sestupně - vzestupně - Datum přidání + Z-A + A-Z + Přidáno Seřadit podle: Značky Formát souřadnic Použít systémovou klávesnici - Zvolte formát souřadnicového vstupu. Můžete ho kdykoli změnit klepnutím na \'Možnosti\'. + Zvolte formát zadávání souřadnic. Můžete ho kdykoliv změnit klepnutím na \'Nastavení. Rychlé zadávání souřadnic - Vyhnout brodům a ledovým cestám - Povede trasu mimo brody a ledové cesty. + Žádné ledové cesty a brody + Vyhne se ledovým cestám a brodům. Zobrazit prošlé Skrýt prošlé - Vyberte, jak ukazovat vzdálenost a směr k mapovým značkám na obrazovce mapy: - Nepodařilo se změnit poznámku + Zvolte, jak se bude zobrazovat vzdálenost a směr k mapovým značkám na mapě: + Nepodařilo se změnit poznámku. Upravit poznámku Upravit poznámku OSM - Přidat počáteční bod také jako cíl pro vytvoření okruhu. + Přidat kopii počátečního bodu jako cíl. Vytvořit okružní trasu Může být importováno jako Oblíbené nebo jako GPX soubor. Importovat jako soubor GPX @@ -2431,7 +2431,7 @@ Zobrazená oblast: %1$s x %2$s Zobrazit vodicí čáry od vaší polohy k aktivním značkám. Zobrazit jednu nebo dvě šipky označující směr k aktivním značkám. Zvolte způsob zobrazení vzdálenosti k aktivním značkám. - Zvolte, kolik ukazatelů směru se má zobrazit. + Zadejte počet ukazatelů směru. Počet desetinných míst Vpravo Vlevo @@ -2442,19 +2442,19 @@ Zobrazená oblast: %1$s x %2$s Klepnutí na mapu přepne ovládací tlačítka a nástroje. Režim celé obrazovky Označit prošlé - Vytvořit nebo upravit OSM POI, otevřít nebo okomentovat OSM poznámky a přispět zaznamenanými GPX soubory. + Vytvořit nebo upravit body zájmu OSM, otevřít nebo okomentovat OSM poznámky a přispět zaznamenanými GPX soubory. Odstraněné Upravené Přidané Značka %s aktivována. Klepněte na značku na mapě pro její přesunutí na první místo v aktivních značkách bez otevření kontextové nabídky. Dělejte si poznámky! - Přidejte audio, video nebo fotografickou poznámku pro každý bod na mapě, pomocí nástroje nebo kontextového menu. - Poznámky podle datumu + Přidejte audio, video nebo fotografické poznámky pro libovolný bod na mapě, pomocí nástroje nebo kontextového menu. + Multimediální poznámky podle data Podle datumu Podle typu Klepnutím nebo přidržením označte \'Místa\', pak klepněte na tlačítko značky s vlajkou. - Upravit vyhledávací dotaz. + Změňte vyhledávací dotaz. Funkce \"Jedním stiskem\" je aktivní Popisky bodů Bez názvu @@ -2482,13 +2482,13 @@ Zobrazená oblast: %1$s x %2$s Počet úprav %1$s, součet %2$s mBTC Laosky Zobrazit zavřené poznámky - Zobrazit/Skrýt OpenStreetMap poznámky na mapě. + Zobrazit nebo skrýt OpenStreetMap poznámky na mapě. GPX - vhodné pro export do JOSM nebo jiných editorů OSM. - OSC - vhodné pro export do OpenStreetMap. + OSC - vhodné pro export do OSM. Soubor GPX Soubor OSC Zvolte typ souboru - Vyberte typ exportu: OSM poznámky, POI nebo obojí. + Exportujte jako OSM poznámky, body zájmu, nebo obojí. Všechny údaje OSM poznámky Zadejte název souboru. @@ -2524,8 +2524,8 @@ Zobrazená oblast: %1$s x %2$s Volitelný název bodu Nejbližší trasy v okruhu V okruhu - Vzdálenost: nejvzdálenější jako první - Vzdálenost: nejbližší jako první + Nejvzdálenější jako první + Nejbližší jako první Divoká voda GPS navigace \n• Vyberte si mezi offline režimem (bez roamingových poplatků v zahraničí) a online režimem (rychlejší) @@ -2658,7 +2658,7 @@ Zobrazená oblast: %1$s x %2$s Odemknout všechny funkce OsmAnd Vyberte si předplatné Chcete-li dostávat offline články o cestování, je třeba koupit jednu z následujících položek: - Vyberte vhodnou položku: + Vyberte vhodnou položku Nedělat Dělat Pouze na WiFi @@ -2675,7 +2675,7 @@ Zobrazená oblast: %1$s x %2$s Cestovní průvodce Wikivoyage Článek odstraněn - Vyhledávání: stát, město, kraj + Hledejte stát, město nebo kraj Číst Články v záložkách Prozkoumat @@ -2693,8 +2693,8 @@ Zobrazená oblast: %1$s x %2$s Stáhnout soubor Začít s úpravami Získejte neomezený přístup - Aktualizace map: každý měsíc - Aktualizace map: každou hodinu + Aktualizace map každý měsíc + Aktualizace map každou hodinu Stáhnout články Wikipedie pro %1$s a číst je v režimu offline. Stahování dat z Wikipedie Otevřít článek online @@ -2718,9 +2718,9 @@ Zobrazená oblast: %1$s x %2$s Upravit akce Získejte OsmAnd Live pro odemknutí všech funkcí: Denní aktulizace mapových podkladů s neomezeným počtem stahování, všechny placené moduly, propojení s Wikipedia, Wikivoyage a mnoho dalšího. Děkujeme za Vaši zpětnou vazbu - Na Váš dotaz nebylo nic nalezeno. - Žádný výsledek vyhledávání? -\nDejte nám o tom vědět, ať to můžeme zlepšit + Bod nebo cesta nebyly nalezeny. + Žádný výsledek vyhledávání\? +\nPoskytněte nám zpětnou vazbu • Navigace: Opravený indikátor průběhu, přidána možnost pro rychlé prohození začátku a konce trasy \n \n • Mapové značky: Opravena možnost zapnutí/vypnutí skupin, nově možnost skrýt značky na mapě @@ -2737,8 +2737,9 @@ Zobrazená oblast: %1$s x %2$s \n Odesílání cesty… Zvětšit okruh hledání na %1$s - Bude odeslán váš dotaz pro vyhledávání: \"%1$s\" a také vaše poloha. \n - \n Nedochází k žádnému shromažďování osobních údajů. Zaslaná data slouží pouze k vylepšení vyhledávacího algoritmu. + Váš vyhledávací dotaz a poloha budou odeslány na: \"%1$s\". +\n +\n Nedochází k žádnému shromažďování osobních údajů. Zaslaná data slouží pouze k vylepšení vyhledávacího algoritmu. Odeslat data? Celý svět Bod %1$s byl smazán @@ -2748,7 +2749,7 @@ Zobrazená oblast: %1$s x %2$s Bylo přidáno %1$s bodů. Zadejte název a klepněte na \"Uložit\". Upravený základní styl pro zvýšení kontrastu pěších a cyklistických cest. Používá starší barvy Mapnik. Záložka - Vhodný pro off-road terénní jízdu. Vhodný pro použití se zelenými satelitními snímky použitými jako podkladová vrstva. Zmenšená tloušťka hlavních cest a naopak zvětšená tloušťka polních cest, pěšin, cyklotras a dalších cest. Založeno na \"Topo\" stylu. + Pro off-road terénní jízdu, založený na stylu \'Topo\' a pro použití se zelenými satelitními snímky jako podkladovou vrstvou. Zmenšená tloušťka hlavních cest, zvětšená tloušťka polních cest, pěšin, cyklotras a dalších cest. Otevřít odkaz Wikipedia na internetu Odkaz bude otevřen v internetovém prohlížeči. Stahování Wikipedia a Wikivoyage článků pro čtení offline je dostupné pouze předplatitelům OsmAnd Live. @@ -2764,21 +2765,21 @@ Zobrazená oblast: %1$s x %2$s Čas příjezdu do mezicíle Do průjezdního bodu Klepněte na tlačítko pro vyslechnutí odpovídajícího hlasového pokynu, aby jste zjistili chybné nebo chybějící pokyny. - Plavební navigační styl. Klíčové vlastnosti: Bóje, majáky, plavební cesty, mořské cesty a značky, přístavy, námořní služby, plavební hloubka. - Zimní režim. Klíčové vlastnosti: Vykresluje sjezdovky, lyžařské vleky a další praktické objekty pro lyžaře a snowboardisty. Nedůležité objekty jsou na mapě méně výrazné. + Pro námořní navigaci. Obsahuje bóje, majáky, plavební cesty, mořské cesty a značky, přístavy, námořní služby a hloubkové vrstevnice. + Pro lyžování. Obsahuje sjezdovky, lyžařské vleky, běžkařské trasy atd. Nedůležité objekty jsou na mapě méně výrazné. Vítejte v otevřené beta verzi - Jednoduchý a kontrastní styl pro automobilovou navigaci. Příjemný na oči v nočním režimu. Klíčové vlastnosti: Vrstevnice, kontrastní oranžové silnice, druhořadé objekty jsou méně výrazné. - Kontrastní styl určený primárně pro pěší turistiku a cyklistiku v přírodě. Dobrá čitelnost při složitém venkovním osvětlením. Klíčové vlastnosti: kontrastní silnice a přírodních objekty, různé typy tras, vrstevnice s rozšířeným nastavením, více detailů při odpovídající úrovni zvětšení než ve výchozím stylu. Umožňuje rozlišit kvalitu povrchu vozovky. Nemá noční režim. - Starý styl vykreslení jako výchozí \"Mapnik\". Klíčové vlastnosti: barvy jsou podobné \"Mapnik\" stylu. - Vysoce detailní styl pro účely cestování. Obsahuje všechna nastavení z výchozího stylu a navíc zobrazuje maximum detailů, především všechny silnice, cesty a jiné způsoby cestování. Jasně rozlišuje různé typy cest, podobně jako mnohé cestovní atlasy. Vysoce kontrastní schéma pro venkovní použití, denní a noční režim. - Obecný styl. Zjednodušené vykreslování v hustě osídlených městech. Klíčové vlastnosti: vrstevnice, trasy, kvalita povrchu cest, omezení přístupu, čísla cest, značení dle SAC, objekty pro vodní sporty. + Jednoduchý styl pro automobilovou navigaci. Příjemný noční režim, vrstevnice, kontrastní oranžové silnice, druhořadé objekty jsou méně výrazné. + Pro pěší turistiku a cyklistiku v přírodě. Dobře čitelný venku. Kontrastní silnice a přírodních objekty, různé typy tras, vrstevnice s rozšířeným nastavením, více detailů. Umožňuje rozlišit kvalitu povrchu vozovky. Nemá noční režim. + Starý výchozí styl \'Mapnik\'. Barvy jsou podobné jako styl \'Mapnik\'. + Styl pro cestování s vysokým kontrastem a maximálními detaily. Obsahuje všechna nastavení ze základního stylu OsmAnd a navíc zobrazuje maximum detailů, především silnice, cesty a jiné způsoby cestování. Jasně rozlišuje různé typy cest, podobně jako cestovní atlasy. Vhodný pro použití ve dne, v noci i venku. + Obecný styl. Čisté vykreslování hustě osídlených měst. Obsahuje vrstevnice, trasy, kvalita povrchu cest, omezení přístupu, čísla cest, značení dle SAC, objekty pro vodní sporty. Stáhněte si cestovní průvodce Wikivoyage a prohlížejte články o místech po celém světě bez připojení na internet. Bezplatný cestovní průvodce, který může upravovat každý. Cestovní průvodci jsou nyní založené na Wikivoyage. Všechny jejich funkce můžete otestovat zdarma během beta testování. Poté budou zpřístupněny předplatitelům služby OsmAnd Live a uživatelům OsmAnd+. - Můžete (a měli byste) upravovat libovolný článek na Wikivoyage. Sdílejte znalosti, zkušenosti, talent a svoji pozornost + Můžete (a měli byste) upravovat libovolný článek na Wikivoyage. Sdílejte znalosti, zkušenosti, talent a svoji pozornost. Pro pokračování prosím udělte OsmAndu oprávnění pro přístup k poloze. Černá - Na této zastávce je další provoz. + Z této zastávky je možná další doprava. • Opraven pád při startu, ke kterému docházelo na některých zařízeních \n \n • Nová akce značek: zobraz značky, které již byly projety @@ -2794,7 +2795,7 @@ Zobrazená oblast: %1$s x %2$s \n• Měření vzdálenosti: tlačítko \"Měření\" přidáno do akcí v kontextovém menu \n Hledat ulici - Nejprve vyberte město + Nejprve zvolte město/oblast Obnovit Značky, přidané jako skupina oblíbených nebo GPX bodů a označené jako prošlé, zůstanou na mapě. Pokud skupina není aktivní, značky zmizí z mapy. Ponechat prošlé značky na mapě @@ -2813,8 +2814,8 @@ Zobrazená oblast: %1$s x %2$s Obnovuje se čtvrtletně Obnovuje se ročně %1$.2f %2$s - Vyberte si frekvenci plateb, která vám vyhovuje: - Část příjmů je posílána přispěvatelům OpenStreetMap. + Interval plateb: + Příspěvky pomáhají financovat tvorbu map OSM. OsmAnd Předplatné Zobrazit pouze 360° obrázky @@ -2831,9 +2832,9 @@ Zobrazená oblast: %1$s x %2$s Kapacita Šířka Výška - Přidat cíl + Zadat cíl Přidat mezicíl - Přidat počáteční bod + Zadat počáteční bod Mezicíl přestupy pěšky @@ -2845,7 +2846,7 @@ Zobrazená oblast: %1$s x %2$s Ukázat podél trasy Simulovat navigaci Vyberte soubor s trasou, kterou chcete následovat - Hlasová oznámení + Hlasové výzvy Mezicíle Příjezd v %1$s Nejdříve prosím zadejte cíl @@ -2864,12 +2865,12 @@ Zobrazená oblast: %1$s x %2$s Typy silnic Výjezd na Vyměnit - Zobrazit/skrýt GPX trasy - Klepnutím na toto tlačítko akce se zobrazí nebo skryjí vybrané GPX trasy na mapě - Skrýt GPX trasy - Zobrazit GPX trasy + Zobrazit/skrýt stopy + Tlačítko pro zobrazení nebo skrytí vybraných stop na mapě + Skrýt stopy + Zobrazit stopy %1$d přenosů - Přidat počáteční a koncový bod + Přidat počáteční a cílový bod Přidat počáteční bod Zvolit počáteční bod Nezpevněný @@ -2926,8 +2927,7 @@ Zobrazená oblast: %1$s x %2$s %s režim Vyhněte se typům dopravy… Chůze - Maximální délka názvu značky \"%s\" je 255 znaků. -\nPro pokračování zkraťte. + Zkraťte délku názvu značky \"%s\" na méně než 255 znaků. Délka hodnoty \"%s\" "• Nová obrazovka \'Pokyny\': Zobrazuje tlačítka pro cíl Domov a Práce, zkratku pro \'předchozí trasu\', seznam aktivních GPX tras a značek, historii vyhledávání \n @@ -2951,18 +2951,18 @@ Zobrazená oblast: %1$s x %2$s Miliradiány Úhlová jednotka Změní jednotku měření azimutu. - Vyhnout se tramvajím - Vyhnout se tramvajím - Vyhnout se autobusům - Vyhnout se autobusům a trolejbusům - Vyhnout se sdíleným taxi - Vyhnout se sdíleným taxi - Vyhnout se vlakům - Vyhnout se vlakům - Vyhnout se metru + Žádné tramvaje + Vyhne se tramvajím + Žádné autobusy + Vyhne se autobusům a trolejbusům + Žádná sdílená taxi + Vyhne se sdíleným taxi + Žádné vlaky + Vyhne se vlakům + Žádné metro Vyhnout se metru a lehké železniční dopravě - Vyhnout se trajektům - Vyhnout se trajektům + Žádné trajekty + Vyhne se trajektům • Zobrazování času na přestup mezi hromadnou dopravou \n \n • Upravené rozhraní detailů trasy @@ -2995,7 +2995,7 @@ Zobrazená oblast: %1$s x %2$s Určete, která data dovolíte aplikaci OsmAnd sdílet. Klepněte na „Povolit“, pokud souhlasíte s našimi %1$s Soukromí a zabezpečení - Zvolte, které údaje s námi sdílíte + Zvolte údaje ke sdílení Ne, díky Povolit Název profilu @@ -3030,12 +3030,12 @@ Zobrazená oblast: %1$s x %2$s Nejprve je třeba uložit změny profilu Odstranit profil Opravdu chcete odstranit profil „%s“ - Zvolte základní profil + Zvolte výchozí profil Vyberte typ navigace Auto, nákladní auto, motocykl Horské kolo, moped, kůň Chůze, turistika, běh - Všechny typy hromadné dopravy + Typy hromadné dopravy Loď, veslování, plachtění Letadlo, plachtění Geokódování @@ -3071,7 +3071,7 @@ Zobrazená oblast: %1$s x %2$s \n \nSvoji volbu můžete kdykoliv změnit v Nastavení > Soukromí a zabezpečení. Pomozte nám pochopit, které regiony a země jsou v mapách nejpopulárnější. - Pomozte nám pochopit, které funkce OsmAnd jsou nejpopulárnější. + Pomůže nám zjistit popularitu funkcí OsmAnd. Můžete přidat vaši vlastní upravenou verzi souboru routing.xml v ..osmand/routing Klepněte znovu pro změnu orientace mapy Min. rychlost @@ -3581,7 +3581,7 @@ Zobrazená oblast: %1$s x %2$s Přihlásit se pomocí OAuth pro použití funkcí editace OSM Přihlásit pomocí OAuth Vymazat OpenStreetMap OAuth token - Odhlášení úspěšné + Byli jste odhlášeni Soubor je již importovaný v OsmAnd Použít dvoufázový algoritmus A* pro výpočet trasy Graf @@ -3893,28 +3893,28 @@ Zobrazená oblast: %1$s x %2$s Tato nastavení jsou globální a platí pro všechny profily Přihlásit se do OpenStreetMap Přihlásit se do OpenStreetMap.org - Zaregistrovat se do OpenStreetMap + Přihlásit se do OpenStreetMap Můžete zobrazit své dosud neodeslané změny či chyby v OSM v %1$s. Odeslané body se již v OsmAnd nezobrazují. - Musíte se přihlásit, abyste mohli odesílat nová nebo změněná data. + Přihlaste se, abyste mohli odesílat nová nebo změněná data, \n -\nMůžete se přihlásit pomocí bezpečné metody OAuth, nebo pomocí jména a hesla. - Použít jméno a heslo +\nbuď pomocí bezpečné metody OAuth, nebo pomocí jména a hesla. + Přihlásit se pomocí jména a hesla Účet - Přihlašovací jméno + Uživatelské jméno Historie značek \"Veřejná\" znamená, že trasa je veřejně dostupná ve vašich GPS trasách, ve veřejných seznamech GPS tras a také ve veřejném seznamu stop s nezpracovanými časovými razítky. Data poskytnutá prostřednictvím API nebudou odkazovat na vaši stránku s trasou. Časová razítka bodů trasy nebudou dostupná prostřednictvím veřejného GPS API a body nebudou chronologicky seřazeny. \"Soukromá\" znamená, že trasa se neobjeví v žádném veřejném seznamu a body trasy budou dostupné prostřednictvím veřejného GPS API bez časových razítek a nebudou chronologicky seřazeny. Odeslat soubor GPX do OpenStreetMap Zadejte značky oddělené čárkou. - Sledovatelná znamená, že trasa se neobjeví v žádném veřejném seznamu, ale body trasy budou dostupné prostřednictvím veřejného GPS API s časovými razítky. Ostatní uživatelé si budou moci stáhnout zpracované body z vaší trasy, které ale nebude možné přímo spojit s vámi. - Identifikovatelná znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Data poskytnutá prostřednictvím API se budou odkazovat na vaši původní stránku s trasou. Časová razítka bodů trasy budou dostupná prostřednictvím veřejného GPS API. + \"Sledovatelná\" znamená, že trasa se neobjeví v žádném veřejném seznamu, ale zpracované body trasy s časovými razítky (které nelze přímo spojit s vámi) budou dostupné prostřednictvím veřejného GPS API. + \"Identifikovatelná\" znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Veřejná data bodů trasy s časovými razítky poskytnutá prostřednictvím GPS API se budou odkazovat na vaši původní stránku s trasou. Zavřít OSM poznámku Komentovat OSM poznámku - Můžete se přihlásit bezpečnou metodou OAuth nebo použít své přihlašovací jméno a heslo. + Přihlaste se bezpečnou metodou OAuth nebo použijte své přihlašovací jméno a heslo. Přidat fotku Zaregistrovat na \nOpenPlaceReviews.org - Fotografie poskytuje open source projekt OpenPlaceReviews.org. Před odesláním svých fotografií se musíte zaregistrovat na webové stránce. + Přihlaste se na webových stránkách open source projektu OpenPlaceReviews.org a budete moci odesílat ještě více fotografií. Vytvořit nový účet Už mám účet %1$s: %2$s @@ -3948,4 +3948,16 @@ Zobrazená oblast: %1$s x %2$s Historie vyhledávání Kajak Motorový člun + Přidat do Mapillary + Přidat do OpenPlaceReviews + OsmAnd zobrazuje fotografie z několika zdrojů: +\nOpenPlaceReviews - fotografie bodů zájmu +\nMapillary - pouliční fotografie +\nWeb / Wikimedia - fotografie bodů zájmu specifikované v OpenStreetMap datech. + Zdroje + Přibližná velikost souboru + Vyberte data k exportu do souboru. + Vyžadováno pro import + Na vašem zařízení je volných pouze %1$s. Uvolněte prosím nějaké místo nebo zrušte některé položky k exportu. + Není zde dostatek místa \ No newline at end of file From 48dffe57938f93d1bba91398e7391f44ba5fcdd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Sat, 21 Nov 2020 10:10:52 +0000 Subject: [PATCH 172/198] Translated using Weblate (Czech) Currently translated at 99.3% (3836 of 3860 strings) --- OsmAnd/res/values-cs/phrases.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OsmAnd/res/values-cs/phrases.xml b/OsmAnd/res/values-cs/phrases.xml index b0e0e22791..590ca94ca9 100644 --- a/OsmAnd/res/values-cs/phrases.xml +++ b/OsmAnd/res/values-cs/phrases.xml @@ -3850,4 +3850,10 @@ Střešní Bod GPX Radarová věž + Ambasáda + Služby občanům + Imigrační víza + Neimigrační víza + Konzulát + Ambasáda \ No newline at end of file From e0aaa0cedb9d485915c9ef45eec5ca4d86e3db77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Babos=20G=C3=A1bor?= Date: Fri, 20 Nov 2020 20:09:31 +0000 Subject: [PATCH 173/198] Translated using Weblate (Hungarian) Currently translated at 99.9% (3858 of 3860 strings) --- OsmAnd/res/values-hu/phrases.xml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index 771e934b0d..8b00e80bb6 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -3843,4 +3843,33 @@ Radartorony GPX-pont Állampolgári szolgáltatások + nincsenek + vannak + nincs + van + nincs + van + Országrész külképviselete + Emigráns kormány nem akkreditált képviselete + Nem akkreditált összekötő iroda + Tiszteletbeli konzul + Főkonzulátus + Konzuli iroda + Konzuli ügynköség + Konzulátus, élén konzullal + Rezidencia + Apostoli nunciatúra + Állandó küldöttség + Érdekképviseleti részleg + Főbiztosság (brit nemzetközösségi tag nagykövetsége) + Küldöttség + Nagykövetségi részleg + Nagykövetség, élén nagykövettel + Összekötő iroda + Követség + Bevándorlói vízum + Nem bevándorlói vízum + Összekötő iroda + Külképviselet + Konzulátus \ No newline at end of file From ae3fb2580543ebd8e91ea658b0624d4db71d185a Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Fri, 20 Nov 2020 22:49:25 +0000 Subject: [PATCH 174/198] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3564 of 3564 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 30 +++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 75fe84842c..87ad6154ba 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -3917,10 +3917,10 @@ Desenvolvimento de transporte público nativo Mudar para cálculo de roteamento de transporte público em Java (seguro) O que há de novo - Entre no OAuth para usar os recursos de edição do osm + Entrar com OAuth para usar os recursos osmedit Entrar via OAuth Limpar token do OpenStreetMap OAuth - Saída bem sucedida + Desconectado O arquivo já foi importado para OsmAnd Use o algoritmo de roteamento 2-phase A * Para dirigir em motos de neve com estradas e trilhas exclusivas. @@ -3948,14 +3948,14 @@ A assinatura do OsmAnd Live foi pausada A assinatura do OsmAnd Live está em espera Diferença - Entrar para OpenStreetMap + Entrar com OpenStreetMap Entrar com OpenStreetMap.org - Você precisa entrar para enviar alterações novas ou modificadas. + Entrar para carregar de alterações novas ou modificadas, \n -\nVocê pode entrar usando o método OAuth seguro ou usar sua entrada e senha. - Usar a entrada e senha +\ncom OAuth ou usando seu nome de usuário e senha. + Entrar com nome de usuário e senha Conta - Entrar + Nome de usuário Entrar com o OpenStreetMap Histórico de marcadores Enviar arquivo GPX para OpenStreetMap @@ -3966,14 +3966,26 @@ \"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de trilha processados com carimbos de data/hora (que não podem ser associados a você diretamente) são feitos por meio de downloads da API GPS pública. Fechar nota do OSM Comentário de nota do OSM - Você pode entrar usando o método OAuth seguro ou usar sua entrada e senha. + Entrar usando o método OAuth seguro ou use seu nome de usuário e senha. Adicionar foto Cadastre-se em \nOpenPlaceReviews.org - As fotos são fornecidas pelo projeto de dados abertos do OpenPlaceReviews.org. Para carregar suas fotos você precisa se inscrever no site. + Entrar no site do projeto de dados abertos OpenPlaceReviews.org para enviar ainda mais fotos. Criar nova conta Eu já tenho uma conta Histórico de busca Caiaque Lancha + Adicionar ao Mapillary + Adicionar ao OpenPlaceReviews + OsmAnd mostra fotos de várias fontes: +\nOpenPlaceReviews - fotos de POI; +\nMapillary - imagens de nível da rua; +\nWeb / Wikimedia - fotos de POI especificadas nos dados do OpenStreetMap. + Recursos + Tamanho aproximado do arquivo + Selecione os dados a serem exportados para o arquivo. + Necessário para importação + Seu dispositivo tem apenas %1$s livre. Libere espaço ou desmarque alguns itens para exportar. + Não há espaço suficiente \ No newline at end of file From 51c700ed16220c1a52fbbf98fb721774ddd17226 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Fri, 20 Nov 2020 22:50:56 +0000 Subject: [PATCH 175/198] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-pt-rBR/phrases.xml | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index cde5e0611b..a52a317b33 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -3850,4 +3850,34 @@ Torre de radar Tapume Terraço + Não + Sim + Não + Sim + Não + Sim + Subnacional + Escritório de representação + Escritório + Consul honorário + Consulado Geral + Escritório consular + Agência consular + Chefiado por um cônsul + Residência + Nunciatura + Missão + Seção de interesses + Alto comissariado + Delegação + Seção + Chefiado por um embaixador + Ligação + Embaixada + Serviços ao cidadão + Vistos de imigrante + Vistos de não imigrante + Ligação + Consulado + Embaixada \ No newline at end of file From 73e88abffe52b0430c03d804fa9b322d43761177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Sun, 22 Nov 2020 10:30:46 +0000 Subject: [PATCH 176/198] Translated using Weblate (Turkish) Currently translated at 80.8% (3120 of 3860 strings) --- OsmAnd/res/values-tr/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-tr/phrases.xml b/OsmAnd/res/values-tr/phrases.xml index 45103c30c5..8489842899 100644 --- a/OsmAnd/res/values-tr/phrases.xml +++ b/OsmAnd/res/values-tr/phrases.xml @@ -3130,4 +3130,6 @@ Sütun Gölet Gölet + Konsolosluk + Büyük elçilik \ No newline at end of file From 8869fe218a73d1fd94918cf56a2a7dea5fde224d Mon Sep 17 00:00:00 2001 From: Verdulo Date: Sat, 21 Nov 2020 23:03:51 +0000 Subject: [PATCH 177/198] Translated using Weblate (Esperanto) Currently translated at 100.0% (3564 of 3564 strings) --- OsmAnd/res/values-eo/strings.xml | 86 ++++++++++++++++---------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 2de782c6c3..5e35a669e6 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -415,7 +415,7 @@ Uzantnomo kaj pasvorto al OSM Datum-konservada dosierujo Filtri laŭ nomo - Entajpu ion por serĉi + Enigu ion por serĉi A-GPS informoj Etikedoj “riparu min!” Administri @@ -749,9 +749,9 @@ Korekto de altitudo Tutmondaj maraj navigadpunktoj Elektu kategorion - Entajpu nomon - Entajpu kategorion - Entajpu priskribon. + Enigu nomon + Enigu kategorion + Enigu priskribon. Norma koloro Magneta direkto Relativa direkto @@ -1596,7 +1596,7 @@ Elekti manieron de bildigado de vektora mapo Montri retpaĝon de interesejo Montri telefonon de interesejo - entajpu tekston por filtri + enigu tekston por filtri Alta ekrandistingivo Ne etendi (kaj malklarigi) map‑kahelojn ĉe alt‑distingivaj ekranoj. Serĉi transporton publikan @@ -1651,7 +1651,7 @@ Ne povas ŝargi GPX. Sendi raporton Ne povas trovi iujn elŝutitajn mapojn en la SD-karto. - Entajpu serĉatan interesejon + Enigu serĉatan interesejon Ia Dankon al Yandex pro informoj pri trafiko. Yandex - informoj pri trafiko @@ -1805,7 +1805,7 @@ GGG:MM:SS.S Adreso Krei interesejon - Entajpu nomon de ŝatata ejo + Enigu nomon de ŝatata ejo Ŝatataj Aldonis ŝatatan punkton “{0}”. Aldoni al ŝatataj @@ -1905,7 +1905,7 @@ Senpagaj elŝutoj uzitaj Montras nombron da pluaj senpagaj elŝutoj. Bonvolu elekti kie vi volas konservi mapoj kaj aliaj datum-dosieroj. - Entajpu nomon de lando + Enigu nomon de lando Nova versio Unuaj paŝoj kun OsmAnd Ebloj @@ -1947,7 +1947,7 @@ Nombro da kontribuintoj Nombro da redaktoj Raportoj por - Dosiernomo enhavas malpermesitan signon + Malpermesata signo en dosiernomo {0} elemento(j) elektita(j) Koordinat-formo Formo de geografiaj koordinatoj. @@ -2038,7 +2038,7 @@ Subkategorioj Transliterumi nomojn Transliterumi, se nomo en %1$s mankas - Entajpu urbon, adreson aŭ nomon de interesejo + Enigu urbon, adreson aŭ nomon de interesejo Bronzkolora hela Bronzkolora malhela Kolor-skemo de nivelkurboj @@ -2366,12 +2366,12 @@ Aktivigi aŭtomatan map-skaladon Malaktivigi aŭtomatan map-skaladon Paŭzigita - Entajpu urbon aŭ lokon - Entajpu poŝtkodon + Enigu urbon aŭ lokon + Enigu poŝtkodon Proksimaj urboj Elekti urbon Serĉi poŝtkodon - Entajpu adreson + Enigu adreson Elekti straton en %1$s Sumigo @@ -2415,7 +2415,7 @@ Neniuj fotoj tie ĉi. Instali Pliigi fotan atingon de Mapillary - Instalu Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo. + Instalu la aplikaĵon Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo. Malfermi Mapillary Mapillary-foto Korektita distanco @@ -2430,7 +2430,7 @@ de Montri bildojn aldonitajn nur Dato - Entajpu uzantnomon + Enigu uzantnomon Montri nur bildojn aldonitajn de Uzantnomo Filtri bildojn laŭ alŝutinto, laŭ dato aŭ laŭ tipo; aktivaj nur je pligrandigo. @@ -2456,7 +2456,7 @@ Reprovi Esploru mapon kaj aldonu punktojn Bonvolu aldoni almenaŭ unu punkton. - GPX-dosiera nomo: + Dosiernomo de GPX: Montri sur mapo post konservi Aldoni navigadpunkton Konservi GPX‑navigadpunkton @@ -2541,7 +2541,7 @@ Vi devas aldoni almenaŭ unu markon por uzi tiun ĉi eblon. Malĝusta formo Malĝusta enigo - Entajpu novan nomon + Enigu novan nomon Reen Montri Aldonis intercelojn al mapmarkoj @@ -2634,7 +2634,7 @@ Kopii nomon de punkto Sennoma ejo Montri fermitajn rimarkojn - Montri/kaŝi OSM‑rimarkojn sur la mapo. + Montri aŭ kaŝi OSM‑rimarkojn sur la mapo. GPX - taŭga por elporti al JOSM aŭ aliaj OSM-redaktiloj. OSC - taŭga por elporti al OSM. GPX-dosiero @@ -2652,8 +2652,8 @@ Agordi kiel komencpunkton Eraro dum enporti mapon Enportis mapon - Entajpu dosiernomon. - Entajpu longitudon + Enigu dosiernomon. + Enigu longitudon Entajpu latitudon Entajpu latitudon kaj longitudon GG°MM′SS″ @@ -2772,7 +2772,7 @@ Redakti punkton Aldoni punkton Konservi kiel spuron - Vi aldonis %1$s punktojn. Entajpu dosiernomon kaj frapetu “konservi”. + Vi aldonis %1$s punktojn. Enigu dosiernomon kaj frapetu “konservi”. Forigis la punkton %1$s Mondo Ni sendos vian serĉ-peton: “%1$s” kun via pozicio. @@ -3050,7 +3050,7 @@ Ĉefa profilo Elektu specon de navigado Bonvolu elekti specon de navigo por la nova aplikaĵa profilo - Entajpu nomon por profilo + Enigu nomon por profilo Unue devas enigi nomon por profilo. Nomo neebla Jam ekzistas profilo kun la sama nomo @@ -3080,9 +3080,9 @@ Rulumu supren/malsupren por ŝanĝi pligrandigon de mapo. Eskap-klavo revenas al al aplikaĵo WunderLINQ App. Stiri per WunderLINQ Aldonu almenaŭ unu elementon al la listo en agordoj de “rapida ago” - Skiado alpa/malsuprenira + Skiado alpa kaj malsuprenira Skivojoj por skiado alpa (malsuprenira) kaj vojetoj al skitelferoj. - Skiado nordia/skikurada + Skiado nordia kaj skikurada Skivojoj por skiado nordia (skikurada). Skiado ekskursa Skivojoj ekskursaj. @@ -3261,7 +3261,7 @@ Elŝutu la detalan mapon %s, por vidi tiun ĉi areon. Ĉu movi datum‑dosierojn OsmAnd al la nova loko\? \n%1$s → %2$s - Entajpu dosier‑indikon + Enigu dosierindikon Dosierujo… Algluu dosier‑indikon por dosierujo de OsmAnd‑datumoj Ĉu ŝanĝi datum‑dosierujon OsmAnd\? @@ -3362,7 +3362,7 @@ Anstataŭigi komencpunkton per celo Simuli vian pozicion uzante registritan GPX‑kurson. Konservis kurson - Dosiernomo estas malplena + Malplena dosiernomo Malfari Butono por agordi la ekranan centron kiel komencpunkton. Sekve vi estos petita por agordi finpunkton aŭ ekos kalkulado de kurso. Montri reton de nodoj de biciklaj kursoj @@ -3572,7 +3572,7 @@ Mapklarigo Nivelombrumo %1$s el %2$s - Montri/kaŝi teren‑formon + Montri aŭ kaŝi teren‑formon Kaŝi teren‑formon Montri teren‑formon Butono por montri/kaŝi tavolon de formo de tereno sur la mapo. @@ -3690,10 +3690,10 @@ Vi povas ekigi tiujn agojn per frapeti la butonon “%1$s”. Kaŝi publikan transporton Montri publikan transporton - Montri/kaŝi publikan transporton + Montri aŭ kaŝi publikan transporton Butono por montri/kaŝi publikan transporton sur la mapo. - Krei/redakti interesejon - Aldoni/forigi ŝatatan ejojn + Krei aŭ redakti interesejon + Aldoni aŭ forigi ŝatatan ejojn Pozicioj de parkumado Restarigi implicitan ordigon de elementoj Reen al redaktado @@ -3876,7 +3876,7 @@ Refari • plibonigoj al “plani kurson”: eblo uzi diversajn specojn de navigo por ĉiu segmento aparte kaj ampleksi spurojn \n -\n• nova menuo de aspekto por spuroj: eblo elekti koloron kaj dikecon, montri sagetojn de direkto kaj vidigi markojn de komenco/fino de la spuro +\n• nova menuo de aspekto por spuroj: eblo elekti koloron kaj dikecon, montri sagetojn de direkto kaj vidigi markojn de komenco kaj fino de la spuro \n \n• plibonigita videblo de biciklaj nodoj \n @@ -3890,7 +3890,7 @@ \n \n Registri - Elektu la intervalon de registrado por la ĝenerala registrado de spuro (aktivigata per la fenestraĵo “registri spuron” sur la mapo). + Elektu la intervalon de registrado por la ĝenerala registrado de spuro (aktivigebla per la fenestraĵo “registri spuron” sur la mapo). Simpligita spuro Nur la linio de kurso estos konservita, la navigadpunktoj estos forigitaj. Dosiernomo @@ -3909,7 +3909,7 @@ \n La abono aŭtomate renoviĝos escepte se ĝi estos nuligita antaŭ la dato de renoviĝo. La pago estos prenita por la renoviĝa periodo (monato/tri monatoj/jaro) nur je la dato de renoviĝo. \n \n Vi povas administri kaj rezigni viajn abonojn per la agordoj de AppGallery. - Emblemoj komenco/fino + Emblemoj de komenco kaj fino Dankon al vi por aĉeti la kromprogramon “nivelkurboj” Abonpago prenita por la elektita periodo. VI ĉiam povas rezigni abonon ĉe AppGallery. Eviti irejojn @@ -3921,10 +3921,10 @@ Du-faza difinado de kurso por aŭtomobila navigo. Indiĝena metodo de publik-transporta navigo Aktivigi (sekuran) metodon por kalkuli kursojn de publika transporto uzante programlingvon Java - Ensaluti uzante OAuth por redakti la mapon OSM + Ensaluti per OAuth por redakti la mapon OSM Ensaluti per OAuth Forigi ĵetonon OpenStreetMap OAuth - Sukcese elsalutinta + Elsalutinta Por veturi per motorsledo sur dediĉitaj vojoj. Dosiero jam estas enportita al OsmAnd Uzi 2-fazan A* algoritmon de navigo @@ -3955,26 +3955,26 @@ Ensaluti al OpenStreetMap Ensaluti al OpenStreetMap.org Ensaluti per OpenStreetMap - Vi devas ensaluti por alŝuti novajn aŭ modifitajn ŝanĝojn. + Ensalutu por alŝuti novajn aŭ modifitajn ŝanĝojn \n -\nVi povas ensaluti per la sekura metodo OAuth aŭ per enigi uzantnomon kaj pasvorton. - Uzi uzantnomon kaj pasvorton +\naŭ per la sekura metodo OAuth aŭ per enigi uzantnomon kaj pasvorton. + Ensaluti per uzantnomo kaj pasvorto Konto Uzantnomo Historio de markoj Sendi GPX‑dosieron al OpenStreetMap Enigu etikedojn disigitajn per komo (,). - “Publika” signifas, ke la GPX‑spuro estos publika videbla en “miaj spuroj” kaj en la publika listo de spuro (GPS‑spuroj). Datumoj liverataj per la API ne ligos al paĝo de via spuro. Tempindikoj de punktoj ne estos akireblaj per la publika API GPS, kaj la punktoj ne estos ordigitaj laŭtempe. Tamen aliaj uzantoj plue povos elŝuti la nepritraktitan spuron el la publika listo de spuroj kune kun ĉiuj ampleksitaj tempindikoj. - “Privata” signifas, ke la GPX‑spuro montriĝos en neniu publika listo, sed ĝiaj punktoj plue estos akireblaj per la publika API GPS sen tempindikoj, sed tiuj punktoj estos ordigitaj laŭtempe. + “Publika” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj) kun tempindikoj kaj en nepritraktita formo. Datumoj liverataj per la API ne ligos al paĝo de via spuro. Tempindikoj de spurpunkto ne estos akireblaj per la publika API GPS, kaj spurpunktoj ne estos laŭtempe ordigitaj. + “Privata” signifas, ke la GPX‑spuro montriĝos en neniu publika listo, sed ĝiaj punktoj neordigitaj laŭtempe estos akireblaj per la publika API GPS sen tempindikoj. “Identigebla” signifas, ke la GPX‑spuro estos publike videbla en “miaj spuroj” kaj en la publika listo de spuroj (GPS‑spuroj), aliaj uzantoj povos elŝuti vian nepritraktitan spuron kaj ligi ĝin al via uzantnomo. Publikaj datumoj kun tempindikoj el la API GPS akireblaj per la API de spur‑punktoj indikos al originala paĝo de via spuro. “Spurebla” signifas, ke la GPX‑spuro ne montriĝos en publikaj listoj, sed pritraktitaj punktoj kun tempindikoj el ĝi (kiuj ne povos esti senpere ligitaj al vi) estos elŝuteblaj per la publika API GPS. Fermi OSM-rimarkon Komenti OSM-rimarkon - Vi povas ensaluti per la sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. + Ensalutii per la sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton. Aldoni foton Registri ĉe \nOpenPlaceReviews.org - Fotoj estas liverataj de la malferm‑datuma projekto OpenPlaceReviews.org. Por alŝuti viajn fotojn, vi devas registri ĉe la retejo. + Ensaluti en la paĝon de la malferm‑datuma projekto OpenPlaceReviews.org por alŝuti fotojn. Krei novan konton Mi jam havas konton Serĉi en historio @@ -3990,4 +3990,6 @@ Necesa por enporti En via aparato estas nur %1$s da libera spaco. Liberigu iom da spaco aŭ malelektu iujn elementojn de elporto. Mankas spaco + Aldoni al Mapillary + Aldoni al OpenPlaceReviews \ No newline at end of file From df801d408eb151f244a15d79c6371cc3a5987f1f Mon Sep 17 00:00:00 2001 From: Verdulo Date: Sun, 22 Nov 2020 18:17:58 +0000 Subject: [PATCH 178/198] Translated using Weblate (Esperanto) Currently translated at 99.7% (3852 of 3860 strings) --- OsmAnd/res/values-eo/phrases.xml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml index 99dda63d74..36f24f20bd 100644 --- a/OsmAnd/res/values-eo/phrases.xml +++ b/OsmAnd/res/values-eo/phrases.xml @@ -3843,4 +3843,26 @@ tegmento GPX-punkto Radar-turo + oficejo + honora konsulo + ĝenerala konsulejo + konsula oficejo + konsula agentejo + gvidata de konsulo + rezidejo + nunciejo + misio + sekcio de interesoj + alta komisario + delegitaro + branĉo + gvidata de ambasadestro + kvazaŭ-ambasadejo + ambaadejo + Servoj por ŝtatanoj + Vizoj enmigraj + Vizoj neenmigraj + Kvazaŭ‑ambasadejo + Konsulejo + Ambasadejo \ No newline at end of file From 3fcde6ea6b6f518e268e466c5dba002c47402f45 Mon Sep 17 00:00:00 2001 From: D M Date: Sat, 21 Nov 2020 17:29:38 +0000 Subject: [PATCH 179/198] Translated using Weblate (Serbian) Currently translated at 98.0% (3786 of 3860 strings) --- OsmAnd/res/values-sr/phrases.xml | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/OsmAnd/res/values-sr/phrases.xml b/OsmAnd/res/values-sr/phrases.xml index f764fee95c..69b1046618 100644 --- a/OsmAnd/res/values-sr/phrases.xml +++ b/OsmAnd/res/values-sr/phrases.xml @@ -3815,4 +3815,51 @@ Калдера Мар Стрелица: не + Табла одласка: не + Не + Да + Не + Да + Не + Да + Поднационални + Представништво + Канцеларија + Почасни конзулат + Генерални конзулат + Конзуларна канцеларија + Конзуларна агенција + На челу са конзулом + Резиденција + Нунцијатура + Мисија + Интересни + Висока комисија + Делегација + Подружница + На челу са амбасадором + Посредник + Амбасада + Радарски торањ + Паркинг + Паркинг + Таван + ГПКС тачка + ЛНГ + Продавница ораха + Кошница + Распоред + Стварно време + Кашњење + Да + Лифт + Мали електрични уређаји + Услуге за грађане + Имигрантске визе + Неимигрантске визе + Посредник + Конзулат + Амбасада + Табла + Доливање воде за пиће \ No newline at end of file From fe5ee7eb2aedaa0c4976021e43d63d6609b91b26 Mon Sep 17 00:00:00 2001 From: D M Date: Sat, 21 Nov 2020 17:32:30 +0000 Subject: [PATCH 180/198] Translated using Weblate (Serbian) Currently translated at 100.0% (271 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/sr/ --- OsmAnd-telegram/res/values-sr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OsmAnd-telegram/res/values-sr/strings.xml b/OsmAnd-telegram/res/values-sr/strings.xml index 52c261dbe5..4220079b9b 100644 --- a/OsmAnd-telegram/res/values-sr/strings.xml +++ b/OsmAnd-telegram/res/values-sr/strings.xml @@ -267,4 +267,8 @@ Последњи одговор: %1$ Последње ажурирање из Телеграма: %1$ Грешка + Извези + Logcat бафер + Проверите и поделите детаљне записе апликације + Пошаљи извештај \ No newline at end of file From 7420aa8376ee87901d119ac6b366681b3d99d557 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Sun, 22 Nov 2020 23:01:18 +0200 Subject: [PATCH 181/198] Layout redo, logical mistake fix --- OsmAnd/res/layout/custom_radio_buttons.xml | 5 ++--- OsmAnd/res/layout/fragment_measurement_tool.xml | 10 ++++++---- OsmAnd/src/net/osmand/plus/UiUtilities.java | 1 - .../plus/mapcontextmenu/other/TrackDetailsMenu.java | 1 + .../plus/measurementtool/MeasurementToolFragment.java | 10 +++++----- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index c15757f4b0..03a440da9c 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -25,7 +25,6 @@ android:background="?attr/selectableItemBackground" android:gravity="center" android:textSize="@dimen/default_desc_text_size" - android:foreground="?attr/selectableItemBackground" android:textColor="@drawable/radio_flat_text_selector_light" osmand:typeface="@string/font_roboto_medium" tools:text="@string/shared_string_left"/> @@ -33,11 +32,11 @@ + android:background="?attr/divider_color"> diff --git a/OsmAnd/res/layout/fragment_measurement_tool.xml b/OsmAnd/res/layout/fragment_measurement_tool.xml index 3cdf5b3f46..82cd085ec9 100644 --- a/OsmAnd/res/layout/fragment_measurement_tool.xml +++ b/OsmAnd/res/layout/fragment_measurement_tool.xml @@ -30,7 +30,8 @@ Date: Sun, 22 Nov 2020 23:15:15 +0200 Subject: [PATCH 182/198] Remove unnecessary --- .../osmand/plus/measurementtool/MeasurementToolFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index c75a320150..c8a412318e 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -751,7 +751,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { if (editingCtx.getPointsCount() > 0) { - if (editingCtx.isNewData() || isInEditMode()) { + if (editingCtx.isNewData()) { if (showDialog) { openSaveAsNewTrackMenu(mapActivity); } else { From 4a3de9a51bd84e3e4d348606d9e4403efa26adc7 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Sun, 22 Nov 2020 23:23:24 +0200 Subject: [PATCH 183/198] Small refactoring --- .../plus/osmedit/OsmBugsRemoteUtil.java | 124 ++++++++++-------- .../plus/osmedit/OsmEditingFragment.java | 5 +- 2 files changed, 71 insertions(+), 58 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java index f6200d2ad3..f68aa9fbaa 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java @@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.concurrent.ExecutionException; public class OsmBugsRemoteUtil implements OsmBugsUtil { @@ -101,65 +102,78 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { boolean anonymous) { OsmOAuthAuthorizationAdapter authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); OsmBugResult result = new OsmBugResult(); - try { - HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url); - log.info("Editing poi " + url); - connection.setConnectTimeout(15000); - connection.setRequestMethod(requestMethod); - connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); //$NON-NLS-1$ - - if (!anonymous) { - if (authorizationAdapter.isValidToken()) { - try { - OsmOAuthAuthorizationClient client = authorizationAdapter.getClient(); - Response response = client.performRequest(url, requestMethod, userOperation); - if (response.getCode() != HttpURLConnection.HTTP_OK) { - result.warning = response.getMessage() + "\n" + response.getBody(); - return result; - } - } catch (InterruptedException e) { - log.error(e); - result.warning = e.getMessage(); - } catch (ExecutionException e) { - log.error(e); - result.warning = e.getMessage(); - } - return result; - } else { - String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); //$NON-NLS-1$ - connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + if (!anonymous) { + if (authorizationAdapter.isValidToken()) { + try { + result = performOAuthRequest(url, requestMethod, userOperation, authorizationAdapter); + } catch (InterruptedException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (ExecutionException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (IOException e) { + log.error(e); + result.warning = e.getMessage(); + } + } else { + try { + result = performBasicRequest(url, requestMethod); + } catch (FileNotFoundException | NullPointerException e) { + // that's tricky case why NPE is thrown to fix that problem httpClient could be used + String msg = app.getString(R.string.auth_failed); + log.error(msg, e); + result.warning = app.getString(R.string.auth_failed) + ""; + } catch (MalformedURLException e) { + log.error(userOperation + " " + app.getString(R.string.failed_op), e); + result.warning = e.getMessage() + ""; + } catch (IOException e) { + log.error(userOperation + " " + app.getString(R.string.failed_op), e); + result.warning = e.getMessage() + " link unavailable"; } } + } + return result; + } - connection.setDoInput(true); - connection.connect(); - String msg = connection.getResponseMessage(); - boolean ok = connection.getResponseCode() == HttpURLConnection.HTTP_OK; - log.info(msg); //$NON-NLS-1$ - // populate return fields. + private OsmBugResult performBasicRequest(String url, String requestMethod) throws IOException { + OsmBugResult result = new OsmBugResult(); + HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url); + log.info("Editing poi " + url); + connection.setConnectTimeout(15000); + connection.setRequestMethod(requestMethod); + connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); + String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); + connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes(StandardCharsets.UTF_8))); + connection.setDoInput(true); + connection.connect(); + String msg = connection.getResponseMessage(); + boolean ok = connection.getResponseCode() == HttpURLConnection.HTTP_OK; + log.info(msg); + // populate return fields. - StringBuilder responseBody; - if (connection.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { - responseBody = Algorithms.readFromInputStream(connection.getErrorStream()); - } else { - responseBody = Algorithms.readFromInputStream(connection.getInputStream()); - } - log.info("Response : " + responseBody); //$NON-NLS-1$ - connection.disconnect(); - if (!ok) { - result.warning = msg + "\n" + responseBody; - } - } catch (FileNotFoundException | NullPointerException e) { - // that's tricky case why NPE is thrown to fix that problem httpClient could be used - String msg = app.getString(R.string.auth_failed); - log.error(msg, e); - result.warning = app.getString(R.string.auth_failed) + ""; - } catch (MalformedURLException e) { - log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$ - result.warning = e.getMessage() + ""; - } catch (IOException e) { - log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$ - result.warning = e.getMessage() + " link unavailable"; + StringBuilder responseBody; + if (connection.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { + responseBody = Algorithms.readFromInputStream(connection.getErrorStream()); + } else { + responseBody = Algorithms.readFromInputStream(connection.getInputStream()); + } + log.info("Response : " + responseBody); + connection.disconnect(); + if (!ok) { + result.warning = msg + "\n" + responseBody; + } + return result; + } + + private OsmBugResult performOAuthRequest(String url, String requestMethod, String userOperation, + OsmOAuthAuthorizationAdapter authorizationAdapter) + throws InterruptedException, ExecutionException, IOException { + OsmBugResult result = new OsmBugResult(); + OsmOAuthAuthorizationClient client = authorizationAdapter.getClient(); + Response response = client.performRequest(url, requestMethod, userOperation); + if (response.getCode() != HttpURLConnection.HTTP_OK) { + result.warning = response.getMessage() + "\n" + response.getBody(); } return result; } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index 5602c23483..991073c435 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -40,7 +40,6 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer private static final String OPEN_OSM_EDITS = "open_osm_edits"; public static final String OSM_LOGIN_DATA = "osm_login_data"; private static final String OSM_EDITING_INFO = "osm_editing_info"; - private static final String USE_DEV_URL = "use_dev_url"; private OsmOAuthAuthorizationAdapter authorizationAdapter; @@ -172,7 +171,7 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String prefId = preference.getKey(); - if (USE_DEV_URL.equals(prefId) && newValue instanceof Boolean) { + if (settings.USE_DEV_URL.getId().equals(prefId) && newValue instanceof Boolean) { settings.USE_DEV_URL.set((Boolean) newValue); osmLogout(); authorizationAdapter = app.getOsmOAuthHelper().updateAdapter(); @@ -225,7 +224,7 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer @Override public void onPreferenceChanged(String prefId) { - if (USE_DEV_URL.equals(prefId)) { + if (settings.USE_DEV_URL.getId().equals(prefId)) { osmLogout(); authorizationAdapter = app.getOsmOAuthHelper().updateAdapter(); } From 5d69794e27afe90119296dea1f87d5c7e19092c8 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Sun, 22 Nov 2020 23:51:42 +0200 Subject: [PATCH 184/198] Small refactoring --- .../plus/osmedit/OsmBugsRemoteUtil.java | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java index f68aa9fbaa..5d6c172738 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsRemoteUtil.java @@ -98,53 +98,52 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { return editingPOI(getUserDetailsApi(), GET, "validate_login", false); } - private OsmBugResult editingPOI(String url, String requestMethod, String userOperation, - boolean anonymous) { + private OsmBugResult editingPOI(String url, String requestMethod, String userOperation, boolean anonymous) { OsmOAuthAuthorizationAdapter authorizationAdapter = new OsmOAuthAuthorizationAdapter(app); OsmBugResult result = new OsmBugResult(); - if (!anonymous) { - if (authorizationAdapter.isValidToken()) { - try { - result = performOAuthRequest(url, requestMethod, userOperation, authorizationAdapter); - } catch (InterruptedException e) { - log.error(e); - result.warning = e.getMessage(); - } catch (ExecutionException e) { - log.error(e); - result.warning = e.getMessage(); - } catch (IOException e) { - log.error(e); - result.warning = e.getMessage(); - } - } else { - try { - result = performBasicRequest(url, requestMethod); - } catch (FileNotFoundException | NullPointerException e) { - // that's tricky case why NPE is thrown to fix that problem httpClient could be used - String msg = app.getString(R.string.auth_failed); - log.error(msg, e); - result.warning = app.getString(R.string.auth_failed) + ""; - } catch (MalformedURLException e) { - log.error(userOperation + " " + app.getString(R.string.failed_op), e); - result.warning = e.getMessage() + ""; - } catch (IOException e) { - log.error(userOperation + " " + app.getString(R.string.failed_op), e); - result.warning = e.getMessage() + " link unavailable"; - } + if (authorizationAdapter.isValidToken() && !anonymous) { + try { + result = performOAuthRequest(url, requestMethod, userOperation, authorizationAdapter); + } catch (InterruptedException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (ExecutionException e) { + log.error(e); + result.warning = e.getMessage(); + } catch (IOException e) { + log.error(e); + result.warning = e.getMessage(); + } + } else { + try { + result = performBasicRequest(url, requestMethod, anonymous); + } catch (FileNotFoundException | NullPointerException e) { + // that's tricky case why NPE is thrown to fix that problem httpClient could be used + String msg = app.getString(R.string.auth_failed); + log.error(msg, e); + result.warning = app.getString(R.string.auth_failed) + ""; + } catch (MalformedURLException e) { + log.error(userOperation + " " + app.getString(R.string.failed_op), e); + result.warning = e.getMessage() + ""; + } catch (IOException e) { + log.error(userOperation + " " + app.getString(R.string.failed_op), e); + result.warning = e.getMessage() + " link unavailable"; } } return result; } - private OsmBugResult performBasicRequest(String url, String requestMethod) throws IOException { + private OsmBugResult performBasicRequest(String url, String requestMethod, boolean anonymous) throws IOException { OsmBugResult result = new OsmBugResult(); HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url); log.info("Editing poi " + url); connection.setConnectTimeout(15000); connection.setRequestMethod(requestMethod); connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); - String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); - connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes(StandardCharsets.UTF_8))); + if (!anonymous) { + String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); + connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes(StandardCharsets.UTF_8))); + } connection.setDoInput(true); connection.connect(); String msg = connection.getResponseMessage(); @@ -177,4 +176,4 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil { } return result; } -} +} \ No newline at end of file From cf0c907cc0e5c134388922bbb74bd2d7dd1d0c95 Mon Sep 17 00:00:00 2001 From: Samantaz Fox Date: Sun, 22 Nov 2020 18:30:38 +0000 Subject: [PATCH 185/198] Translated using Weblate (French) Currently translated at 99.7% (3558 of 3566 strings) --- OsmAnd/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 49838f2f3c..463e2cd47e 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3968,4 +3968,5 @@ \nOpenPlaceReviews : photos de PI ; \nMapillary : photos de rue ; \nWeb / Wikimedia : photos de PI réféfencés dans OpenStreetMap. + \ No newline at end of file From dd40dadae8fffe9ddaa9103d4b052f55dffec5c2 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sun, 22 Nov 2020 22:45:34 +0000 Subject: [PATCH 186/198] Translated using Weblate (French) Currently translated at 99.7% (3558 of 3566 strings) --- OsmAnd/res/values-fr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 463e2cd47e..5784c30f6a 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -696,7 +696,7 @@ Public Identifiable Traçable - Privé + Privée Récupérer le véhicule au parking Avertissement Un rappel pour récupérer votre véhicule a été ajouté à votre agenda. Vous pouvez modifier ou supprimer ce rappel. @@ -3968,5 +3968,5 @@ \nOpenPlaceReviews : photos de PI ; \nMapillary : photos de rue ; \nWeb / Wikimedia : photos de PI réféfencés dans OpenStreetMap. - + \ No newline at end of file From 4c33a042ee080dc2d1d0c33e63008996c6d1a3a4 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Sun, 22 Nov 2020 19:16:15 +0000 Subject: [PATCH 187/198] Translated using Weblate (Ukrainian) Currently translated at 99.9% (3565 of 3566 strings) --- OsmAnd/res/values-uk/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index a394ed4d31..60dbe91f88 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3989,4 +3989,6 @@ \nOpenPlaceReviews — світлини POI; \nMapillary - зображення вулиць; \nМережа / Вікімедіа — світлини POI, вказані в даних OpenStreetMap. + Виберіть групи, які буде імпортовано. + Виберіть елементи, які буде імпортовано. \ No newline at end of file From 212f212c65e7d0abe977a0f82a210a8c8ac97ccc Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Sun, 22 Nov 2020 20:27:15 +0000 Subject: [PATCH 188/198] Translated using Weblate (Italian) Currently translated at 89.0% (3175 of 3566 strings) --- OsmAnd/res/values-it/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 1f40937ddc..229d91e99f 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -3991,4 +3991,6 @@ Necessario per l\'importazione Il tuo dispositivo ha solo %1$s liberi. Libera dello spazio i deseleziona alcune voci da esportare. Non c\'è abbastanza spazio + Seleziona i gruppi da importare. + Seleziona gli oggetti da importare. \ No newline at end of file From 37c74c6bd83d8bbcafb4846f45b5b5ed10eeb056 Mon Sep 17 00:00:00 2001 From: ace shadow Date: Sun, 22 Nov 2020 19:43:04 +0000 Subject: [PATCH 189/198] Translated using Weblate (Slovak) Currently translated at 99.8% (3562 of 3566 strings) --- OsmAnd/res/values-sk/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 2e0a815d55..9edcd71c9a 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3989,4 +3989,6 @@ Potrebné pre import Na vašom zariadení je len %1$s voľného miesta. Prosím uvoľnite miesto alebo zrušte niektoré položky z exportu. Nie je dostatok miesta + Zvoľte skupiny, ktoré budú importované. + Zvoľte položky, ktoré budú importované. \ No newline at end of file From c439422ee094ab1eeb99d2494988f766a8d5414b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Sun, 22 Nov 2020 19:48:07 +0000 Subject: [PATCH 190/198] Translated using Weblate (Czech) Currently translated at 91.6% (3270 of 3566 strings) --- OsmAnd/res/values-cs/strings.xml | 58 +++++++++++++++++--------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 4b67dca251..4c4069ba02 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -2005,7 +2005,7 @@ Délka %2$s Neomezené stahování map, aktualizací a modul Wikipedie. Míle/metry Hornolužická srbština - Nemáte zatím žádné GPX soubory + Nemáte zatím žádné soubory stop Do složky můžete také přidat GPX soubory Přidat další… Vzhled @@ -2055,10 +2055,10 @@ Délka %2$s Nahrát POI Starší vyhledávání Zobrazit starší způsob vyhledávání - Povolit dálnice - Povolit jízdu po dálnicích. + Použít dálnice + Povolí jízdu po dálnicích. Články Wikipedie v okolí - Hledat město nebo oblast + Město nebo oblast Přidat starší hledání do úvodního panelu. Srbsky (latinka) Čínsky (Hong Kong) @@ -2168,7 +2168,7 @@ Zobrazená oblast: %1$s x %2$s Zohlednit převýšení terénu (data od SRTM, ASTER a EU-DEM). Styl jízdy Vyberte složku pro soubor GPX - Soubor nemůže být přesunut. + Soubor se nepodařilo přesunout. Přesunout Trasy Doba pohybu @@ -2181,7 +2181,7 @@ Zobrazená oblast: %1$s x %2$s Průměrná rychlost Přidat nový adresář Bod(y) smazán(y). - Chystáte se smazat body (%1$d). Určitě smazat? + Opravdu chcete smazat %1$d bodů\? Potřebné obraty na trase Trasové body, body zájmu, pojmenované objekty Trasa @@ -2201,34 +2201,34 @@ Zobrazená oblast: %1$s x %2$s Možnosti parkování Děkujeme vám za zakoupení placené verze OsmAnd. Zvolte kolísání výšky - Jízda po pravé straně + Pravostranný provoz Automaticky Obnovit nákupy Mapová písma Zadejte adresu - Zadejte město + Zadejte město/oblast Zadejte směrovací číslo Nejbližší města Zvolte město - Zvolte směrovací číslo + Hledání PSČ Automatické přiblížení mapy - Klepnutím na toto tlačítko zapnete/vypnete automatické přibližování mapy v závislosti na vaší rychlosti. - Zapnout automatické přiblížení mapy - Vypnout automatické přiblížení mapy - Přidat cíl + Tlačítko pro zapnutí nebo vypnutí automatického přibližování mapy podle rychlosti. + Zapnout automatické přibližování + Vypnout automatické přibližování + Zadat cíl Nahradit cíl Přidat první mezicíl Zobrazit OSM poznámky Skrýt OSM poznámky - Klepnutím na toto tlačítko zobrazíte nebo skryjete OpenStreetMap poznámky na mapě. + Tlačítko pro zobrazení nebo skrytí OpenStreetMap poznámek na mapě. Seřazeno podle vzdálenosti - Najít Oblíbené - Pro zobrazení vrstevnic a stínování kopců je potřeba stáhnout překryvnou mapu této oblasti. - Pro zobrazení vrstevnic a stínování kopců je třeba zakoupit a aktivovat modul \"Vrstevnice\" + Hledat v Oblíbených + Pro zobrazení vertikálního stínování si stáhněte překryvnou mapu stínovaných svahů. + Pro zobrazení výškových stupňů si nainstalujte modul \'Vrstevnice\'. Skrýt od úrovně přiblížení Stáhnout mapu vrstevnic tohoto regionu. Modul - Chcete-li na mapě vidět vrstevnice, musíte koupit a nainstalovat modul \'Vrstevnice\' + Pro zobrazení výškových stupňů si zakupte a nainstalujte modul \'Vrstevnice\'. Barevné schéma Zobrazit od úrovně přiblížení Povolit soukromý přístup @@ -2237,14 +2237,14 @@ Zobrazená oblast: %1$s x %2$s Název skupiny Změnit barvu Upravit název - Animovat moji polohu - Povolit animaci mapy \'Mé polohy\' při navigaci. + Animovat vlastní polohu + Zapnout animovaný posun \'Mé polohy\' na mapě během navigace. Přehled Vyberte ulici v %1$s - Stisk tohoto tlačítka přidá střed obrazovky jako nový cíl navádění, z dříve nastaveného cíle se stane poslední mezicíl. - Stisk tohoto tlačítka přidá střed obrazovky jako nový cíl navádění. Pokud byl dříve nastaven jiný cíl, bude nahrazen. - Stisk tohoto tlačítka přidá střed obrazovky jako první mezicíl. + Tlačítko pro nastavení středu obrazovky jako nového cíle trasy. Z dříve nastaveného cíle se stane poslední mezicíl. + Tlačítko pro nastavení středu obrazovky jako nového cíle. Pokud byl dříve nastaven jiný cíl, bude nahrazen. + Tlačítko pro nastavení středu obrazovky jako prvního mezicíle. Bez překryvné vrstvy Bez podkladové vrstvy Chyba @@ -2267,7 +2267,7 @@ Zobrazená oblast: %1$s x %2$s Zvětšit okruh hledání Nic nalezeno Změňte vyhledávací dotaz nebo zvětšete okruh hledání. - Přepnout zobrazení poznámek OSM + Zobrazit nebo skrýt OSM poznámky Oprávnění Nepodařilo se naimportovat soubor. Prosím zkontrolujte, zda má OsmAnd oprávnění ke čtení souboru. Vzdálenost opravená @@ -2275,11 +2275,11 @@ Zobrazená oblast: %1$s x %2$s Otevřít Mapillary Instalovat Zlepšit pokrytí fotografií s Mapillary - Nainstalujte Mapillary a přidejte jednu nebo více fotografií na toto místo v mapě. + Nainstalujte Mapillary a přidejte fotografie na toto místo v mapě. On-line fotografie Přidat fotografie - Nemáme fotografie pro toto umístění. - Přispějte vlastním pohledem na toto místo přes Mapillary z úrovně ulice. + Zde nejsou žádné fotografie. + Sdílejte svůj vlastní pohled z úrovně ulice přes Mapillary. Umožňuje rychle přispět do Mapillary. On-line fotografie z ulic pro každého. Objevte místa, spolupracujte, zachyťte svět. Fotografie z ulic pro každého. Objevte místa, spolupracujte, zachyťte svět. @@ -3740,7 +3740,7 @@ Zobrazená oblast: %1$s x %2$s MGRS Simulovat polohu pomocí zaznamenané stopy GPX. Co je nového - Tlačítko pro určení středu obrazovky jako výchozího bodu a výpočet trasy do cíle nebo otevření dialogu pro výběr cíle. + Tlačítko pro nastavení středu obrazovky jako výchozího bodu a výpočet trasy do cíle nebo otevření dialogu pro výběr cíle. Pro jízdu na sněžném vozidle na vyhrazených cestách. Vlastní profil založte na jednom ze základních profilů. Ten určí základní nastavení jako viditelnost nástrojů, jednotky rychlosti a vzdálenosti. Toto jsou základní profily aplikace a návrhy vlastních profilů, na které mohou být rozšířeny: Ohodnotit @@ -3960,4 +3960,6 @@ Zobrazená oblast: %1$s x %2$s Vyžadováno pro import Na vašem zařízení je volných pouze %1$s. Uvolněte prosím nějaké místo nebo zrušte některé položky k exportu. Není zde dostatek místa + Vyberte skupiny, které se mají importovat. + Vyberte položky, které se mají importovat. \ No newline at end of file From 1c8157bd8466b3e24251a7b950c2532aff9232bd Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Sun, 22 Nov 2020 19:35:20 +0000 Subject: [PATCH 191/198] Translated using Weblate (Sardinian) Currently translated at 99.7% (3558 of 3566 strings) --- OsmAnd/res/values-sc/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 3a6de6cbea..c0cbb4608e 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3990,4 +3990,6 @@ Netzessàriu pro s\'importatzione Su dispositivu tuo tenet petzi %1$s a disponimentu. Lìbera unu pagu de memòria o boga s\'ischerta a unos cantos elementos de esportare. Non b\'at logu bastante + Ischerta sos grupos de importare. + Ischerta sos elementos de importare. \ No newline at end of file From 9037efc46566746b5eaa23c4106aa52d6888065b Mon Sep 17 00:00:00 2001 From: Samantaz Fox Date: Sun, 22 Nov 2020 19:07:00 +0000 Subject: [PATCH 192/198] Translated using Weblate (French) Currently translated at 98.8% (3816 of 3860 strings) --- OsmAnd/res/values-fr/phrases.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index 40f35c26d0..b9824f9d5b 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -655,7 +655,7 @@ Club Restaurant et café Artisanat - Station essence + Station service Transport individuel Alimentation en eau potable Traitement des ordures ménagères @@ -3272,8 +3272,8 @@ Source d\'énergie : biomasse н/к н/к* - - 1А* + 1A + 1A* 1Б* @@ -3844,4 +3844,8 @@ Tableau des départs : non Ascenseur Tableau des départs + Liaison + Consulat + Ambassade + Point d\'eau potable \ No newline at end of file From 85df5e8500f681b5d570a6f0b7bb2bad03e956d4 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Sun, 22 Nov 2020 20:29:41 +0000 Subject: [PATCH 193/198] Translated using Weblate (Sardinian) Currently translated at 99.6% (3847 of 3860 strings) --- OsmAnd/res/values-sc/phrases.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index 5998039bd6..f58e0f4dc5 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -3861,4 +3861,19 @@ Ambassada Consoladu Ambassada + Suta-natzionale + Ufìtziu de rapresentàntzia + Cònsole onoràriu + Ufìtziu consolare + Agentzia consolare + Ghiadu dae unu cònsole + Nuntziadura + Setzione de interessos + Filiale + Ghiada dae un\'ambassadore + Ufìtziu de collegamentu + Servìtzios pro sos tzitadinos + Vistos pro immigrantes + Vistos pro no immigrantes + Ufìtziu de collegamentu \ No newline at end of file From c78b8d67b645acf8b7023defbdaa89b404a04e77 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Sun, 22 Nov 2020 18:31:41 +0000 Subject: [PATCH 194/198] Translated using Weblate (Esperanto) Currently translated at 100.0% (3860 of 3860 strings) --- OsmAnd/res/values-eo/phrases.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml index 36f24f20bd..fb0ab54dc6 100644 --- a/OsmAnd/res/values-eo/phrases.xml +++ b/OsmAnd/res/values-eo/phrases.xml @@ -3865,4 +3865,12 @@ Kvazaŭ‑ambasadejo Konsulejo Ambasadejo + ne + jes + ne + jes + ne + jes + subŝtata/provinca oficejo + reprezenta oficejo \ No newline at end of file From a0951c6e461cae49881b5be2a843adefc7b1430b Mon Sep 17 00:00:00 2001 From: Samantaz Fox Date: Sun, 22 Nov 2020 23:28:41 +0000 Subject: [PATCH 195/198] Translated using Weblate (French) Currently translated at 99.8% (3561 of 3568 strings) --- OsmAnd/res/values-fr/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 5784c30f6a..4ed44b9442 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -1,7 +1,7 @@ Modifications hors-ligne - Toujours utiliser l\'édition hors-ligne. + Si le mode d\'édition hors-ligne est activé, les modifications seront enregistrées localement puis envoyées à la demande. Sinon, les modifications seront envoyées immédiatement. Les modifications de points d\'intérêt dans l\'application sont sans effet sur les cartes téléchargées, les modifications sont enregistrées dans un fichier de votre appareil. Téléversement… {0} Points d\'intérêt / Notes ont été téléversés @@ -3969,4 +3969,6 @@ \nMapillary : photos de rue ; \nWeb / Wikimedia : photos de PI réféfencés dans OpenStreetMap. + Utiliser dev.openstreetmap.org plutôt que openstreetmap.org pour tester l\'envoi des notes OSM / Points d\'intérêt / GPX. + Utiliser dev.openstreetmap.org \ No newline at end of file From 8ae721b378157890a885d3db073790d223d63fb8 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sun, 22 Nov 2020 22:47:18 +0000 Subject: [PATCH 196/198] Translated using Weblate (French) Currently translated at 99.8% (3561 of 3568 strings) --- OsmAnd/res/values-fr/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 4ed44b9442..cc12531b01 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3971,4 +3971,6 @@ Utiliser dev.openstreetmap.org plutôt que openstreetmap.org pour tester l\'envoi des notes OSM / Points d\'intérêt / GPX. Utiliser dev.openstreetmap.org + + \ No newline at end of file From c9b6baabfd98b0639a8221e4a2dd4b3b833a72f5 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 23 Nov 2020 02:12:13 +0200 Subject: [PATCH 197/198] small fixes --- ...etweenPointsBottomSheetDialogFragment.java | 287 ++++++++---------- 1 file changed, 135 insertions(+), 152 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java index 9dc8edad74..54bc3469be 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java @@ -2,7 +2,6 @@ package net.osmand.plus.measurementtool; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.util.Pair; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -15,14 +14,14 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import net.osmand.AndroidUtils; -import net.osmand.GPXUtilities; +import net.osmand.GPXUtilities.WptPt; import net.osmand.PlatformUtil; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; -import net.osmand.plus.base.BottomSheetBehaviourDialogFragment; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.base.BottomSheetBehaviourDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.util.MapUtils; @@ -31,10 +30,9 @@ import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.List; -import java.util.Map; -import static net.osmand.plus.UiUtilities.CustomRadioButtonType.START; import static net.osmand.plus.UiUtilities.CustomRadioButtonType.END; +import static net.osmand.plus.UiUtilities.CustomRadioButtonType.START; import static net.osmand.plus.measurementtool.MeasurementEditingContext.DEFAULT_APP_MODE; import static net.osmand.plus.measurementtool.SelectFileBottomSheet.BOTTOM_SHEET_HEIGHT_DP; @@ -67,153 +65,6 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha ALL, } - private String getButtonText(RouteBetweenPointsDialogMode dialogMode) { - switch (dialogType) { - case WHOLE_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.next_segment); - case ALL: - return getString(R.string.whole_track); - } - break; - case NEXT_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.next_segment) + " " + getDescription(false, true); - case ALL: - return getString(R.string.all_next_segments) + " " + getDescription(false, false); - } - break; - case PREV_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.previous_segment) + " " + getDescription(true, true); - case ALL: - return getString(R.string.all_previous_segments) + " " + getDescription(true, false); - } - break; - } - return ""; - } - - private String getButtonDescr(RouteBetweenPointsDialogMode dialogMode) { - switch (dialogType) { - case WHOLE_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.route_between_points_next_segment_button_desc); - case ALL: - return getString(R.string.route_between_points_whole_track_button_desc); - } - break; - case NEXT_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.only_selected_segment_recalc); - case ALL: - return getString(R.string.all_next_segments_will_be_recalc); - } - break; - case PREV_ROUTE_CALCULATION: - switch (dialogMode) { - case SINGLE: - return getString(R.string.only_selected_segment_recalc); - case ALL: - return getString(R.string.all_previous_segments_will_be_recalc); - } - break; - } - return ""; - } - - @NonNull - private String getDescription(boolean before, boolean single) { - MapActivity mapActivity = (MapActivity) getActivity(); - if (mapActivity == null) { - return ""; - } - - MeasurementEditingContext editingCtx = mapActivity.getMapLayers().getMeasurementToolLayer().getEditingCtx(); - int pos = editingCtx.getSelectedPointPosition(); - List points = editingCtx.getPoints(); - - int startIdx; - int endIdx; - if (before) { - startIdx = 1; - endIdx = pos; - } else { - startIdx = pos + 1; - endIdx = points.size() - 1; - } - - float dist = !single ? getDistForAllSegments(points, startIdx, endIdx) : getDistForSingleSegment(editingCtx, points, startIdx, endIdx); - - return OsmAndFormatter.getFormattedDistance(dist, mapActivity.getMyApplication()); - } - - private float getDistForAllSegments(List points, int startIdx, int endIdx) { - float dist = 0; - for (int i = startIdx; i <= endIdx; i++) { - GPXUtilities.WptPt first = points.get(i - 1); - GPXUtilities.WptPt second = points.get(i); - dist += MapUtils.getDistance(first.lat, first.lon, second.lat, second.lon); - } - return dist; - } - - private float getDistForSingleSegment(MeasurementEditingContext editingCtx, List points, int startIdx, int endIdx) { - float dist = 0; - Map, MeasurementEditingContext.RoadSegmentData> roadSegmentDataMap = editingCtx.getRoadSegmentData(); - if (startIdx <= endIdx) { - Pair pair = new Pair<>(points.get(startIdx), points.get(startIdx - 1)); - MeasurementEditingContext.RoadSegmentData data = roadSegmentDataMap.get(pair); - if (data == null) { - dist += MapUtils.getDistance(pair.first.getLatitude(), pair.first.getLongitude(), - pair.second.getLatitude(), pair.second.getLongitude()); - } else { - dist += data.getDistance(); - } - } - return dist; - } - - private void addDelimiterView(LinearLayout container) { - View row = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.divider, container, false); - View divider = row.findViewById(R.id.divider); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) divider.getLayoutParams(); - params.topMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); - params.bottomMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); - container.addView(row); - } - - public void setDefaultDialogMode(RouteBetweenPointsDialogMode defaultDialogMode) { - this.defaultDialogMode = defaultDialogMode; - updateModeButtons(); - } - - public void updateModeButtons() { - UiUtilities.updateCustomRadioButtons(getMyApplication(), customRadioButton, nightMode, - defaultDialogMode == RouteBetweenPointsDialogMode.SINGLE ? START : END); - btnDescription.setText(getButtonDescr(defaultDialogMode)); - } - - private void addProfileView(LinearLayout container, View.OnClickListener onClickListener, Object tag, - Drawable icon, CharSequence title, boolean check) { - View row = UiUtilities.getInflater(getContext(), nightMode) - .inflate(R.layout.bottom_sheet_item_with_radio_btn, container, false); - ((RadioButton) row.findViewById(R.id.compound_button)).setChecked(check); - ImageView imageView = row.findViewById(R.id.icon); - imageView.setImageDrawable(icon); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) imageView.getLayoutParams(); - params.rightMargin = container.getContext().getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin_large); - ((TextView) row.findViewById(R.id.title)).setText(title); - row.setOnClickListener(onClickListener); - row.setTag(tag); - container.addView(row); - } - @Override public void createMenuItems(Bundle savedInstanceState) { Bundle args = getArguments(); @@ -232,6 +83,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha .inflate(R.layout.fragment_route_between_points_bottom_sheet_dialog, null, false); customRadioButton = mainView.findViewById(R.id.custom_radio_buttons); + customRadioButton.setMinimumHeight(getResources().getDimensionPixelSize(R.dimen.route_info_control_buttons_height)); TextView singleModeButton = mainView.findViewById(R.id.left_button); singleModeButton.setText(getButtonText(RouteBetweenPointsDialogMode.SINGLE)); TextView allModeButton = mainView.findViewById(R.id.right_button); @@ -312,6 +164,137 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha super.onDestroyView(); } + private void addDelimiterView(LinearLayout container) { + View row = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.divider, container, false); + View divider = row.findViewById(R.id.divider); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) divider.getLayoutParams(); + params.topMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); + params.bottomMargin = row.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_title_padding_bottom); + container.addView(row); + } + + public void setDefaultDialogMode(RouteBetweenPointsDialogMode defaultDialogMode) { + this.defaultDialogMode = defaultDialogMode; + updateModeButtons(); + } + + public void updateModeButtons() { + UiUtilities.updateCustomRadioButtons(getMyApplication(), customRadioButton, nightMode, + defaultDialogMode == RouteBetweenPointsDialogMode.SINGLE ? START : END); + btnDescription.setText(getButtonDescr(defaultDialogMode)); + } + + private void addProfileView(LinearLayout container, View.OnClickListener onClickListener, Object tag, + Drawable icon, CharSequence title, boolean check) { + View row = UiUtilities.getInflater(getContext(), nightMode) + .inflate(R.layout.bottom_sheet_item_with_radio_btn, container, false); + ((RadioButton) row.findViewById(R.id.compound_button)).setChecked(check); + ImageView imageView = row.findViewById(R.id.icon); + imageView.setImageDrawable(icon); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) imageView.getLayoutParams(); + params.rightMargin = container.getContext().getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin_large); + ((TextView) row.findViewById(R.id.title)).setText(title); + row.setOnClickListener(onClickListener); + row.setTag(tag); + container.addView(row); + } + + private String getButtonText(RouteBetweenPointsDialogMode dialogMode) { + switch (dialogType) { + case WHOLE_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.next_segment); + case ALL: + return getString(R.string.whole_track); + } + break; + case NEXT_ROUTE_CALCULATION: + String nextDescr = getDescription(false, dialogMode); + switch (dialogMode) { + case SINGLE: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.next_segment), nextDescr); + case ALL: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.all_next_segments), nextDescr); + } + break; + case PREV_ROUTE_CALCULATION: + String prevDescr = getDescription(true, dialogMode); + switch (dialogMode) { + case SINGLE: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.previous_segment), prevDescr); + case ALL: + return getString(R.string.ltr_or_rtl_combine_via_space, getString(R.string.all_previous_segments), prevDescr); + } + break; + } + return ""; + } + + private String getButtonDescr(RouteBetweenPointsDialogMode dialogMode) { + switch (dialogType) { + case WHOLE_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.route_between_points_next_segment_button_desc); + case ALL: + return getString(R.string.route_between_points_whole_track_button_desc); + } + break; + case NEXT_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.only_selected_segment_recalc); + case ALL: + return getString(R.string.all_next_segments_will_be_recalc); + } + break; + case PREV_ROUTE_CALCULATION: + switch (dialogMode) { + case SINGLE: + return getString(R.string.only_selected_segment_recalc); + case ALL: + return getString(R.string.all_previous_segments_will_be_recalc); + } + break; + } + return ""; + } + + @NonNull + private String getDescription(boolean before, RouteBetweenPointsDialogMode dialogMode) { + MapActivity mapActivity = (MapActivity) getActivity(); + if (mapActivity == null) { + return ""; + } + MeasurementEditingContext editingCtx = mapActivity.getMapLayers().getMeasurementToolLayer().getEditingCtx(); + int pos = editingCtx.getSelectedPointPosition(); + List points = editingCtx.getPoints(); + + float dist = 0; + if (dialogMode == RouteBetweenPointsDialogMode.SINGLE) { + WptPt selectedPoint = points.get(pos); + WptPt second = points.get(before ? pos - 1 : pos + 1); + dist += MapUtils.getDistance(selectedPoint.lat, selectedPoint.lon, second.lat, second.lon); + } else { + int startIdx; + int endIdx; + if (before) { + startIdx = 1; + endIdx = pos; + } else { + startIdx = pos + 1; + endIdx = points.size() - 1; + } + for (int i = startIdx; i <= endIdx; i++) { + WptPt first = points.get(i - 1); + WptPt second = points.get(i); + dist += MapUtils.getDistance(first.lat, first.lon, second.lat, second.lon); + } + } + return OsmAndFormatter.getFormattedDistance(dist, mapActivity.getMyApplication()); + } + public static void showInstance(FragmentManager fm, Fragment targetFragment, RouteBetweenPointsDialogType dialogType, RouteBetweenPointsDialogMode defaultDialogMode, From 9056c7e97b2b9ab15868e2c5238282894117bf5b Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 23 Nov 2020 03:27:09 +0200 Subject: [PATCH 198/198] Minor fixes --- .../java/net/osmand/binary/RouteDataObject.java | 4 ++-- OsmAnd/src/net/osmand/plus/OsmandApplication.java | 14 +++++++------- .../osmand/plus/activities/SavingTrackHelper.java | 8 ++++---- .../net/osmand/plus/importfiles/ImportHelper.java | 5 ++--- .../osmand/plus/osmedit/EditPoiDialogFragment.java | 1 - 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java b/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java index 38fe091e89..bc81ca667e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/RouteDataObject.java @@ -329,7 +329,7 @@ public class RouteDataObject { public String getDestinationName(String lang, boolean transliterate, boolean direction){ //Issue #3289: Treat destination:ref like a destination, not like a ref String destRef = ((getDestinationRef(direction) == null) || getDestinationRef(direction).equals(getRef(lang, transliterate, direction))) ? "" : getDestinationRef(direction); - String destRef1 = (destRef != null && destRef.isEmpty()) ? "" : destRef + ", "; + String destRef1 = Algorithms.isEmpty(destRef) ? "" : destRef + ", "; if(names != null) { int[] kt = names.keys(); @@ -373,7 +373,7 @@ public class RouteDataObject { return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(destinationDefault) : destinationDefault); } } - return destRef != null && destRef.isEmpty() ? null : destRef; + return Algorithms.isEmpty(destRef) ? null : destRef; } public int getPoint31XTile(int i) { diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index 1a80d43b1f..00bdd97e2d 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -412,8 +412,8 @@ public class OsmandApplication extends MultiDexApplication { if (defaultLocale == null) { defaultLocale = Locale.getDefault(); } - if (lang != null && !lang.isEmpty()) { - if (country != null && !country.isEmpty()) { + if (!Algorithms.isEmpty(lang)) { + if (!Algorithms.isEmpty(country)) { preferredLocale = new Locale(lang, country); } else { preferredLocale = new Locale(lang); @@ -421,9 +421,9 @@ public class OsmandApplication extends MultiDexApplication { } Locale selectedLocale = null; - if (lang != null && !lang.isEmpty() && !config.locale.equals(preferredLocale)) { + if (!Algorithms.isEmpty(lang) && !config.locale.equals(preferredLocale)) { selectedLocale = preferredLocale; - } else if (lang != null && lang.isEmpty() && defaultLocale != null && Locale.getDefault() != defaultLocale) { + } else if (Algorithms.isEmpty(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { selectedLocale = defaultLocale; preferredLocale = null; } @@ -807,17 +807,17 @@ public class OsmandApplication extends MultiDexApplication { } return s; } - + public void setLanguage(Context context) { if (preferredLocale != null) { Configuration config = context.getResources().getConfiguration(); String lang = preferredLocale.getLanguage(); - if (!lang.isEmpty() && !config.locale.getLanguage().equals(lang)) { + if (!Algorithms.isEmpty(lang) && !config.locale.getLanguage().equals(lang)) { preferredLocale = new Locale(lang); Locale.setDefault(preferredLocale); config.locale = preferredLocale; context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); - } else if(lang.isEmpty() && defaultLocale != null && Locale.getDefault() != defaultLocale) { + } else if (Algorithms.isEmpty(lang) && defaultLocale != null && Locale.getDefault() != defaultLocale) { Locale.setDefault(defaultLocale); config.locale = defaultLocale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); diff --git a/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java b/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java index 8b57c68e49..ff7039702e 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java +++ b/OsmAnd/src/net/osmand/plus/activities/SavingTrackHelper.java @@ -210,10 +210,11 @@ public class SavingTrackHelper extends SQLiteOpenHelper { // save file for (final Map.Entry entry : data.entrySet()) { final String f = entry.getKey(); + GPXFile gpx = entry.getValue(); log.debug("Filename: " + f); File fout = new File(dir, f + IndexConstants.GPX_FILE_EXT); - if (!entry.getValue().isEmpty()) { - WptPt pt = entry.getValue().findPointToShow(); + if (!gpx.isEmpty()) { + WptPt pt = gpx.findPointToShow(); String fileName = f + "_" + new SimpleDateFormat("HH-mm_EEE", Locale.US).format(new Date(pt.time)); //$NON-NLS-1$ Integer trackStorageDirectory = ctx.getSettings().TRACK_STORAGE_DIRECTORY.get(); if (!OsmandSettings.REC_DIRECTORY.equals(trackStorageDirectory)) { @@ -236,13 +237,12 @@ public class SavingTrackHelper extends SQLiteOpenHelper { } } - Exception warn = GPXUtilities.writeGpxFile(fout, entry.getValue()); + Exception warn = GPXUtilities.writeGpxFile(fout, gpx); if (warn != null) { warnings.add(warn.getMessage()); return new SaveGpxResult(warnings, new ArrayList()); } - GPXFile gpx = entry.getValue(); GPXTrackAnalysis analysis = gpx.getAnalysis(fout.lastModified()); GpxDataItem item = new GpxDataItem(fout, analysis); ctx.getGpxDbHelper().add(item); diff --git a/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java b/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java index 8190570c2a..09d2064284 100644 --- a/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java +++ b/OsmAnd/src/net/osmand/plus/importfiles/ImportHelper.java @@ -513,10 +513,9 @@ public class ImportHelper { private File getFileToSave(final String fileName, final File importDir, final WptPt pt) { final StringBuilder builder = new StringBuilder(fileName); - if (fileName != null && fileName.isEmpty()) { + if (Algorithms.isEmpty(fileName)) { builder.append("import_").append(new SimpleDateFormat("HH-mm_EEE", Locale.US).format(new Date(pt.time))).append(GPX_FILE_EXT); //$NON-NLS-1$ - } - if (fileName.endsWith(KML_SUFFIX)) { + } else if (fileName.endsWith(KML_SUFFIX)) { builder.replace(builder.length() - KML_SUFFIX.length(), builder.length(), GPX_FILE_EXT); } else if (fileName.endsWith(KMZ_SUFFIX)) { builder.replace(builder.length() - KMZ_SUFFIX.length(), builder.length(), GPX_FILE_EXT); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java index fbf1ae9b96..55b24b7ed4 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java @@ -427,7 +427,6 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { f.setArguments(args); f.show(getChildFragmentManager(), "exceedDialog"); } else if (TextUtils.isEmpty(poiTypeEditText.getText())) { - new HashSet<>(editPoiData.getTagValues().keySet()); if (Algorithms.isEmpty(editPoiData.getTag(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue()))) { SaveExtraValidationDialogFragment f = new SaveExtraValidationDialogFragment(); Bundle args = new Bundle();