From 8b00011ee86d27691acb2afb1ca07891f4ee892f Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 14 Nov 2017 17:45:58 +0200 Subject: [PATCH 001/157] Add sort menu item, change share icon --- .../osmand/plus/audionotes/NotesFragment.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 1c49bd9c97..37d9f6d914 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -170,8 +170,17 @@ public class NotesFragment extends OsmAndListFragment { } ((ActionBarProgressActivity) getActivity()).updateListViewFooter(footerView); - MenuItem item = menu.add(R.string.shared_string_share). - setIcon(R.drawable.ic_action_export); + MenuItem item = menu.add(R.string.shared_string_sort).setIcon(R.drawable.ic_action_list_sort); + item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + Toast.makeText(getContext(), "Sort", Toast.LENGTH_SHORT).show(); + return true; + } + }); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + + item = menu.add(R.string.shared_string_share).setIcon(R.drawable.ic_action_gshare_dark); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -179,11 +188,9 @@ public class NotesFragment extends OsmAndListFragment { return true; } }); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - item = menu.add(R.string.shared_string_delete_all). - setIcon(R.drawable.ic_action_delete_dark); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -191,7 +198,7 @@ public class NotesFragment extends OsmAndListFragment { return true; } }); - + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } private void enterSelectionMode(int type){ @@ -332,7 +339,7 @@ public class NotesFragment extends OsmAndListFragment { if(type == MODE_DELETE) { item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark); } else { - item = menu.add(R.string.shared_string_share).setIcon(R.drawable.ic_action_export); + item = menu.add(R.string.shared_string_share).setIcon(R.drawable.ic_action_gshare_dark); } item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override From ae1591362623f41cf3d4a5da6c24a38b48a3fba9 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 14 Nov 2017 19:06:09 +0200 Subject: [PATCH 002/157] Add sort menu --- ...ragment_notes_sort_bottom_sheet_dialog.xml | 111 ++++++++++++++++++ OsmAnd/res/values/strings.xml | 2 + .../osmand/plus/audionotes/NotesFragment.java | 5 +- .../SortBottomSheetDialogFragment.java | 70 +++++++++++ 4 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 OsmAnd/res/layout/fragment_notes_sort_bottom_sheet_dialog.xml create mode 100644 OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java diff --git a/OsmAnd/res/layout/fragment_notes_sort_bottom_sheet_dialog.xml b/OsmAnd/res/layout/fragment_notes_sort_bottom_sheet_dialog.xml new file mode 100644 index 0000000000..a307700dd6 --- /dev/null +++ b/OsmAnd/res/layout/fragment_notes_sort_bottom_sheet_dialog.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index fc0f61819f..e23a3d74a4 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,8 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + By date + By type Appearance on the map Select track waypoints of which OsmAnd will add to markers Select which favourite group you want to add to markers diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 37d9f6d914..d187308369 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -174,7 +174,10 @@ public class NotesFragment extends OsmAndListFragment { item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - Toast.makeText(getContext(), "Sort", Toast.LENGTH_SHORT).show(); + // todo: handle screen rotation + SortBottomSheetDialogFragment fragment = new SortBottomSheetDialogFragment(); + fragment.setUsedOnMap(false); + fragment.show(getChildFragmentManager(), SortBottomSheetDialogFragment.TAG); return true; } }); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java new file mode 100644 index 0000000000..668c9cc43d --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java @@ -0,0 +1,70 @@ +package net.osmand.plus.audionotes; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; + +import net.osmand.plus.R; +import net.osmand.plus.base.MenuBottomSheetDialogFragment; + +public class SortBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { + + public static final String TAG = "SortBottomSheetDialogFragment"; + + private SortFragmentListener listener; + + public void setListener(SortFragmentListener listener) { + this.listener = listener; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme; + + final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes), + R.layout.fragment_notes_sort_bottom_sheet_dialog, null); + + ((ImageView) mainView.findViewById(R.id.by_type_icon)).setImageDrawable(getContentIcon(R.drawable.ic_groped_by_type)); + ((ImageView) mainView.findViewById(R.id.by_date_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_sort_by_date)); + + mainView.findViewById(R.id.by_type_row).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + notifyListenerAndDismiss(); + } + }); + mainView.findViewById(R.id.by_date_row).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + notifyListenerAndDismiss(); + } + }); + mainView.findViewById(R.id.close_row).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + dismiss(); + } + }); + + setupHeightAndBackground(mainView, R.id.scroll_view); + + return mainView; + } + + private void notifyListenerAndDismiss() { + if (listener != null) { + listener.onSortModeChanged(); + } + dismiss(); + } + + interface SortFragmentListener { + void onSortModeChanged(); + } +} From 1675fa845eea720eb0e92c382a54a0b185c568d7 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Wed, 15 Nov 2017 11:20:07 +0200 Subject: [PATCH 003/157] Add setting for notes sort by mode; add sort menu listener --- .../src/net/osmand/plus/OsmandSettings.java | 15 +++++++++++++++ .../osmand/plus/audionotes/NotesFragment.java | 19 ++++++++++++++++++- .../SortBottomSheetDialogFragment.java | 16 +++++++++++----- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index b79ae13a91..423317eb3d 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -1333,6 +1333,8 @@ public class OsmandSettings { MAP_MARKERS_MODE.setModeDefaultValue(ApplicationMode.PEDESTRIAN, MapMarkersMode.TOOLBAR); } + public final CommonPreference NOTES_SORT_BY_MODE = new EnumIntPreference<>("notes_sort_by_mode", NotesSortByMode.BY_DATE, NotesSortByMode.values()); + public final OsmandPreference ANIMATE_MY_LOCATION = new BooleanPreference("animate_my_location", true).makeGlobal().cache(); public final OsmandPreference ROUTE_MAP_MARKERS_START_MY_LOC = new BooleanPreference("route_map_markers_start_my_loc", false).makeGlobal().cache(); @@ -3157,6 +3159,19 @@ public class OsmandSettings { } } + public enum NotesSortByMode { + BY_TYPE, + BY_DATE; + + public boolean isByType() { + return this == BY_TYPE; + } + + public boolean isByDate() { + return this == BY_DATE; + } + } + public enum MapMarkersOrderByMode { CUSTOM, DISTANCE_DESC, diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index d187308369..4384db987e 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -7,6 +7,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; import android.support.v4.content.FileProvider; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; @@ -40,6 +41,7 @@ import net.osmand.plus.activities.ActionBarProgressActivity; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; +import net.osmand.plus.audionotes.SortBottomSheetDialogFragment.SortFragmentListener; import net.osmand.plus.base.OsmAndListFragment; import net.osmand.plus.dialogs.DirectionsDialogs; import net.osmand.plus.helpers.AndroidUiHelper; @@ -76,6 +78,12 @@ public class NotesFragment extends OsmAndListFragment { @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + // Handle screen rotation: + Fragment sortByMenu = getChildFragmentManager().findFragmentByTag(SortBottomSheetDialogFragment.TAG); + if (sortByMenu != null) { + ((SortBottomSheetDialogFragment) sortByMenu).setListener(createSortFragmentListener()); + } + setHasOptionsMenu(true); plugin = OsmandPlugin.getEnabledPlugin(AudioVideoNotesPlugin.class); View view = getActivity().getLayoutInflater().inflate(R.layout.update_index, container, false); @@ -174,9 +182,9 @@ public class NotesFragment extends OsmAndListFragment { item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - // todo: handle screen rotation SortBottomSheetDialogFragment fragment = new SortBottomSheetDialogFragment(); fragment.setUsedOnMap(false); + fragment.setListener(createSortFragmentListener()); fragment.show(getChildFragmentManager(), SortBottomSheetDialogFragment.TAG); return true; } @@ -203,6 +211,15 @@ public class NotesFragment extends OsmAndListFragment { }); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } + + private SortFragmentListener createSortFragmentListener() { + return new SortFragmentListener() { + @Override + public void onSortModeChanged() { + Toast.makeText(getContext(), "Sort by mode changed", Toast.LENGTH_SHORT).show(); + } + }; + } private void enterSelectionMode(int type){ enterDeleteMode(type); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java index 668c9cc43d..88831f46ae 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java @@ -9,6 +9,8 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; +import net.osmand.plus.OsmandSettings; +import net.osmand.plus.OsmandSettings.NotesSortByMode; import net.osmand.plus.R; import net.osmand.plus.base.MenuBottomSheetDialogFragment; @@ -36,13 +38,13 @@ public class SortBottomSheetDialogFragment extends MenuBottomSheetDialogFragment mainView.findViewById(R.id.by_type_row).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - notifyListenerAndDismiss(); + selectSortByMode(NotesSortByMode.BY_TYPE); } }); mainView.findViewById(R.id.by_date_row).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - notifyListenerAndDismiss(); + selectSortByMode(NotesSortByMode.BY_DATE); } }); mainView.findViewById(R.id.close_row).setOnClickListener(new OnClickListener() { @@ -57,9 +59,13 @@ public class SortBottomSheetDialogFragment extends MenuBottomSheetDialogFragment return mainView; } - private void notifyListenerAndDismiss() { - if (listener != null) { - listener.onSortModeChanged(); + private void selectSortByMode(NotesSortByMode mode) { + final OsmandSettings.CommonPreference sortByMode = getMyApplication().getSettings().NOTES_SORT_BY_MODE; + if (sortByMode.get() != mode) { + sortByMode.set(mode); + if (listener != null) { + listener.onSortModeChanged(); + } } dismiss(); } From 5130a39c2f8aa30cf30c3faf1401a6a206208725 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Wed, 15 Nov 2017 12:46:43 +0200 Subject: [PATCH 004/157] Rename SortBottomSheetDialogFragment --- .../src/net/osmand/plus/audionotes/NotesFragment.java | 10 +++++----- ...t.java => SortByMenuBottomSheetDialogFragment.java} | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) rename OsmAnd/src/net/osmand/plus/audionotes/{SortBottomSheetDialogFragment.java => SortByMenuBottomSheetDialogFragment.java} (93%) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 4384db987e..36b3c50d23 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -41,7 +41,7 @@ import net.osmand.plus.activities.ActionBarProgressActivity; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; -import net.osmand.plus.audionotes.SortBottomSheetDialogFragment.SortFragmentListener; +import net.osmand.plus.audionotes.SortByMenuBottomSheetDialogFragment.SortFragmentListener; import net.osmand.plus.base.OsmAndListFragment; import net.osmand.plus.dialogs.DirectionsDialogs; import net.osmand.plus.helpers.AndroidUiHelper; @@ -79,9 +79,9 @@ public class NotesFragment extends OsmAndListFragment { @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // Handle screen rotation: - Fragment sortByMenu = getChildFragmentManager().findFragmentByTag(SortBottomSheetDialogFragment.TAG); + Fragment sortByMenu = getChildFragmentManager().findFragmentByTag(SortByMenuBottomSheetDialogFragment.TAG); if (sortByMenu != null) { - ((SortBottomSheetDialogFragment) sortByMenu).setListener(createSortFragmentListener()); + ((SortByMenuBottomSheetDialogFragment) sortByMenu).setListener(createSortFragmentListener()); } setHasOptionsMenu(true); @@ -182,10 +182,10 @@ public class NotesFragment extends OsmAndListFragment { item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - SortBottomSheetDialogFragment fragment = new SortBottomSheetDialogFragment(); + SortByMenuBottomSheetDialogFragment fragment = new SortByMenuBottomSheetDialogFragment(); fragment.setUsedOnMap(false); fragment.setListener(createSortFragmentListener()); - fragment.show(getChildFragmentManager(), SortBottomSheetDialogFragment.TAG); + fragment.show(getChildFragmentManager(), SortByMenuBottomSheetDialogFragment.TAG); return true; } }); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/SortByMenuBottomSheetDialogFragment.java similarity index 93% rename from OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java rename to OsmAnd/src/net/osmand/plus/audionotes/SortByMenuBottomSheetDialogFragment.java index 88831f46ae..96e7d6b185 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/SortBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/SortByMenuBottomSheetDialogFragment.java @@ -14,9 +14,9 @@ import net.osmand.plus.OsmandSettings.NotesSortByMode; import net.osmand.plus.R; import net.osmand.plus.base.MenuBottomSheetDialogFragment; -public class SortBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { +public class SortByMenuBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { - public static final String TAG = "SortBottomSheetDialogFragment"; + public static final String TAG = "SortByMenuBottomSheetDialogFragment"; private SortFragmentListener listener; From d58a219c107fbe4793c9080b2787974df9a3174f Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Wed, 15 Nov 2017 15:48:29 +0200 Subject: [PATCH 005/157] Replace item popup menu with bottom sheet menu --- ...nt_notes_item_menu_bottom_sheet_dialog.xml | 220 ++++++++++++++++++ .../ItemMenuBottomSheetDialogFragment.java | 137 +++++++++++ .../osmand/plus/audionotes/NotesFragment.java | 118 ++++------ 3 files changed, 402 insertions(+), 73 deletions(-) create mode 100644 OsmAnd/res/layout/fragment_notes_item_menu_bottom_sheet_dialog.xml create mode 100644 OsmAnd/src/net/osmand/plus/audionotes/ItemMenuBottomSheetDialogFragment.java diff --git a/OsmAnd/res/layout/fragment_notes_item_menu_bottom_sheet_dialog.xml b/OsmAnd/res/layout/fragment_notes_item_menu_bottom_sheet_dialog.xml new file mode 100644 index 0000000000..c7f722c621 --- /dev/null +++ b/OsmAnd/res/layout/fragment_notes_item_menu_bottom_sheet_dialog.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/src/net/osmand/plus/audionotes/ItemMenuBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/ItemMenuBottomSheetDialogFragment.java new file mode 100644 index 0000000000..e0184bf6e0 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/audionotes/ItemMenuBottomSheetDialogFragment.java @@ -0,0 +1,137 @@ +package net.osmand.plus.audionotes; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import net.osmand.plus.R; +import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; +import net.osmand.plus.base.MenuBottomSheetDialogFragment; + +import java.text.DecimalFormat; +import java.text.NumberFormat; + + +public class ItemMenuBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { + + public static final String TAG = "ItemMenuBottomSheetDialogFragment"; + + private ItemMenuFragmentListener listener; + private Recording recording; + + public void setListener(ItemMenuFragmentListener listener) { + this.listener = listener; + } + + public void setRecording(Recording recording) { + this.recording = recording; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme; + + final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes), + R.layout.fragment_notes_item_menu_bottom_sheet_dialog, null); + + if (recording != null) { + NumberFormat f = new DecimalFormat("#0.00000"); + ((TextView) mainView.findViewById(R.id.title_text_view)) + .setText(recording.getName(getActivity(), true)); + ((TextView) mainView.findViewById(R.id.play_text_view)) + .setText(recording.isPhoto() ? R.string.watch : R.string.recording_context_menu_play); + ((TextView) mainView.findViewById(R.id.show_on_map_descr_text_view)) + .setText(f.format(recording.getLatitude()) + ", " + f.format(recording.getLongitude())); + ((ImageView) mainView.findViewById(R.id.play_icon)) + .setImageDrawable(getContentIcon(recording.isPhoto() ? R.drawable.ic_action_view : R.drawable.ic_play_dark)); + } + + ((ImageView) mainView.findViewById(R.id.share_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_gshare_dark)); + ((ImageView) mainView.findViewById(R.id.show_on_map_icon)).setImageDrawable(getContentIcon(R.drawable.ic_show_on_map)); + ((ImageView) mainView.findViewById(R.id.rename_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_edit_dark)); + ((ImageView) mainView.findViewById(R.id.delete_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_delete_dark)); + + mainView.findViewById(R.id.play_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null && recording != null) { + listener.playOnClick(recording); + } + dismiss(); + } + }); + mainView.findViewById(R.id.share_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null && recording != null) { + listener.shareOnClick(recording); + } + dismiss(); + } + }); + mainView.findViewById(R.id.show_on_map_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null && recording != null) { + listener.showOnMapOnClick(recording); + } + dismiss(); + } + }); + mainView.findViewById(R.id.rename_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null && recording != null) { + listener.renameOnClick(recording); + } + dismiss(); + } + }); + mainView.findViewById(R.id.delete_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null && recording != null) { + listener.deleteOnClick(recording); + } + dismiss(); + } + }); + mainView.findViewById(R.id.close_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dismiss(); + } + }); + + setupHeightAndBackground(mainView, R.id.scroll_view); + + return mainView; + } + + @Override + public void onDestroyView() { + if (getDialog() != null) { + getDialog().setDismissMessage(null); + } + super.onDestroyView(); + } + + interface ItemMenuFragmentListener { + + void playOnClick(Recording recording); + + void shareOnClick(Recording recording); + + void showOnMapOnClick(Recording recording); + + void renameOnClick(Recording recording); + + void deleteOnClick(Recording recording); + } +} diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 36b3c50d23..6ee1e843ec 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -3,16 +3,14 @@ package net.osmand.plus.audionotes; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; import android.support.v4.content.FileProvider; -import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; import android.support.v7.view.ActionMode; -import android.support.v7.widget.PopupMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -33,7 +31,6 @@ import net.osmand.data.PointDescription; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; -import net.osmand.plus.IconsCache; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; @@ -41,9 +38,9 @@ import net.osmand.plus.activities.ActionBarProgressActivity; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; +import net.osmand.plus.audionotes.ItemMenuBottomSheetDialogFragment.ItemMenuFragmentListener; import net.osmand.plus.audionotes.SortByMenuBottomSheetDialogFragment.SortFragmentListener; import net.osmand.plus.base.OsmAndListFragment; -import net.osmand.plus.dialogs.DirectionsDialogs; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.myplaces.FavoritesActivity; import net.osmand.util.Algorithms; @@ -70,7 +67,7 @@ public class NotesFragment extends OsmAndListFragment { private final static int MODE_DELETE = 100; private final static int MODE_SHARE = 101; - + private ActionMode actionMode; private ArrayList selected = new ArrayList<>(); @@ -79,10 +76,15 @@ public class NotesFragment extends OsmAndListFragment { @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // Handle screen rotation: - Fragment sortByMenu = getChildFragmentManager().findFragmentByTag(SortByMenuBottomSheetDialogFragment.TAG); + FragmentManager fm = getChildFragmentManager(); + Fragment sortByMenu = fm.findFragmentByTag(SortByMenuBottomSheetDialogFragment.TAG); if (sortByMenu != null) { ((SortByMenuBottomSheetDialogFragment) sortByMenu).setListener(createSortFragmentListener()); } + Fragment itemMenu = fm.findFragmentByTag(ItemMenuBottomSheetDialogFragment.TAG); + if (itemMenu != null) { + ((ItemMenuBottomSheetDialogFragment) itemMenu).setListener(createItemMenuFragmentListener()); + } setHasOptionsMenu(true); plugin = OsmandPlugin.getEnabledPlugin(AudioVideoNotesPlugin.class); @@ -104,12 +106,12 @@ public class NotesFragment extends OsmAndListFragment { }); return view; } - + @Override public ArrayAdapter getAdapter() { return listAdapter; } - + private void selectAll() { for (int i = 0; i < listAdapter.getCount(); i++) { Recording point = listAdapter.getItem(i); @@ -220,18 +222,18 @@ public class NotesFragment extends OsmAndListFragment { } }; } - + private void enterSelectionMode(int type){ enterDeleteMode(type); } - + public OsmandActionBarActivity getActionBarActivity() { if (getActivity() instanceof OsmandActionBarActivity) { return (OsmandActionBarActivity) getActivity(); } return null; } - + private void enableSelectionMode(boolean selectionMode) { this.selectionMode = selectionMode; View view = getView(); @@ -242,7 +244,7 @@ public class NotesFragment extends OsmAndListFragment { ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); } } - + private void updateSelectionTitle(ActionMode m){ if(selected.size() > 0) { m.setTitle(selected.size() + " " + getMyApplication().getString(R.string.shared_string_selected_lowercase)); @@ -250,12 +252,12 @@ public class NotesFragment extends OsmAndListFragment { m.setTitle(""); } } - + private void updateSelectionMode(ActionMode m) { updateSelectionTitle(m); refreshSelectAll(); } - + private void refreshSelectAll() { View view = getView(); if (view == null) { @@ -271,7 +273,7 @@ public class NotesFragment extends OsmAndListFragment { } selectAll.setChecked(true); } - + private void deleteItems(final ArrayList selected) { AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); b.setMessage(getString(R.string.local_recordings_delete_all_confirm, selected.size())); @@ -290,9 +292,9 @@ public class NotesFragment extends OsmAndListFragment { } }); b.setNegativeButton(R.string.shared_string_cancel, null); - b.show(); + b.show(); } - + private void shareItems(ArrayList selected) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); @@ -319,7 +321,7 @@ public class NotesFragment extends OsmAndListFragment { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(Intent.createChooser(intent, getString(R.string.share_note))); } - + private File generateGPXForRecordings(ArrayList selected) { // File tmpFile = getMyApplication().getAppPath("cache/noteLocations.gpx"); File tmpFile = new File(getActivity().getCacheDir(), "share/noteLocations.gpx"); @@ -373,7 +375,7 @@ public class NotesFragment extends OsmAndListFragment { return true; } }); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); selected.clear(); listAdapter.notifyDataSetInvalidated(); updateSelectionMode(mode); @@ -417,7 +419,7 @@ public class NotesFragment extends OsmAndListFragment { public void delete(Recording pnt) { remove(pnt); - + } @Override @@ -438,8 +440,8 @@ public class NotesFragment extends OsmAndListFragment { // ((ImageView) row.findViewById(R.id.play)).setImageDrawable(getMyApplication().getIconsCache() // .getIcon(R.drawable.ic_play_dark)); row.findViewById(R.id.play).setVisibility(View.GONE); - - + + final CheckBox ch = (CheckBox) row.findViewById(R.id.check_local_index); ImageButton options = (ImageButton) row.findViewById(R.id.options); options.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); @@ -459,11 +461,16 @@ public class NotesFragment extends OsmAndListFragment { options.setVisibility(View.VISIBLE); ch.setVisibility(View.GONE); } - + options.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - openPopUpMenu(v, recording); + ItemMenuBottomSheetDialogFragment fragment = new ItemMenuBottomSheetDialogFragment(); + fragment.setUsedOnMap(false); + fragment.setListener(createItemMenuFragmentListener()); + fragment.setRecording(recording); + fragment.setRetainInstance(true); + fragment.show(getChildFragmentManager(), ItemMenuBottomSheetDialogFragment.TAG); } }); row.setOnClickListener(new View.OnClickListener() { @@ -479,7 +486,7 @@ public class NotesFragment extends OsmAndListFragment { }); return row; } - + public void onItemSelect(CheckBox ch, Recording child) { if (ch.isChecked()) { selected.add(child); @@ -497,43 +504,15 @@ public class NotesFragment extends OsmAndListFragment { MapActivity.launchMapActivityMoveToTop(getActivity()); } - private void openPopUpMenu(View v, final AudioVideoNotesPlugin.Recording recording) { - IconsCache iconsCache = getMyApplication().getIconsCache(); - final PopupMenu optionsMenu = new PopupMenu(getActivity(), v); - DirectionsDialogs.setupPopUpMenuIcon(optionsMenu); - MenuItem item; - boolean isPhoto = recording.isPhoto(); - Drawable playIcon; - if (isPhoto) { - playIcon = getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_action_view); - } else { - playIcon = getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_play_dark); - } - item = optionsMenu.getMenu().add(isPhoto ? R.string.watch : R.string.recording_context_menu_play) - .setIcon(playIcon); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + private ItemMenuFragmentListener createItemMenuFragmentListener() { + return new ItemMenuFragmentListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public void playOnClick(Recording recording) { plugin.playRecording(getActivity(), recording); - return true; } - }); - item = optionsMenu.getMenu().add(R.string.shared_string_show_on_map).setIcon( - iconsCache.getThemedIcon(R.drawable.ic_show_on_map)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override - public boolean onMenuItemClick(MenuItem item) { - showOnMap(recording); - return true; - } - }); - - item = optionsMenu.getMenu().add(R.string.shared_string_share) - .setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_gshare_dark)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { + public void shareOnClick(Recording recording) { Intent sharingIntent = new Intent(Intent.ACTION_SEND); if (recording.isPhoto()) { Uri screenshotUri = Uri.parse(recording.getFile().getAbsolutePath()); @@ -549,25 +528,20 @@ public class NotesFragment extends OsmAndListFragment { sharingIntent.putExtra(Intent.EXTRA_STREAM, videoUri); } startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_note))); - return true; } - }); - item = optionsMenu.getMenu().add(R.string.shared_string_rename) - .setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_edit_dark)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public void showOnMapOnClick(Recording recording) { + showOnMap(recording); + } + + @Override + public void renameOnClick(Recording recording) { editNote(recording); - return true; } - }); - item = optionsMenu.getMenu().add(R.string.recording_context_menu_delete) - .setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_delete_dark)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public void deleteOnClick(final Recording recording) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.recording_delete_confirm); builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { @@ -579,10 +553,8 @@ public class NotesFragment extends OsmAndListFragment { }); builder.setNegativeButton(R.string.shared_string_cancel, null); builder.show(); - return true; } - }); - optionsMenu.show(); + }; } private void editNote(final Recording recording) { From 8216b856ccb844e4cb9965deb1ddb676c441ec69 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Wed, 15 Nov 2017 17:20:37 +0200 Subject: [PATCH 006/157] Format code --- .../osmand/plus/audionotes/NotesFragment.java | 186 ++++++++---------- 1 file changed, 86 insertions(+), 100 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 6ee1e843ec..84b80dacef 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -56,21 +56,22 @@ import java.util.Iterator; import java.util.List; public class NotesFragment extends OsmAndListFragment { + private static final Log LOG = PlatformUtil.getLog(NotesFragment.class); + private static final int MODE_DELETE = 100; + private static final int MODE_SHARE = 101; AudioVideoNotesPlugin plugin; - List items; + List items; NotesAdapter listAdapter; + private View footerView; private boolean selectionMode = false; - private final static int MODE_DELETE = 100; - private final static int MODE_SHARE = 101; - private ActionMode actionMode; - private ArrayList selected = new ArrayList<>(); + private ArrayList selected = new ArrayList<>(); Recording shareLocationFile = new Recording(new File(".")); @Override @@ -122,7 +123,7 @@ public class NotesFragment extends OsmAndListFragment { listAdapter.notifyDataSetInvalidated(); } - private void deselectAll(){ + private void deselectAll() { selected.clear(); listAdapter.notifyDataSetInvalidated(); } @@ -130,10 +131,8 @@ public class NotesFragment extends OsmAndListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - getListView().setBackgroundColor( - getResources().getColor( - getMyApplication().getSettings().isLightContent() ? R.color.ctx_menu_info_view_bg_light - : R.color.ctx_menu_info_view_bg_dark)); + getListView().setBackgroundColor(getResources().getColor(getMyApplication().getSettings() + .isLightContent() ? R.color.ctx_menu_info_view_bg_light : R.color.ctx_menu_info_view_bg_dark)); } @Override @@ -143,7 +142,6 @@ public class NotesFragment extends OsmAndListFragment { sortItemsDescending(); ListView listView = getListView(); if (items.size() > 0 && footerView == null) { - //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, null, false); listView.addFooterView(footerView); listView.setHeaderDividersEnabled(false); @@ -223,8 +221,63 @@ public class NotesFragment extends OsmAndListFragment { }; } - private void enterSelectionMode(int type){ - enterDeleteMode(type); + private void enterSelectionMode(final int type) { + actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() { + + @Override + public boolean onCreateActionMode(final ActionMode mode, Menu menu) { + LOG.debug("onCreateActionMode"); + if (type == MODE_SHARE) { + listAdapter.insert(shareLocationFile, 0); + } + switchSelectionMode(true); + MenuItem item; + if (type == MODE_DELETE) { + item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark); + } else { + item = menu.add(R.string.shared_string_share).setIcon(R.drawable.ic_action_gshare_dark); + } + item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + if (type == MODE_DELETE) { + deleteItems(selected); + } else if (type == MODE_SHARE) { + shareItems(selected); + } + mode.finish(); + return true; + } + }); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + selected.clear(); + listAdapter.notifyDataSetInvalidated(); + updateSelectionMode(mode); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + LOG.debug("onPrepareActionMode"); + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { + LOG.debug("onActionItemClicked"); + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + LOG.debug("onDestroyActionMode"); + if (type == MODE_SHARE) { + listAdapter.remove(shareLocationFile); + } + switchSelectionMode(false); + listAdapter.notifyDataSetInvalidated(); + } + }); } public OsmandActionBarActivity getActionBarActivity() { @@ -234,21 +287,21 @@ public class NotesFragment extends OsmAndListFragment { return null; } - private void enableSelectionMode(boolean selectionMode) { - this.selectionMode = selectionMode; + private void switchSelectionMode(boolean enable) { + this.selectionMode = enable; View view = getView(); if (view != null) { view.findViewById(R.id.select_all).setVisibility(selectionMode ? View.VISIBLE : View.GONE); - ((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode && - AndroidUiHelper.isOrientationPortrait(getActivity())); + ((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode + && AndroidUiHelper.isOrientationPortrait(getActivity())); ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); } } - private void updateSelectionTitle(ActionMode m){ - if(selected.size() > 0) { + private void updateSelectionTitle(ActionMode m) { + if (selected.size() > 0) { m.setTitle(selected.size() + " " + getMyApplication().getString(R.string.shared_string_selected_lowercase)); - } else{ + } else { m.setTitle(""); } } @@ -288,7 +341,6 @@ public class NotesFragment extends OsmAndListFragment { listAdapter.delete(pnt); } listAdapter.notifyDataSetChanged(); - } }); b.setNegativeButton(R.string.shared_string_cancel, null); @@ -300,15 +352,15 @@ public class NotesFragment extends OsmAndListFragment { intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType("image/*"); /* This example is sharing jpeg images. */ ArrayList files = new ArrayList(); - for(Recording path : selected) { - if(path == shareLocationFile) { + for (Recording path : selected) { + if (path == shareLocationFile) { File fl = generateGPXForRecordings(selected); - if(fl != null) { + if (fl != null) { files.add(FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".fileprovider", fl)); } } else { File src = path.getFile(); - File dst = new File(getActivity().getCacheDir(), "share/"+src.getName()); + File dst = new File(getActivity().getCacheDir(), "share/" + src.getName()); try { Algorithms.fileCopy(src, dst); files.add(FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".fileprovider", dst)); @@ -323,14 +375,13 @@ public class NotesFragment extends OsmAndListFragment { } private File generateGPXForRecordings(ArrayList selected) { -// File tmpFile = getMyApplication().getAppPath("cache/noteLocations.gpx"); File tmpFile = new File(getActivity().getCacheDir(), "share/noteLocations.gpx"); tmpFile.getParentFile().mkdirs(); GPXFile file = new GPXFile(); - for(Recording r : selected) { - if(r != shareLocationFile) { + for (Recording r : selected) { + if (r != shareLocationFile) { String desc = r.getDescriptionName(r.getFileName()); - if(desc == null) { + if (desc == null) { desc = r.getFileName(); } WptPt wpt = new WptPt(); @@ -347,79 +398,18 @@ public class NotesFragment extends OsmAndListFragment { return tmpFile; } - private void enterDeleteMode(final int type) { - actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() { - - @Override - public boolean onCreateActionMode(final ActionMode mode, Menu menu) { - LOG.debug("onCreateActionMode"); - if(type == MODE_SHARE) { - listAdapter.insert(shareLocationFile, 0); - } - enableSelectionMode(true); - MenuItem item; - if(type == MODE_DELETE) { - item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark); - } else { - item = menu.add(R.string.shared_string_share).setIcon(R.drawable.ic_action_gshare_dark); - } - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - if(type == MODE_DELETE) { - deleteItems(selected); - } else if(type == MODE_SHARE) { - shareItems(selected); - } - mode.finish(); - return true; - } - }); - item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - selected.clear(); - listAdapter.notifyDataSetInvalidated(); - updateSelectionMode(mode); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - LOG.debug("onPrepareActionMode"); - return false; - } - - @Override - public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { - LOG.debug("onActionItemClicked"); - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - LOG.debug("onDestroyActionMode"); - if(type == MODE_SHARE) { - listAdapter.remove(shareLocationFile); - } - enableSelectionMode(false); - listAdapter.notifyDataSetInvalidated(); - } - - }); - } - public OsmandApplication getMyApplication() { return (OsmandApplication) getActivity().getApplication(); } - class NotesAdapter extends ArrayAdapter { + class NotesAdapter extends ArrayAdapter { - NotesAdapter(List recordingList) { + NotesAdapter(List recordingList) { super(getActivity(), R.layout.note, recordingList); } public void delete(Recording pnt) { remove(pnt); - } @Override @@ -430,22 +420,19 @@ public class NotesFragment extends OsmAndListFragment { row = inflater.inflate(R.layout.note, parent, false); } - final AudioVideoNotesPlugin.Recording recording = getItem(position); + final Recording recording = getItem(position); if (recording == shareLocationFile) { ((TextView) row.findViewById(R.id.name)).setText(R.string.av_locations); ((TextView) row.findViewById(R.id.description)).setText(R.string.av_locations_descr); } else { DashAudioVideoNotesFragment.getNoteView(recording, row, getMyApplication()); } -// ((ImageView) row.findViewById(R.id.play)).setImageDrawable(getMyApplication().getIconsCache() -// .getIcon(R.drawable.ic_play_dark)); row.findViewById(R.id.play).setVisibility(View.GONE); - final CheckBox ch = (CheckBox) row.findViewById(R.id.check_local_index); ImageButton options = (ImageButton) row.findViewById(R.id.options); options.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); - if(selectionMode) { + if (selectionMode) { options.setVisibility(View.GONE); ch.setVisibility(View.VISIBLE); ch.setChecked(selected.contains(recording)); @@ -499,8 +486,8 @@ public class NotesFragment extends OsmAndListFragment { private void showOnMap(Recording recording) { getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15, - new PointDescription(recording.getSearchHistoryType(), recording.getName(getActivity(), true)), true, - recording); //$NON-NLS-1$ + new PointDescription(recording.getSearchHistoryType(), recording.getName(getActivity(), true)), + true, recording); MapActivity.launchMapActivityMoveToTop(getActivity()); } @@ -579,5 +566,4 @@ public class NotesFragment extends OsmAndListFragment { builder.create().show(); editText.requestFocus(); } - } From b3438fe4309fa4c6348fad974db3cd502639d1fa Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Wed, 15 Nov 2017 19:09:07 +0200 Subject: [PATCH 007/157] Create layout for list header --- OsmAnd/res/layout/list_item_header.xml | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 OsmAnd/res/layout/list_item_header.xml diff --git a/OsmAnd/res/layout/list_item_header.xml b/OsmAnd/res/layout/list_item_header.xml new file mode 100644 index 0000000000..b1b64d6641 --- /dev/null +++ b/OsmAnd/res/layout/list_item_header.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + From 3500c89c4625e7fdf5dcb60dad3b0f743de84afc Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Thu, 16 Nov 2017 11:59:10 +0200 Subject: [PATCH 008/157] Refactor code --- .../osmand/plus/audionotes/NotesFragment.java | 376 ++++++++---------- .../audionotes/adapters/NotesAdapter.java | 113 ++++++ 2 files changed, 279 insertions(+), 210 deletions(-) create mode 100644 OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 84b80dacef..639faaac68 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -21,7 +21,6 @@ import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.EditText; -import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -31,7 +30,6 @@ import net.osmand.data.PointDescription; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; -import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.ActionBarProgressActivity; @@ -40,6 +38,8 @@ import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; import net.osmand.plus.audionotes.ItemMenuBottomSheetDialogFragment.ItemMenuFragmentListener; import net.osmand.plus.audionotes.SortByMenuBottomSheetDialogFragment.SortFragmentListener; +import net.osmand.plus.audionotes.adapters.NotesAdapter; +import net.osmand.plus.audionotes.adapters.NotesAdapter.NotesAdapterListener; import net.osmand.plus.base.OsmAndListFragment; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.myplaces.FavoritesActivity; @@ -53,27 +53,28 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; public class NotesFragment extends OsmAndListFragment { + public static final Recording SHARE_LOCATION_FILE = new Recording(new File(".")); + private static final Log LOG = PlatformUtil.getLog(NotesFragment.class); private static final int MODE_DELETE = 100; private static final int MODE_SHARE = 101; - AudioVideoNotesPlugin plugin; - List items; - NotesAdapter listAdapter; + private AudioVideoNotesPlugin plugin; + private NotesAdapter listAdapter; + private List items; + private List selected = new LinkedList<>(); private View footerView; - private boolean selectionMode = false; + private boolean selectionMode; private ActionMode actionMode; - private ArrayList selected = new ArrayList<>(); - Recording shareLocationFile = new Recording(new File(".")); - @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // Handle screen rotation: @@ -87,8 +88,9 @@ public class NotesFragment extends OsmAndListFragment { ((ItemMenuBottomSheetDialogFragment) itemMenu).setListener(createItemMenuFragmentListener()); } - setHasOptionsMenu(true); plugin = OsmandPlugin.getEnabledPlugin(AudioVideoNotesPlugin.class); + setHasOptionsMenu(true); + View view = getActivity().getLayoutInflater().inflate(R.layout.update_index, container, false); view.findViewById(R.id.select_all).setVisibility(View.GONE); ((TextView) view.findViewById(R.id.header)).setText(R.string.notes); @@ -108,26 +110,6 @@ public class NotesFragment extends OsmAndListFragment { return view; } - @Override - public ArrayAdapter getAdapter() { - return listAdapter; - } - - private void selectAll() { - for (int i = 0; i < listAdapter.getCount(); i++) { - Recording point = listAdapter.getItem(i); - if (!selected.contains(point)) { - selected.add(point); - } - } - listAdapter.notifyDataSetInvalidated(); - } - - private void deselectAll() { - selected.clear(); - listAdapter.notifyDataSetInvalidated(); - } - @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -147,25 +129,15 @@ public class NotesFragment extends OsmAndListFragment { listView.setHeaderDividersEnabled(false); listView.setFooterDividersEnabled(false); } - listAdapter = new NotesAdapter(items); + listAdapter = new NotesAdapter(getMyApplication(), items); + listAdapter.setSelected(selected); + listAdapter.setListener(createAdapterListener()); listView.setAdapter(listAdapter); } - private void sortItemsDescending() { - Collections.sort(items, new Comparator() { - @Override - public int compare(Recording first, Recording second) { - long firstTime = first.getLastModified(); - long secondTime = second.getLastModified(); - if (firstTime < secondTime) { - return 1; - } else if (firstTime == secondTime) { - return 0; - } else { - return -1; - } - } - }); + @Override + public ArrayAdapter getAdapter() { + return listAdapter; } @Override @@ -182,10 +154,7 @@ public class NotesFragment extends OsmAndListFragment { item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - SortByMenuBottomSheetDialogFragment fragment = new SortByMenuBottomSheetDialogFragment(); - fragment.setUsedOnMap(false); - fragment.setListener(createSortFragmentListener()); - fragment.show(getChildFragmentManager(), SortByMenuBottomSheetDialogFragment.TAG); + showSortMenuFragment(); return true; } }); @@ -212,6 +181,80 @@ public class NotesFragment extends OsmAndListFragment { item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } + public OsmandActionBarActivity getActionBarActivity() { + if (getActivity() instanceof OsmandActionBarActivity) { + return (OsmandActionBarActivity) getActivity(); + } + return null; + } + + private NotesAdapterListener createAdapterListener() { + return new NotesAdapterListener() { + @Override + public void onItemClick(Recording rec, boolean checked) { + if (selectionMode) { + if (checked) { + selected.add(rec); + } else { + selected.remove(rec); + } + updateSelectionMode(actionMode); + } else { + showOnMap(rec); + } + } + + @Override + public void onOptionsClick(Recording rec) { + ItemMenuBottomSheetDialogFragment fragment = new ItemMenuBottomSheetDialogFragment(); + fragment.setUsedOnMap(false); + fragment.setListener(createItemMenuFragmentListener()); + fragment.setRecording(rec); + fragment.setRetainInstance(true); + fragment.show(getChildFragmentManager(), ItemMenuBottomSheetDialogFragment.TAG); + } + }; + } + + private void showSortMenuFragment() { + SortByMenuBottomSheetDialogFragment fragment = new SortByMenuBottomSheetDialogFragment(); + fragment.setUsedOnMap(false); + fragment.setListener(createSortFragmentListener()); + fragment.show(getChildFragmentManager(), SortByMenuBottomSheetDialogFragment.TAG); + } + + private void selectAll() { + for (int i = 0; i < listAdapter.getCount(); i++) { + Recording rec = listAdapter.getItem(i); + if (!selected.contains(rec)) { + selected.add(rec); + } + } + listAdapter.notifyDataSetInvalidated(); + } + + private void deselectAll() { + selected.clear(); + listAdapter.notifyDataSetInvalidated(); + } + + private void sortItemsDescending() { + Collections.sort(items, new Comparator() { + @Override + public int compare(Recording first, Recording second) { + long firstTime = first.getLastModified(); + long secondTime = second.getLastModified(); + if (firstTime < secondTime) { + return 1; + } else if (firstTime == secondTime) { + return 0; + } else { + return -1; + } + } + }); + } + private SortFragmentListener createSortFragmentListener() { return new SortFragmentListener() { @Override @@ -228,15 +271,12 @@ public class NotesFragment extends OsmAndListFragment { public boolean onCreateActionMode(final ActionMode mode, Menu menu) { LOG.debug("onCreateActionMode"); if (type == MODE_SHARE) { - listAdapter.insert(shareLocationFile, 0); + listAdapter.insert(SHARE_LOCATION_FILE, 0); } switchSelectionMode(true); - MenuItem item; - if (type == MODE_DELETE) { - item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark); - } else { - item = menu.add(R.string.shared_string_share).setIcon(R.drawable.ic_action_gshare_dark); - } + int titleRes = type == MODE_DELETE ? R.string.shared_string_delete_all : R.string.shared_string_share; + int iconRes = type == MODE_DELETE ? R.drawable.ic_action_delete_dark : R.drawable.ic_action_gshare_dark; + MenuItem item = menu.add(titleRes).setIcon(iconRes); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -272,7 +312,7 @@ public class NotesFragment extends OsmAndListFragment { public void onDestroyActionMode(ActionMode mode) { LOG.debug("onDestroyActionMode"); if (type == MODE_SHARE) { - listAdapter.remove(shareLocationFile); + listAdapter.remove(SHARE_LOCATION_FILE); } switchSelectionMode(false); listAdapter.notifyDataSetInvalidated(); @@ -280,19 +320,13 @@ public class NotesFragment extends OsmAndListFragment { }); } - public OsmandActionBarActivity getActionBarActivity() { - if (getActivity() instanceof OsmandActionBarActivity) { - return (OsmandActionBarActivity) getActivity(); - } - return null; - } - private void switchSelectionMode(boolean enable) { - this.selectionMode = enable; + selectionMode = enable; + listAdapter.setSelectionMode(enable); View view = getView(); if (view != null) { - view.findViewById(R.id.select_all).setVisibility(selectionMode ? View.VISIBLE : View.GONE); - ((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode + view.findViewById(R.id.select_all).setVisibility(enable ? View.VISIBLE : View.GONE); + ((FavoritesActivity) getActivity()).setToolbarVisibility(!enable && AndroidUiHelper.isOrientationPortrait(getActivity())); ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); } @@ -300,7 +334,7 @@ public class NotesFragment extends OsmAndListFragment { private void updateSelectionTitle(ActionMode m) { if (selected.size() > 0) { - m.setTitle(selected.size() + " " + getMyApplication().getString(R.string.shared_string_selected_lowercase)); + m.setTitle(selected.size() + " " + getString(R.string.shared_string_selected_lowercase)); } else { m.setTitle(""); } @@ -327,33 +361,33 @@ public class NotesFragment extends OsmAndListFragment { selectAll.setChecked(true); } - private void deleteItems(final ArrayList selected) { - AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); - b.setMessage(getString(R.string.local_recordings_delete_all_confirm, selected.size())); - b.setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Iterator it = selected.iterator(); - while (it.hasNext()) { - Recording pnt = it.next(); - plugin.deleteRecording(pnt, true); - it.remove(); - listAdapter.delete(pnt); - } - listAdapter.notifyDataSetChanged(); - } - }); - b.setNegativeButton(R.string.shared_string_cancel, null); - b.show(); + private void deleteItems(final List selected) { + new AlertDialog.Builder(getActivity()) + .setMessage(getString(R.string.local_recordings_delete_all_confirm, selected.size())) + .setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Iterator it = selected.iterator(); + while (it.hasNext()) { + Recording rec = it.next(); + plugin.deleteRecording(rec, true); + it.remove(); + listAdapter.remove(rec); + } + listAdapter.notifyDataSetChanged(); + } + }) + .setNegativeButton(R.string.shared_string_cancel, null) + .show(); } - private void shareItems(ArrayList selected) { + private void shareItems(List selected) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType("image/*"); /* This example is sharing jpeg images. */ ArrayList files = new ArrayList(); for (Recording path : selected) { - if (path == shareLocationFile) { + if (path == SHARE_LOCATION_FILE) { File fl = generateGPXForRecordings(selected); if (fl != null) { files.add(FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".fileprovider", fl)); @@ -374,12 +408,12 @@ public class NotesFragment extends OsmAndListFragment { startActivity(Intent.createChooser(intent, getString(R.string.share_note))); } - private File generateGPXForRecordings(ArrayList selected) { + private File generateGPXForRecordings(List selected) { File tmpFile = new File(getActivity().getCacheDir(), "share/noteLocations.gpx"); tmpFile.getParentFile().mkdirs(); GPXFile file = new GPXFile(); for (Recording r : selected) { - if (r != shareLocationFile) { + if (r != SHARE_LOCATION_FILE) { String desc = r.getDescriptionName(r.getFileName()); if (desc == null) { desc = r.getFileName(); @@ -398,99 +432,6 @@ public class NotesFragment extends OsmAndListFragment { return tmpFile; } - public OsmandApplication getMyApplication() { - return (OsmandApplication) getActivity().getApplication(); - } - - class NotesAdapter extends ArrayAdapter { - - NotesAdapter(List recordingList) { - super(getActivity(), R.layout.note, recordingList); - } - - public void delete(Recording pnt) { - remove(pnt); - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - LayoutInflater inflater = getActivity().getLayoutInflater(); - View row = convertView; - if (row == null) { - row = inflater.inflate(R.layout.note, parent, false); - } - - final Recording recording = getItem(position); - if (recording == shareLocationFile) { - ((TextView) row.findViewById(R.id.name)).setText(R.string.av_locations); - ((TextView) row.findViewById(R.id.description)).setText(R.string.av_locations_descr); - } else { - DashAudioVideoNotesFragment.getNoteView(recording, row, getMyApplication()); - } - row.findViewById(R.id.play).setVisibility(View.GONE); - - final CheckBox ch = (CheckBox) row.findViewById(R.id.check_local_index); - ImageButton options = (ImageButton) row.findViewById(R.id.options); - options.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); - if (selectionMode) { - options.setVisibility(View.GONE); - ch.setVisibility(View.VISIBLE); - ch.setChecked(selected.contains(recording)); - row.findViewById(R.id.icon).setVisibility(View.GONE); - ch.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onItemSelect(ch, recording); - } - }); - } else { - row.findViewById(R.id.icon).setVisibility(View.VISIBLE); - options.setVisibility(View.VISIBLE); - ch.setVisibility(View.GONE); - } - - options.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ItemMenuBottomSheetDialogFragment fragment = new ItemMenuBottomSheetDialogFragment(); - fragment.setUsedOnMap(false); - fragment.setListener(createItemMenuFragmentListener()); - fragment.setRecording(recording); - fragment.setRetainInstance(true); - fragment.show(getChildFragmentManager(), ItemMenuBottomSheetDialogFragment.TAG); - } - }); - row.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (selectionMode) { - ch.setChecked(!ch.isChecked()); - onItemSelect(ch, recording); - } else { - showOnMap(recording); - } - } - }); - return row; - } - - public void onItemSelect(CheckBox ch, Recording child) { - if (ch.isChecked()) { - selected.add(child); - } else { - selected.remove(child); - } - updateSelectionMode(actionMode); - } - } - - private void showOnMap(Recording recording) { - getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15, - new PointDescription(recording.getSearchHistoryType(), recording.getName(getActivity(), true)), - true, recording); - MapActivity.launchMapActivityMoveToTop(getActivity()); - } - private ItemMenuFragmentListener createItemMenuFragmentListener() { return new ItemMenuFragmentListener() { @Override @@ -500,21 +441,7 @@ public class NotesFragment extends OsmAndListFragment { @Override public void shareOnClick(Recording recording) { - Intent sharingIntent = new Intent(Intent.ACTION_SEND); - if (recording.isPhoto()) { - Uri screenshotUri = Uri.parse(recording.getFile().getAbsolutePath()); - sharingIntent.setType("image/*"); - sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); - } else if (recording.isAudio()) { - Uri audioUri = Uri.parse(recording.getFile().getAbsolutePath()); - sharingIntent.setType("audio/*"); - sharingIntent.putExtra(Intent.EXTRA_STREAM, audioUri); - } else if (recording.isVideo()) { - Uri videoUri = Uri.parse(recording.getFile().getAbsolutePath()); - sharingIntent.setType("video/*"); - sharingIntent.putExtra(Intent.EXTRA_STREAM, videoUri); - } - startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_note))); + shareNote(recording); } @Override @@ -529,21 +456,36 @@ public class NotesFragment extends OsmAndListFragment { @Override public void deleteOnClick(final Recording recording) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setMessage(R.string.recording_delete_confirm); - builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - plugin.deleteRecording(recording, true); - listAdapter.remove(recording); - } - }); - builder.setNegativeButton(R.string.shared_string_cancel, null); - builder.show(); + deleteNote(recording); } }; } + private void shareNote(Recording recording) { + Intent sharingIntent = new Intent(Intent.ACTION_SEND); + if (recording.isPhoto()) { + Uri screenshotUri = Uri.parse(recording.getFile().getAbsolutePath()); + sharingIntent.setType("image/*"); + sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); + } else if (recording.isAudio()) { + Uri audioUri = Uri.parse(recording.getFile().getAbsolutePath()); + sharingIntent.setType("audio/*"); + sharingIntent.putExtra(Intent.EXTRA_STREAM, audioUri); + } else if (recording.isVideo()) { + Uri videoUri = Uri.parse(recording.getFile().getAbsolutePath()); + sharingIntent.setType("video/*"); + sharingIntent.putExtra(Intent.EXTRA_STREAM, videoUri); + } + startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_note))); + } + + private void showOnMap(Recording recording) { + getMyApplication().getSettings().setMapLocationToShow(recording.getLatitude(), recording.getLongitude(), 15, + new PointDescription(recording.getSearchHistoryType(), recording.getName(getActivity(), true)), + true, recording); + MapActivity.launchMapActivityMoveToTop(getActivity()); + } + private void editNote(final Recording recording) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.shared_string_rename); @@ -566,4 +508,18 @@ public class NotesFragment extends OsmAndListFragment { builder.create().show(); editText.requestFocus(); } + + private void deleteNote(final Recording recording) { + new AlertDialog.Builder(getActivity()) + .setMessage(R.string.recording_delete_confirm) + .setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + plugin.deleteRecording(recording, true); + listAdapter.remove(recording); + } + }) + .setNegativeButton(R.string.shared_string_cancel, null) + .show(); + } } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java new file mode 100644 index 0000000000..81e2359f49 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -0,0 +1,113 @@ +package net.osmand.plus.audionotes.adapters; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.ImageButton; +import android.widget.TextView; + +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; +import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; +import net.osmand.plus.audionotes.DashAudioVideoNotesFragment; +import net.osmand.plus.audionotes.NotesFragment; + +import java.util.List; + +public class NotesAdapter extends ArrayAdapter { + + private OsmandApplication app; + private NotesAdapterListener listener; + + private boolean selectionMode; + private List selected; + + public void setListener(NotesAdapterListener listener) { + this.listener = listener; + } + + public void setSelectionMode(boolean selectionMode) { + this.selectionMode = selectionMode; + } + + public void setSelected(List selected) { + this.selected = selected; + } + + public NotesAdapter(OsmandApplication app, List items) { + super(app, R.layout.note, items); + this.app = app; + } + + @NonNull + @Override + public View getView(final int position, View convertView, @NonNull ViewGroup parent) { + LayoutInflater inflater = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View row = convertView; + if (row == null) { + row = inflater.inflate(R.layout.note, parent, false); + } + + final Recording recording = getItem(position); + if (recording == NotesFragment.SHARE_LOCATION_FILE) { + ((TextView) row.findViewById(R.id.name)).setText(R.string.av_locations); + ((TextView) row.findViewById(R.id.description)).setText(R.string.av_locations_descr); + } else { + DashAudioVideoNotesFragment.getNoteView(recording, row, app); + } + row.findViewById(R.id.play).setVisibility(View.GONE); + + final CheckBox ch = (CheckBox) row.findViewById(R.id.check_local_index); + ImageButton options = (ImageButton) row.findViewById(R.id.options); + options.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); + if (selectionMode) { + options.setVisibility(View.GONE); + ch.setVisibility(View.VISIBLE); + ch.setChecked(selected.contains(recording)); + row.findViewById(R.id.icon).setVisibility(View.GONE); + ch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onItemClick(recording, ch.isChecked()); + } + } + }); + } else { + row.findViewById(R.id.icon).setVisibility(View.VISIBLE); + options.setVisibility(View.VISIBLE); + ch.setVisibility(View.GONE); + } + + options.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onOptionsClick(recording); + } + } + }); + row.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean checked = !ch.isChecked(); + ch.setChecked(checked); + if (listener != null) { + listener.onItemClick(recording, checked); + } + } + }); + return row; + } + + public interface NotesAdapterListener { + + void onItemClick(Recording rec, boolean checked); + + void onOptionsClick(Recording rec); + } +} From bce0fd786202f62a088823efae88b8e98c00214f Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Thu, 16 Nov 2017 15:09:58 +0200 Subject: [PATCH 009/157] Change ui for notes list --- OsmAnd/res/layout/list_item_header.xml | 2 +- OsmAnd/res/layout/note.xml | 10 +- OsmAnd/res/values/strings.xml | 1 + .../audionotes/AudioVideoNotesPlugin.java | 24 ++ .../osmand/plus/audionotes/NotesFragment.java | 105 ++++---- .../audionotes/adapters/NotesAdapter.java | 226 +++++++++++++----- 6 files changed, 254 insertions(+), 114 deletions(-) diff --git a/OsmAnd/res/layout/list_item_header.xml b/OsmAnd/res/layout/list_item_header.xml index b1b64d6641..8799f11e36 100644 --- a/OsmAnd/res/layout/list_item_header.xml +++ b/OsmAnd/res/layout/list_item_header.xml @@ -33,7 +33,7 @@ tools:visibility="visible"/> - + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 569087cdea..55631a1d7f 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,7 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Notes by date By date By type Appearance on the map diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index 2ddb27908a..ad0870730f 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -59,6 +59,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.SavingTrackHelper; import net.osmand.plus.activities.TabActivity.TabItem; import net.osmand.plus.dashboard.tools.DashFragmentData; +import net.osmand.plus.download.DownloadActivity; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.mapcontextmenu.MapContextMenu; import net.osmand.plus.monitoring.OsmandMonitoringPlugin; @@ -457,6 +458,29 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { } + public String getNewSmallDescription(Context ctx) { + DateFormat dateFormat = android.text.format.DateFormat.getMediumDateFormat(ctx); + String date = dateFormat.format(file.lastModified()); + int size = (int) ((file.length() + 512) >> 10); + String sz = ""; + if (size > 0) { + if (size > 1 << 20) { + sz = DownloadActivity.formatGb.format(new Object[]{(float) size / (1 << 20)}); + } else { + if (file.length() > (100 * (1 << 10))) { + sz = DownloadActivity.formatMb.format(new Object[]{(float) file.length() / (1 << 20)}); + } else { + sz = DownloadActivity.formatKb.format(new Object[]{(float) file.length() / (1 << 10)}); + } + } + } + if (isPhoto()) { + return date + " • " + sz; + } + updateInternalDescription(); + return date + " • " + sz + " • " + getDuration(ctx); + } + public String getPlainDuration(boolean accessibilityEnabled) { updateInternalDescription(); if (duration > 0) { diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 639faaac68..69f1d0f551 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -19,10 +19,8 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; -import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; -import android.widget.TextView; import android.widget.Toast; import net.osmand.PlatformUtil; @@ -31,6 +29,7 @@ import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.OsmandPlugin; +import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.activities.ActionBarProgressActivity; import net.osmand.plus.activities.MapActivity; @@ -52,9 +51,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Set; public class NotesFragment extends OsmAndListFragment { @@ -66,8 +67,7 @@ public class NotesFragment extends OsmAndListFragment { private AudioVideoNotesPlugin plugin; private NotesAdapter listAdapter; - private List items; - private List selected = new LinkedList<>(); + private Set selected = new HashSet<>(); private View footerView; @@ -92,21 +92,8 @@ public class NotesFragment extends OsmAndListFragment { setHasOptionsMenu(true); View view = getActivity().getLayoutInflater().inflate(R.layout.update_index, container, false); - view.findViewById(R.id.select_all).setVisibility(View.GONE); - ((TextView) view.findViewById(R.id.header)).setText(R.string.notes); - final CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all); - selectAll.setVisibility(View.GONE); - selectAll.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (selectAll.isChecked()) { - selectAll(); - } else { - deselectAll(); - } - updateSelectionTitle(actionMode); - } - }); + view.findViewById(R.id.header_layout).setVisibility(View.GONE); + return view; } @@ -120,9 +107,9 @@ public class NotesFragment extends OsmAndListFragment { @Override public void onResume() { super.onResume(); - items = new ArrayList<>(plugin.getAllRecordings()); - sortItemsDescending(); + List items = createItemsList(sortItemsDescending(new LinkedList<>(plugin.getAllRecordings()))); ListView listView = getListView(); + listView.setDivider(null); if (items.size() > 0 && footerView == null) { footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, null, false); listView.addFooterView(footerView); @@ -130,6 +117,7 @@ public class NotesFragment extends OsmAndListFragment { listView.setFooterDividersEnabled(false); } listAdapter = new NotesAdapter(getMyApplication(), items); + listAdapter.setSelectionMode(selectionMode); listAdapter.setSelected(selected); listAdapter.setListener(createAdapterListener()); listView.setAdapter(listAdapter); @@ -188,10 +176,31 @@ public class NotesFragment extends OsmAndListFragment { return null; } + private List createItemsList(List recs) { + List res = new LinkedList<>(); + OsmandSettings settings = getMyApplication().getSettings(); + if (settings.NOTES_SORT_BY_MODE.get().isByDate()) { + res.add(NotesAdapter.TYPE_HEADER); + res.addAll(recs); + } + return res; + } + private NotesAdapterListener createAdapterListener() { return new NotesAdapterListener() { + @Override - public void onItemClick(Recording rec, boolean checked) { + public void onHeaderClick(int type, boolean checked) { + if (checked) { + selectAll(); + } else { + deselectAll(); + } + updateSelectionTitle(actionMode); + } + + @Override + public void onCheckBoxClick(Recording rec, boolean checked) { if (selectionMode) { if (checked) { selected.add(rec); @@ -199,11 +208,14 @@ public class NotesFragment extends OsmAndListFragment { selected.remove(rec); } updateSelectionMode(actionMode); - } else { - showOnMap(rec); } } + @Override + public void onItemClick(Recording rec) { + showOnMap(rec); + } + @Override public void onOptionsClick(Recording rec) { ItemMenuBottomSheetDialogFragment fragment = new ItemMenuBottomSheetDialogFragment(); @@ -225,9 +237,9 @@ public class NotesFragment extends OsmAndListFragment { private void selectAll() { for (int i = 0; i < listAdapter.getCount(); i++) { - Recording rec = listAdapter.getItem(i); - if (!selected.contains(rec)) { - selected.add(rec); + Object item = listAdapter.getItem(i); + if (item instanceof Recording) { + selected.add((Recording) item); } } listAdapter.notifyDataSetInvalidated(); @@ -238,8 +250,8 @@ public class NotesFragment extends OsmAndListFragment { listAdapter.notifyDataSetInvalidated(); } - private void sortItemsDescending() { - Collections.sort(items, new Comparator() { + private List sortItemsDescending(List recs) { + Collections.sort(recs, new Comparator() { @Override public int compare(Recording first, Recording second) { long firstTime = first.getLastModified(); @@ -253,6 +265,7 @@ public class NotesFragment extends OsmAndListFragment { } } }); + return recs; } private SortFragmentListener createSortFragmentListener() { @@ -291,7 +304,6 @@ public class NotesFragment extends OsmAndListFragment { }); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); selected.clear(); - listAdapter.notifyDataSetInvalidated(); updateSelectionMode(mode); return true; } @@ -323,13 +335,8 @@ public class NotesFragment extends OsmAndListFragment { private void switchSelectionMode(boolean enable) { selectionMode = enable; listAdapter.setSelectionMode(enable); - View view = getView(); - if (view != null) { - view.findViewById(R.id.select_all).setVisibility(enable ? View.VISIBLE : View.GONE); - ((FavoritesActivity) getActivity()).setToolbarVisibility(!enable - && AndroidUiHelper.isOrientationPortrait(getActivity())); - ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); - } + ((FavoritesActivity) getActivity()).setToolbarVisibility(!enable && AndroidUiHelper.isOrientationPortrait(getActivity())); + ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); } private void updateSelectionTitle(ActionMode m) { @@ -342,26 +349,10 @@ public class NotesFragment extends OsmAndListFragment { private void updateSelectionMode(ActionMode m) { updateSelectionTitle(m); - refreshSelectAll(); + listAdapter.notifyDataSetInvalidated(); } - private void refreshSelectAll() { - View view = getView(); - if (view == null) { - return; - } - CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all); - for (int i = 0; i < listAdapter.getCount(); i++) { - Recording point = listAdapter.getItem(i); - if (!selected.contains(point)) { - selectAll.setChecked(false); - return; - } - } - selectAll.setChecked(true); - } - - private void deleteItems(final List selected) { + private void deleteItems(final Set selected) { new AlertDialog.Builder(getActivity()) .setMessage(getString(R.string.local_recordings_delete_all_confirm, selected.size())) .setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() { @@ -381,7 +372,7 @@ public class NotesFragment extends OsmAndListFragment { .show(); } - private void shareItems(List selected) { + private void shareItems(Set selected) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType("image/*"); /* This example is sharing jpeg images. */ @@ -408,7 +399,7 @@ public class NotesFragment extends OsmAndListFragment { startActivity(Intent.createChooser(intent, getString(R.string.share_note))); } - private File generateGPXForRecordings(List selected) { + private File generateGPXForRecordings(Set selected) { File tmpFile = new File(getActivity().getCacheDir(), "share/noteLocations.gpx"); tmpFile.getParentFile().mkdirs(); GPXFile file = new GPXFile(); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index 81e2359f49..4c63ceae3d 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -8,23 +8,28 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.TextView; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording; -import net.osmand.plus.audionotes.DashAudioVideoNotesFragment; import net.osmand.plus.audionotes.NotesFragment; import java.util.List; +import java.util.Set; -public class NotesAdapter extends ArrayAdapter { +public class NotesAdapter extends ArrayAdapter { + + public static final int TYPE_COUNT = 2; + public static final int TYPE_HEADER = 0; + public static final int TYPE_ITEM = 1; private OsmandApplication app; private NotesAdapterListener listener; private boolean selectionMode; - private List selected; + private Set selected; public void setListener(NotesAdapterListener listener) { this.listener = listener; @@ -34,79 +39,190 @@ public class NotesAdapter extends ArrayAdapter { this.selectionMode = selectionMode; } - public void setSelected(List selected) { + public void setSelected(Set selected) { this.selected = selected; } - public NotesAdapter(OsmandApplication app, List items) { + public NotesAdapter(OsmandApplication app, List items) { super(app, R.layout.note, items); this.app = app; } @NonNull @Override - public View getView(final int position, View convertView, @NonNull ViewGroup parent) { - LayoutInflater inflater = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View row = convertView; + public View getView(final int position, View row, @NonNull ViewGroup parent) { + final int type = getItemViewType(position); if (row == null) { - row = inflater.inflate(R.layout.note, parent, false); + LayoutInflater inflater = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + if (type == TYPE_HEADER) { + row = inflater.inflate(R.layout.list_item_header, parent, false); + HeaderViewHolder hHolder = new HeaderViewHolder(row); + row.setTag(hHolder); + } else { + row = inflater.inflate(R.layout.note, parent, false); + ItemViewHolder iHolder = new ItemViewHolder(row); + row.setTag(iHolder); + } } - final Recording recording = getItem(position); - if (recording == NotesFragment.SHARE_LOCATION_FILE) { - ((TextView) row.findViewById(R.id.name)).setText(R.string.av_locations); - ((TextView) row.findViewById(R.id.description)).setText(R.string.av_locations_descr); - } else { - DashAudioVideoNotesFragment.getNoteView(recording, row, app); - } - row.findViewById(R.id.play).setVisibility(View.GONE); - - final CheckBox ch = (CheckBox) row.findViewById(R.id.check_local_index); - ImageButton options = (ImageButton) row.findViewById(R.id.options); - options.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); - if (selectionMode) { - options.setVisibility(View.GONE); - ch.setVisibility(View.VISIBLE); - ch.setChecked(selected.contains(recording)); - row.findViewById(R.id.icon).setVisibility(View.GONE); - ch.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (listener != null) { - listener.onItemClick(recording, ch.isChecked()); + if (type == TYPE_HEADER) { + final HeaderViewHolder holder = (HeaderViewHolder) row.getTag(); + holder.checkBox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); + holder.view.setEnabled(selectionMode); + holder.headerRow.setEnabled(selectionMode); + if (selectionMode) { + holder.checkBox.setChecked(isSelectAllChecked()); + holder.checkBox.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onHeaderClick(type, holder.checkBox.isChecked()); + } } - } - }); + }); + holder.headerRow.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + holder.checkBox.performClick(); + } + }); + } else { + holder.view.setOnClickListener(null); + } + holder.title.setText(R.string.notes_by_date); } else { - row.findViewById(R.id.icon).setVisibility(View.VISIBLE); - options.setVisibility(View.VISIBLE); - ch.setVisibility(View.GONE); + final Object item = getItem(position); + if (item instanceof Recording) { + final Recording recording = (Recording) item; + final ItemViewHolder holder = (ItemViewHolder) row.getTag(); + + if (recording == NotesFragment.SHARE_LOCATION_FILE) { + holder.title.setText(R.string.av_locations); + holder.description.setText(R.string.av_locations_descr); + } else { + holder.title.setText(recording.getName(app, true)); + holder.description.setText(recording.getNewSmallDescription(app)); + int iconRes = recording.isAudio() ? R.drawable.ic_type_audio + : (recording.isVideo() ? R.drawable.ic_type_video : R.drawable.ic_type_img); + holder.icon.setImageDrawable(app.getIconsCache().getIcon(iconRes, R.color.color_distance)); + } + + holder.play.setVisibility(View.GONE); + holder.bottomDivider.setVisibility(View.VISIBLE); + holder.icon.setVisibility(selectionMode ? View.GONE : View.VISIBLE); + holder.checkBox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); + holder.options.setVisibility(selectionMode ? View.GONE : View.VISIBLE); + if (selectionMode) { + holder.checkBox.setChecked(selected.contains(recording)); + holder.checkBox.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onCheckBoxClick(recording, holder.checkBox.isChecked()); + } + } + }); + } else { + holder.options.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); + holder.options.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onOptionsClick(recording); + } + } + }); + } + + holder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (selectionMode) { + holder.checkBox.performClick(); + } else { + if (listener != null) { + listener.onItemClick(recording); + } + } + } + }); + } } - options.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (listener != null) { - listener.onOptionsClick(recording); - } - } - }); - row.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - boolean checked = !ch.isChecked(); - ch.setChecked(checked); - if (listener != null) { - listener.onItemClick(recording, checked); - } - } - }); return row; } + @Override + public int getItemViewType(int position) { + Object item = getItem(position); + if (item instanceof Recording) { + return TYPE_ITEM; + } + return (int) item; + } + + @Override + public int getViewTypeCount() { + return TYPE_COUNT; + } + + private boolean isSelectAllChecked() { + for (int i = 0; i < getCount(); i++) { + Object item = getItem(i); + if (item instanceof Recording) { + if (!selected.contains(item)) { + return false; + } + } + } + return true; + } + + private class HeaderViewHolder { + + final View view; + final View headerRow; + final CheckBox checkBox; + final TextView title; + + HeaderViewHolder(View view) { + this.view = view; + headerRow = view.findViewById(R.id.header_row); + checkBox = (CheckBox) view.findViewById(R.id.check_box); + title = (TextView) view.findViewById(R.id.title_text_view); + } + } + + private class ItemViewHolder { + + final View view; + final ImageView icon; + final CheckBox checkBox; + final TextView title; + final TextView description; + final ImageButton options; + final View play; + final View bottomDivider; + + ItemViewHolder(View view) { + this.view = view; + icon = (ImageView) view.findViewById(R.id.icon); + checkBox = (CheckBox) view.findViewById(R.id.check_local_index); + title = (TextView) view.findViewById(R.id.name); + description = (TextView) view.findViewById(R.id.description); + options = (ImageButton) view.findViewById(R.id.options); + play = view.findViewById(R.id.play); + bottomDivider = view.findViewById(R.id.bottom_divider); + } + } + public interface NotesAdapterListener { - void onItemClick(Recording rec, boolean checked); + void onHeaderClick(int type, boolean checked); + + void onCheckBoxClick(Recording rec, boolean checked); + + void onItemClick(Recording rec); void onOptionsClick(Recording rec); } From a6245c4a8a81bd15a415ba10dd236b8e5194c7a8 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Thu, 16 Nov 2017 17:56:06 +0200 Subject: [PATCH 010/157] Add sorting by type --- .../osmand/plus/audionotes/NotesFragment.java | 40 ++++++++++++++++--- .../audionotes/adapters/NotesAdapter.java | 30 ++++++++++---- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 69f1d0f551..4ac31679e8 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -107,7 +107,7 @@ public class NotesFragment extends OsmAndListFragment { @Override public void onResume() { super.onResume(); - List items = createItemsList(sortItemsDescending(new LinkedList<>(plugin.getAllRecordings()))); + List items = createItemsList(); ListView listView = getListView(); listView.setDivider(null); if (items.size() > 0 && footerView == null) { @@ -176,12 +176,38 @@ public class NotesFragment extends OsmAndListFragment { return null; } - private List createItemsList(List recs) { + private List createItemsList() { + List recs = new LinkedList<>(plugin.getAllRecordings()); List res = new LinkedList<>(); OsmandSettings settings = getMyApplication().getSettings(); if (settings.NOTES_SORT_BY_MODE.get().isByDate()) { - res.add(NotesAdapter.TYPE_HEADER); - res.addAll(recs); + res.add(NotesAdapter.TYPE_DATE_HEADER); + res.addAll(sortItemsByDateDescending(recs)); + } else if (settings.NOTES_SORT_BY_MODE.get().isByType()) { + List audios = new LinkedList<>(); + List photos = new LinkedList<>(); + List videos = new LinkedList<>(); + for (Recording rec : recs) { + if (rec.isAudio()) { + audios.add(rec); + } else if (rec.isPhoto()) { + photos.add(rec); + } else { + videos.add(rec); + } + } + if (!audios.isEmpty()) { + res.add(NotesAdapter.TYPE_AUDIO_HEADER); + res.addAll(audios); + } + if (!photos.isEmpty()) { + res.add(NotesAdapter.TYPE_PHOTO_HEADER); + res.addAll(photos); + } + if (!videos.isEmpty()) { + res.add(NotesAdapter.TYPE_VIDEO_HEADER); + res.addAll(videos); + } } return res; } @@ -250,7 +276,7 @@ public class NotesFragment extends OsmAndListFragment { listAdapter.notifyDataSetInvalidated(); } - private List sortItemsDescending(List recs) { + private List sortItemsByDateDescending(List recs) { Collections.sort(recs, new Comparator() { @Override public int compare(Recording first, Recording second) { @@ -272,7 +298,9 @@ public class NotesFragment extends OsmAndListFragment { return new SortFragmentListener() { @Override public void onSortModeChanged() { - Toast.makeText(getContext(), "Sort by mode changed", Toast.LENGTH_SHORT).show(); + listAdapter.clear(); + listAdapter.addAll(createItemsList()); + listAdapter.notifyDataSetChanged(); } }; } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index 4c63ceae3d..a2d454b17a 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -21,9 +21,12 @@ import java.util.Set; public class NotesAdapter extends ArrayAdapter { - public static final int TYPE_COUNT = 2; - public static final int TYPE_HEADER = 0; - public static final int TYPE_ITEM = 1; + public static final int TYPE_COUNT = 5; + public static final int TYPE_DATE_HEADER = 0; + public static final int TYPE_AUDIO_HEADER = 1; + public static final int TYPE_PHOTO_HEADER = 2; + public static final int TYPE_VIDEO_HEADER = 3; + public static final int TYPE_ITEM = 4; private OsmandApplication app; private NotesAdapterListener listener; @@ -52,9 +55,13 @@ public class NotesAdapter extends ArrayAdapter { @Override public View getView(final int position, View row, @NonNull ViewGroup parent) { final int type = getItemViewType(position); + boolean header = type == TYPE_DATE_HEADER + || type == TYPE_AUDIO_HEADER + || type == TYPE_PHOTO_HEADER + || type == TYPE_VIDEO_HEADER; if (row == null) { LayoutInflater inflater = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - if (type == TYPE_HEADER) { + if (header) { row = inflater.inflate(R.layout.list_item_header, parent, false); HeaderViewHolder hHolder = new HeaderViewHolder(row); row.setTag(hHolder); @@ -65,10 +72,9 @@ public class NotesAdapter extends ArrayAdapter { } } - if (type == TYPE_HEADER) { + if (header) { final HeaderViewHolder holder = (HeaderViewHolder) row.getTag(); holder.checkBox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); - holder.view.setEnabled(selectionMode); holder.headerRow.setEnabled(selectionMode); if (selectionMode) { holder.checkBox.setChecked(isSelectAllChecked()); @@ -89,7 +95,17 @@ public class NotesAdapter extends ArrayAdapter { } else { holder.view.setOnClickListener(null); } - holder.title.setText(R.string.notes_by_date); + int titleId; + if (type == TYPE_DATE_HEADER) { + titleId = R.string.notes_by_date; + } else if (type == TYPE_AUDIO_HEADER) { + titleId = R.string.shared_string_audio; + } else if (type == TYPE_PHOTO_HEADER) { + titleId = R.string.shared_string_photo; + } else { + titleId = R.string.shared_string_video; + } + holder.title.setText(titleId); } else { final Object item = getItem(position); if (item instanceof Recording) { From 64f23041cc609138baa4cd4c38292eb88466d5ae Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Thu, 16 Nov 2017 18:03:48 +0200 Subject: [PATCH 011/157] Add small code formatting --- .../net/osmand/plus/audionotes/adapters/NotesAdapter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index a2d454b17a..aa3dbbae7b 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -21,12 +21,12 @@ import java.util.Set; public class NotesAdapter extends ArrayAdapter { - public static final int TYPE_COUNT = 5; public static final int TYPE_DATE_HEADER = 0; public static final int TYPE_AUDIO_HEADER = 1; public static final int TYPE_PHOTO_HEADER = 2; public static final int TYPE_VIDEO_HEADER = 3; - public static final int TYPE_ITEM = 4; + private static final int TYPE_ITEM = 4; + private static final int TYPE_COUNT = 5; private OsmandApplication app; private NotesAdapterListener listener; @@ -59,6 +59,7 @@ public class NotesAdapter extends ArrayAdapter { || type == TYPE_AUDIO_HEADER || type == TYPE_PHOTO_HEADER || type == TYPE_VIDEO_HEADER; + if (row == null) { LayoutInflater inflater = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (header) { From 5e1b3e053c9fcebed8d9fba682d18c83dea3a817 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 11:43:40 +0200 Subject: [PATCH 012/157] Reorder drawer items --- .../plus/activities/MapActivityActions.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index abebe76293..08c96f6330 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -720,16 +720,6 @@ public class MapActivityActions implements DialogProvider { }).createItem()); */ - optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.measurement_tool, mapActivity) - .setIcon(R.drawable.ic_action_ruler) - .setListener(new ContextMenuAdapter.ItemClickListener() { - @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int position, boolean isChecked) { - MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager()); - return true; - } - }).createItem()); - optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.configure_map, mapActivity) .setIcon(R.drawable.ic_action_layers_dark) .setListener(new ContextMenuAdapter.ItemClickListener() { @@ -778,16 +768,12 @@ public class MapActivityActions implements DialogProvider { }).createItem()); } - optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.prefs_plugins, mapActivity) - .setIcon(R.drawable.ic_extension_dark) - .setListener(new ItemClickListener() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.measurement_tool, mapActivity) + .setIcon(R.drawable.ic_action_ruler) + .setListener(new ContextMenuAdapter.ItemClickListener() { @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { - app.logEvent(mapActivity, "drawer_plugins_open"); - Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization() - .getPluginsActivity()); - newIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - mapActivity.startActivity(newIntent); + public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int position, boolean isChecked) { + MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager()); return true; } }).createItem()); @@ -804,6 +790,20 @@ public class MapActivityActions implements DialogProvider { } }).createItem()); + optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.prefs_plugins, mapActivity) + .setIcon(R.drawable.ic_extension_dark) + .setListener(new ItemClickListener() { + @Override + public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { + app.logEvent(mapActivity, "drawer_plugins_open"); + Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization() + .getPluginsActivity()); + newIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + mapActivity.startActivity(newIntent); + return true; + } + }).createItem()); + optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.shared_string_settings, mapActivity) .setIcon(R.drawable.ic_action_settings) .setListener(new ContextMenuAdapter.ItemClickListener() { @@ -850,7 +850,7 @@ public class MapActivityActions implements DialogProvider { // Place divider between functionality and configuration related menu items int dividerItemIndex = -1; for (int i = 0; i < optionsMenuHelper.length(); i++) { - if (optionsMenuHelper.getItem(i).getTitleId() == R.string.configure_map) { + if (optionsMenuHelper.getItem(i).getTitleId() == R.string.layer_map_appearance) { dividerItemIndex = i; break; } From 7e1de273f5deab626a92ec1ee47f143a6d0a05db Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 11:50:48 +0200 Subject: [PATCH 013/157] Change layout for note list item --- OsmAnd/res/layout/note.xml | 10 +-- OsmAnd/res/layout/note_list_item.xml | 90 +++++++++++++++++++ .../audionotes/adapters/NotesAdapter.java | 12 ++- 3 files changed, 96 insertions(+), 16 deletions(-) create mode 100644 OsmAnd/res/layout/note_list_item.xml diff --git a/OsmAnd/res/layout/note.xml b/OsmAnd/res/layout/note.xml index e261f7efb0..416addf0d7 100644 --- a/OsmAnd/res/layout/note.xml +++ b/OsmAnd/res/layout/note.xml @@ -87,14 +87,6 @@ android:src="@drawable/ic_play_dark"/> - + \ No newline at end of file diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml new file mode 100644 index 0000000000..62a69eaf32 --- /dev/null +++ b/OsmAnd/res/layout/note_list_item.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index aa3dbbae7b..69f7866aa2 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -67,7 +67,7 @@ public class NotesAdapter extends ArrayAdapter { HeaderViewHolder hHolder = new HeaderViewHolder(row); row.setTag(hHolder); } else { - row = inflater.inflate(R.layout.note, parent, false); + row = inflater.inflate(R.layout.note_list_item, parent, false); ItemViewHolder iHolder = new ItemViewHolder(row); row.setTag(iHolder); } @@ -121,10 +121,10 @@ public class NotesAdapter extends ArrayAdapter { holder.description.setText(recording.getNewSmallDescription(app)); int iconRes = recording.isAudio() ? R.drawable.ic_type_audio : (recording.isVideo() ? R.drawable.ic_type_video : R.drawable.ic_type_img); - holder.icon.setImageDrawable(app.getIconsCache().getIcon(iconRes, R.color.color_distance)); + int colorRes = app.getSettings().isLightContent() ? R.color.icon_color : R.color.ctx_menu_info_text_dark; + holder.icon.setImageDrawable(app.getIconsCache().getIcon(iconRes, colorRes)); } - holder.play.setVisibility(View.GONE); holder.bottomDivider.setVisibility(View.VISIBLE); holder.icon.setVisibility(selectionMode ? View.GONE : View.VISIBLE); holder.checkBox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); @@ -218,17 +218,15 @@ public class NotesAdapter extends ArrayAdapter { final TextView title; final TextView description; final ImageButton options; - final View play; final View bottomDivider; ItemViewHolder(View view) { this.view = view; icon = (ImageView) view.findViewById(R.id.icon); - checkBox = (CheckBox) view.findViewById(R.id.check_local_index); - title = (TextView) view.findViewById(R.id.name); + checkBox = (CheckBox) view.findViewById(R.id.check_box); + title = (TextView) view.findViewById(R.id.title); description = (TextView) view.findViewById(R.id.description); options = (ImageButton) view.findViewById(R.id.options); - play = view.findViewById(R.id.play); bottomDivider = view.findViewById(R.id.bottom_divider); } } From bc0b15d444d502a2124c6aef5df6b5a60dafe961 Mon Sep 17 00:00:00 2001 From: Dmitriy Prodchenko Date: Fri, 17 Nov 2017 12:20:58 +0200 Subject: [PATCH 014/157] Add Empty State images for OSM Edits and Notes. --- .../ic_empty_state_av_notes_day.webp | Bin 0 -> 5090 bytes .../ic_empty_state_av_notes_night.webp | Bin 0 -> 5314 bytes .../ic_empty_state_osm_edits_day.webp | Bin 0 -> 5650 bytes .../ic_empty_state_osm_edits_night.webp | Bin 0 -> 5864 bytes .../ic_empty_state_av_notes_day.webp | Bin 0 -> 3538 bytes .../ic_empty_state_av_notes_night.webp | Bin 0 -> 3382 bytes .../ic_empty_state_osm_edits_day.webp | Bin 0 -> 3922 bytes .../ic_empty_state_osm_edits_night.webp | Bin 0 -> 3834 bytes .../ic_empty_state_av_notes_day.webp | Bin 0 -> 6912 bytes .../ic_empty_state_av_notes_night.webp | Bin 0 -> 6924 bytes .../ic_empty_state_osm_edits_day.webp | Bin 0 -> 7638 bytes .../ic_empty_state_osm_edits_night.webp | Bin 0 -> 7698 bytes .../ic_empty_state_av_notes_day.webp | Bin 0 -> 14424 bytes .../ic_empty_state_av_notes_night.webp | Bin 0 -> 14790 bytes .../ic_empty_state_osm_edits_day.webp | Bin 0 -> 14992 bytes .../ic_empty_state_osm_edits_night.webp | Bin 0 -> 16726 bytes 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/ic_empty_state_av_notes_day.webp create mode 100644 OsmAnd/res/drawable-hdpi/ic_empty_state_av_notes_night.webp create mode 100644 OsmAnd/res/drawable-hdpi/ic_empty_state_osm_edits_day.webp create mode 100644 OsmAnd/res/drawable-hdpi/ic_empty_state_osm_edits_night.webp create mode 100644 OsmAnd/res/drawable-mdpi/ic_empty_state_av_notes_day.webp create mode 100644 OsmAnd/res/drawable-mdpi/ic_empty_state_av_notes_night.webp create mode 100644 OsmAnd/res/drawable-mdpi/ic_empty_state_osm_edits_day.webp create mode 100644 OsmAnd/res/drawable-mdpi/ic_empty_state_osm_edits_night.webp create mode 100644 OsmAnd/res/drawable-xhdpi/ic_empty_state_av_notes_day.webp create mode 100644 OsmAnd/res/drawable-xhdpi/ic_empty_state_av_notes_night.webp create mode 100644 OsmAnd/res/drawable-xhdpi/ic_empty_state_osm_edits_day.webp create mode 100644 OsmAnd/res/drawable-xhdpi/ic_empty_state_osm_edits_night.webp create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_empty_state_av_notes_day.webp create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_empty_state_av_notes_night.webp create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_empty_state_osm_edits_day.webp create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_empty_state_osm_edits_night.webp diff --git a/OsmAnd/res/drawable-hdpi/ic_empty_state_av_notes_day.webp b/OsmAnd/res/drawable-hdpi/ic_empty_state_av_notes_day.webp new file mode 100644 index 0000000000000000000000000000000000000000..551b6f0ef77bf39cb15ccea3bb5f0779e4317349 GIT binary patch literal 5090 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 Edx0VEz5oCK literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-hdpi/ic_empty_state_av_notes_night.webp b/OsmAnd/res/drawable-hdpi/ic_empty_state_av_notes_night.webp new file mode 100644 index 0000000000000000000000000000000000000000..6f265d57f8f8f9dd5105d4caf0bdeb6ac155f91b GIT binary patch literal 5314 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-hdpi/ic_empty_state_osm_edits_night.webp b/OsmAnd/res/drawable-hdpi/ic_empty_state_osm_edits_night.webp new file mode 100644 index 0000000000000000000000000000000000000000..bcefe20c207d69177f16f7f746bd653df599408d GIT binary patch literal 5864 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/ic_empty_state_av_notes_day.webp b/OsmAnd/res/drawable-mdpi/ic_empty_state_av_notes_day.webp new file mode 100644 index 0000000000000000000000000000000000000000..66eac11d7a3b9bda57fb2586e6f426ac403e5d1f GIT binary patch literal 3538 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 Me(|^F#Y^i100TP5&Hw-a literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/ic_empty_state_av_notes_night.webp b/OsmAnd/res/drawable-mdpi/ic_empty_state_av_notes_night.webp new file mode 100644 index 0000000000000000000000000000000000000000..198b2559cf4667527ce7a4f08b7b5ec488866387 GIT binary patch literal 3382 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/ic_empty_state_osm_edits_night.webp b/OsmAnd/res/drawable-mdpi/ic_empty_state_osm_edits_night.webp new file mode 100644 index 0000000000000000000000000000000000000000..2b179ecd540521bc62a453b8097b3fa141c139d0 GIT binary patch literal 3834 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_empty_state_av_notes_day.webp b/OsmAnd/res/drawable-xhdpi/ic_empty_state_av_notes_day.webp new file mode 100644 index 0000000000000000000000000000000000000000..1499879b5a5a3b5698ffbbe069aefded82f5361a GIT binary patch literal 6912 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 GM!N)qS~ws8 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_empty_state_av_notes_night.webp b/OsmAnd/res/drawable-xhdpi/ic_empty_state_av_notes_night.webp new file mode 100644 index 0000000000000000000000000000000000000000..01e7f61f026c54650cc52c135fb67cdc197b0977 GIT binary patch literal 6924 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 M71*Av_R?Gc0QqX(761SM literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_empty_state_av_notes_day.webp b/OsmAnd/res/drawable-xxhdpi/ic_empty_state_av_notes_day.webp new file mode 100644 index 0000000000000000000000000000000000000000..52383453a5e3171368cc3e349c0475bf395e6bbb GIT binary patch literal 14424 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_empty_state_av_notes_night.webp b/OsmAnd/res/drawable-xxhdpi/ic_empty_state_av_notes_night.webp new file mode 100644 index 0000000000000000000000000000000000000000..7acf169e60d2d486aaf2fdfbcb46a0e0c6aec4b8 GIT binary patch literal 14790 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 literal 0 HcmV?d00001 From 6cf247efd847c53832892a951e312fc57d688155 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 13:32:03 +0200 Subject: [PATCH 015/157] Create adapter in another class and refactor --- .../osmand/plus/osmedit/OsmEditsAdapter.java | 134 ++++++ .../osmand/plus/osmedit/OsmEditsFragment.java | 413 +++++++----------- 2 files changed, 292 insertions(+), 255 deletions(-) create mode 100644 OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java new file mode 100644 index 0000000000..fe96959346 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -0,0 +1,134 @@ +package net.osmand.plus.osmedit; + +import android.support.annotation.NonNull; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.ImageView; + +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.R; + +import java.util.List; + +public class OsmEditsAdapter extends ArrayAdapter { + + private List osmEdits; + private OsmandApplication app; + + private boolean selectionMode; + private List selectedOsmEdits; + + private OsmEditsAdapterListener listener; + + public OsmEditsAdapter(OsmandApplication app, @NonNull List points) { + super(app, R.layout.note, points); + this.app = app; + osmEdits = points; + } + + public List getOsmEdits() { + return osmEdits; + } + + public void setOsmEdits(List osmEdits) { + this.osmEdits = osmEdits; + notifyDataSetChanged(); + } + + public boolean isSelectionMode() { + return selectionMode; + } + + public void setSelectionMode(boolean selectionMode) { + this.selectionMode = selectionMode; + } + + public void setSelectedOsmEdits(List selectedOsmEdits) { + this.selectedOsmEdits = selectedOsmEdits; + } + + public void setAdapterListener(OsmEditsAdapterListener listener) { + this.listener = listener; + } + + @NonNull + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = convertView; + final OsmPoint child = getItem(position); + if (v == null) { + v = LayoutInflater.from(getContext()).inflate(R.layout.note, parent, false); + } + OsmEditsFragment.getOsmEditView(v, child, app); + + v.findViewById(R.id.play).setVisibility(View.GONE); + + final CheckBox ch = (CheckBox) v.findViewById(R.id.check_local_index); + View options = v.findViewById(R.id.options); + if (selectionMode) { + options.setVisibility(View.GONE); + ch.setVisibility(View.VISIBLE); + ch.setChecked(selectedOsmEdits.contains(child)); + v.findViewById(R.id.icon).setVisibility(View.GONE); + ch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + selectItem(ch, child); + } + }); + } else { + v.findViewById(R.id.icon).setVisibility(View.VISIBLE); + options.setVisibility(View.VISIBLE); + ch.setVisibility(View.GONE); + } + + ((ImageView) options).setImageDrawable(app.getIconsCache() + .getThemedIcon(R.drawable.ic_overflow_menu_white)); + options.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onOptionsClick(v, child); + } + } + }); + v.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (selectionMode) { + ch.setChecked(!ch.isChecked()); + selectItem(ch, child); + } else { + if (listener != null) { + listener.onItemShowMap(child); + } + } + + } + }); + return v; + } + + private void selectItem(CheckBox checkBox, OsmPoint note) { + if (checkBox.isChecked()) { + selectedOsmEdits.add(note); + } else { + selectedOsmEdits.remove(note); + } + if (listener != null) { + listener.onItemSelect(note); + } + } + + public interface OsmEditsAdapterListener { + + void onItemSelect(OsmPoint point); + + void onItemShowMap(OsmPoint point); + + void onOptionsClick(View view, OsmPoint note); + } +} diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 2f4bff96e6..07ff8bbcd0 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -9,7 +9,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; -import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; import android.support.v7.view.ActionMode; import android.support.v7.widget.PopupMenu; @@ -30,7 +29,6 @@ import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; -import net.osmand.AndroidUtils; import net.osmand.data.PointDescription; import net.osmand.osm.edit.Node; import net.osmand.plus.OsmandApplication; @@ -60,23 +58,44 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -public class OsmEditsFragment extends OsmAndListFragment - implements SendPoiDialogFragment.ProgressDialogPoiUploader, OpenstreetmapLocalUtil.OnNodeCommittedListener { - OsmEditingPlugin plugin; - - private OsmEditsAdapter listAdapter; - private View footerView; - - private boolean selectionMode = false; - +public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialogFragment.ProgressDialogPoiUploader, OpenstreetmapLocalUtil.OnNodeCommittedListener { private final static int MODE_DELETE = 100; private final static int MODE_UPLOAD = 101; - private ActionMode actionMode; - private long refreshId; + private OsmEditingPlugin plugin; + + private View footerView; + + private List osmEdits; + private OsmEditsAdapter listAdapter; private ArrayList osmEditsSelected = new ArrayList<>(); + private ActionMode actionMode; + private long refreshId; + + public static void getOsmEditView(View v, OsmPoint child, OsmandApplication app) { + TextView viewName = ((TextView) v.findViewById(R.id.name)); + ImageView icon = (ImageView) v.findViewById(R.id.icon); + String name = OsmEditingPlugin.getEditName(child); + viewName.setText(name); + if (child.getGroup() == OsmPoint.Group.POI) { + icon.setImageDrawable(app.getIconsCache().getIcon(R.drawable.ic_type_info, R.color.color_distance)); + } else if (child.getGroup() == OsmPoint.Group.BUG) { + icon.setImageDrawable(app.getIconsCache().getIcon(R.drawable.ic_type_bug, R.color.color_distance)); + } + + TextView descr = (TextView) v.findViewById(R.id.description); + if (child.getAction() == OsmPoint.Action.CREATE) { + descr.setText(R.string.action_create); + } else if (child.getAction() == OsmPoint.Action.MODIFY) { + descr.setText(R.string.action_modify); + } else if (child.getAction() == OsmPoint.Action.DELETE) { + descr.setText(R.string.action_delete); + } else if (child.getAction() == OsmPoint.Action.REOPEN) { + descr.setText(R.string.action_modify); + } + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -108,23 +127,24 @@ public class OsmEditsFragment extends OsmAndListFragment super.onDestroyView(); } - public android.widget.ArrayAdapter getAdapter() { + @Override + public ArrayAdapter getAdapter() { return listAdapter; } - + private void selectAll() { - for (int i = 0; i < listAdapter.getCount(); i++) { - OsmPoint point = listAdapter.getItem(i); + for (int i = 0; i < osmEdits.size(); i++) { + OsmPoint point = osmEdits.get(i); if (!osmEditsSelected.contains(point)) { osmEditsSelected.add(point); } } - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } private void deselectAll() { osmEditsSelected.clear(); - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } @Override @@ -147,22 +167,22 @@ public class OsmEditsFragment extends OsmAndListFragment return true; } }); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); item = menu.add(R.string.local_osm_changes_backup). setIcon(R.drawable.ic_action_gshare_dark); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { new BackupOpenstreetmapPointAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, - listAdapter.dataPoints.toArray(new OsmPoint[listAdapter.dataPoints.size()])); + osmEdits.toArray(new OsmPoint[osmEdits.size()])); return true; } }); item = menu.add(R.string.shared_string_delete_all). setIcon(R.drawable.ic_action_delete_dark); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -178,8 +198,7 @@ public class OsmEditsFragment extends OsmAndListFragment @Override public boolean onCreateActionMode(final ActionMode mode, Menu menu) { enableSelectionMode(true); - MenuItem item = menu.add(R.string.local_openstreetmap_uploadall). - setIcon(R.drawable.ic_action_export); + MenuItem item = menu.add(R.string.local_openstreetmap_uploadall).setIcon(R.drawable.ic_action_export); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -188,9 +207,9 @@ public class OsmEditsFragment extends OsmAndListFragment return true; } }); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); osmEditsSelected.clear(); - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); updateSelectionMode(mode); return true; } @@ -208,7 +227,7 @@ public class OsmEditsFragment extends OsmAndListFragment @Override public void onDestroyActionMode(ActionMode mode) { enableSelectionMode(false); - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } }); @@ -240,9 +259,9 @@ public class OsmEditsFragment extends OsmAndListFragment return true; } }); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); osmEditsSelected.clear(); - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); updateSelectionMode(mode); return true; } @@ -260,7 +279,7 @@ public class OsmEditsFragment extends OsmAndListFragment @Override public void onDestroyActionMode(ActionMode mode) { enableSelectionMode(false); - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } }); @@ -286,8 +305,8 @@ public class OsmEditsFragment extends OsmAndListFragment return; } CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all); - for (int i = 0; i < listAdapter.getCount(); i++) { - OsmPoint point = listAdapter.getItem(i); + for (int i = 0; i < osmEdits.size(); i++) { + OsmPoint point = osmEdits.get(i); if (!osmEditsSelected.contains(point)) { selectAll.setChecked(false); return; @@ -297,11 +316,10 @@ public class OsmEditsFragment extends OsmAndListFragment } private void enableSelectionMode(boolean selectionMode) { - this.selectionMode = selectionMode; + listAdapter.setSelectionMode(selectionMode); //noinspection ConstantConditions getView().findViewById(R.id.select_all).setVisibility(selectionMode ? View.VISIBLE : View.GONE); - ((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode && - AndroidUiHelper.isOrientationPortrait(getActivity())); + ((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode && AndroidUiHelper.isOrientationPortrait(getActivity())); ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); } @@ -313,17 +331,15 @@ public class OsmEditsFragment extends OsmAndListFragment } private void deleteItems(final ArrayList points) { - DeleteOsmEditsConfirmDialogFragment.createInstance(points). - show(getChildFragmentManager(), DeleteOsmEditsConfirmDialogFragment.TAG); + DeleteOsmEditsConfirmDialogFragment.createInstance(points).show(getChildFragmentManager(), DeleteOsmEditsConfirmDialogFragment.TAG); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - getListView().setBackgroundColor( - getResources().getColor( - getMyApplication().getSettings().isLightContent() ? R.color.ctx_menu_info_view_bg_light - : R.color.ctx_menu_info_view_bg_dark)); + getListView().setBackgroundColor(getResources().getColor(getMyApplication().getSettings().isLightContent() + ? R.color.ctx_menu_info_view_bg_light + : R.color.ctx_menu_info_view_bg_dark)); } @Override @@ -333,15 +349,32 @@ public class OsmEditsFragment extends OsmAndListFragment } private void fetchData() { - ArrayList dataPoints = new ArrayList<>(); + osmEdits = new ArrayList<>(); List l1 = plugin.getDBPOI().getOpenstreetmapPoints(); List l2 = plugin.getDBBug().getOsmbugsPoints(); - dataPoints.addAll(l1); - dataPoints.addAll(l2); + osmEdits.addAll(l1); + osmEdits.addAll(l2); if (listAdapter == null) { - listAdapter = new OsmEditsAdapter(dataPoints); + listAdapter = new OsmEditsAdapter(getMyApplication(), osmEdits); + listAdapter.setSelectedOsmEdits(osmEditsSelected); + listAdapter.setAdapterListener(new OsmEditsAdapter.OsmEditsAdapterListener() { + @Override + public void onItemSelect(OsmPoint point) { + updateSelectionMode(actionMode); + } + + @Override + public void onItemShowMap(OsmPoint point) { + showOnMap(point); + } + + @Override + public void onOptionsClick(View view, OsmPoint note) { + openPopUpMenu(view, note); + } + }); ListView listView = getListView(); - if (dataPoints.size() > 0 && footerView == null) { + if (osmEdits.size() > 0 && footerView == null) { //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, null, false); listView.addFooterView(footerView); @@ -359,7 +392,7 @@ public class OsmEditsFragment extends OsmAndListFragment } }); } else { - listAdapter.setNewList(dataPoints); + listAdapter.setOsmEdits(osmEdits); } } @@ -390,31 +423,6 @@ public class OsmEditsFragment extends OsmAndListFragment builder.create().show(); } - public static void getOsmEditView(View v, OsmPoint child, OsmandApplication app) { - TextView viewName = ((TextView) v.findViewById(R.id.name)); - ImageView icon = (ImageView) v.findViewById(R.id.icon); - String name = OsmEditingPlugin.getEditName(child); - viewName.setText(name); - if (child.getGroup() == OsmPoint.Group.POI) { - icon.setImageDrawable(app.getIconsCache(). - getIcon(R.drawable.ic_type_info, R.color.color_distance)); - } else if (child.getGroup() == OsmPoint.Group.BUG) { - icon.setImageDrawable(app.getIconsCache(). - getIcon(R.drawable.ic_type_bug, R.color.color_distance)); - } - - TextView descr = (TextView) v.findViewById(R.id.description); - if (child.getAction() == OsmPoint.Action.CREATE) { - descr.setText(R.string.action_create); - } else if (child.getAction() == OsmPoint.Action.MODIFY) { - descr.setText(R.string.action_modify); - } else if (child.getAction() == OsmPoint.Action.DELETE) { - descr.setText(R.string.action_delete); - } else if (child.getAction() == OsmPoint.Action.REOPEN) { - descr.setText(R.string.action_modify); - } - } - @Override public void onNoteCommitted() { getMyApplication().runInUIThread(new Runnable() { @@ -425,107 +433,11 @@ public class OsmEditsFragment extends OsmAndListFragment }); } - protected class OsmEditsAdapter extends ArrayAdapter { - private List dataPoints; - - - public OsmEditsAdapter(List points) { - super(getActivity(), net.osmand.plus.R.layout.note, points); - dataPoints = points; - } - - public void setNewList(List dp) { - dataPoints = dp; - setNotifyOnChange(false); - clear(); - for (OsmPoint pnt : dp) { - add(pnt); - } - setNotifyOnChange(true); - notifyDataSetChanged(); - } - - public List getDataPoints() { - return dataPoints; - } - - public void delete(OsmPoint i) { - dataPoints.remove(i); - remove(i); - listAdapter.notifyDataSetChanged(); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - final OsmPoint child = getItem(position); - if (v == null) { - LayoutInflater inflater = getActivity().getLayoutInflater(); - v = inflater.inflate(net.osmand.plus.R.layout.note, parent, false); - } - getOsmEditView(v, child, getMyApplication()); - - v.findViewById(R.id.play).setVisibility(View.GONE); - - final CheckBox ch = (CheckBox) v.findViewById(R.id.check_local_index); - View options = v.findViewById(R.id.options); - if (selectionMode) { - options.setVisibility(View.GONE); - ch.setVisibility(View.VISIBLE); - ch.setChecked(osmEditsSelected.contains(child)); - v.findViewById(R.id.icon).setVisibility(View.GONE); - ch.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onItemSelect(ch, child); - } - }); - } else { - v.findViewById(R.id.icon).setVisibility(View.VISIBLE); - options.setVisibility(View.VISIBLE); - ch.setVisibility(View.GONE); - } - - ((ImageView) options).setImageDrawable(getMyApplication().getIconsCache() - .getThemedIcon(R.drawable.ic_overflow_menu_white)); - options.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - openPopUpMenu(v, child); - } - }); - v.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (selectionMode) { - ch.setChecked(!ch.isChecked()); - onItemSelect(ch, child); - } else { - showOnMap(child); - } - - } - }); - return v; - } - - public void onItemSelect(CheckBox ch, OsmPoint child) { - if (ch.isChecked()) { - osmEditsSelected.add(child); - } else { - osmEditsSelected.remove(child); - } - updateSelectionMode(actionMode); - } - - } - private void openPopUpMenu(View v, final OsmPoint info) { OsmandApplication app = getMyApplication(); final PopupMenu optionsMenu = new PopupMenu(getActivity(), v); DirectionsDialogs.setupPopUpMenuIcon(optionsMenu); - MenuItem item = optionsMenu.getMenu().add(R.string.shared_string_show_on_map). - setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_show_on_map)); + MenuItem item = optionsMenu.getMenu().add(R.string.shared_string_show_on_map).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_show_on_map)); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -536,25 +448,22 @@ public class OsmEditsFragment extends OsmAndListFragment } }); if (info instanceof OpenstreetmapPoint && info.getAction() != Action.DELETE) { - item = optionsMenu.getMenu().add(R.string.poi_context_menu_modify_osm_change) - .setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark)); + item = optionsMenu.getMenu().add(R.string.poi_context_menu_modify_osm_change).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark)); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - + @Override public boolean onMenuItemClick(MenuItem item) { OpenstreetmapPoint i = (OpenstreetmapPoint) getPointAfterModify(info); final Node entity = i.getEntity(); refreshId = entity.getId(); - EditPoiDialogFragment.createInstance(entity, false) - .show(getActivity().getSupportFragmentManager(), "edit_poi"); + EditPoiDialogFragment.createInstance(entity, false).show(getActivity().getSupportFragmentManager(), "edit_poi"); return true; } }); } if (info instanceof OsmNotesPoint) { - item = optionsMenu.getMenu().add(R.string.context_menu_item_modify_note) - .setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark)); + item = optionsMenu.getMenu().add(R.string.context_menu_item_modify_note).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark)); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override @@ -564,8 +473,7 @@ public class OsmEditsFragment extends OsmAndListFragment } }); } - item = optionsMenu.getMenu().add(R.string.shared_string_delete). - setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_delete_dark)); + item = optionsMenu.getMenu().add(R.string.shared_string_delete).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_delete_dark)); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -576,8 +484,7 @@ public class OsmEditsFragment extends OsmAndListFragment } }); - item = optionsMenu.getMenu().add(R.string.local_openstreetmap_upload). - setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_export)); + item = optionsMenu.getMenu().add(R.string.local_openstreetmap_upload).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_export)); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -589,9 +496,9 @@ public class OsmEditsFragment extends OsmAndListFragment } protected OsmPoint getPointAfterModify(OsmPoint info) { - if(info instanceof OpenstreetmapPoint && info.getId() == refreshId) { - for(OpenstreetmapPoint p : plugin.getDBPOI().getOpenstreetmapPoints()) { - if(p.getId() == info.getId()) { + if (info instanceof OpenstreetmapPoint && info.getId() == refreshId) { + for (OpenstreetmapPoint p : plugin.getDBPOI().getOpenstreetmapPoints()) { + if (p.getId() == info.getId()) { return p; } } @@ -623,22 +530,85 @@ public class OsmEditsFragment extends OsmAndListFragment super.uploadEnded(loadErrorsMap); for (OsmPoint osmPoint : loadErrorsMap.keySet()) { if (loadErrorsMap.get(osmPoint) == null) { - listAdapter.remove(osmPoint); + osmEdits.remove(osmPoint); } } listAdapter.notifyDataSetChanged(); } }; dialog.show(getActivity().getSupportFragmentManager(), ProgressDialogFragment.TAG); - UploadOpenstreetmapPointAsyncTask uploadTask = new UploadOpenstreetmapPointAsyncTask( - dialog, listener, plugin, points.length, closeChangeSet, anonymously); + UploadOpenstreetmapPointAsyncTask uploadTask = new UploadOpenstreetmapPointAsyncTask(dialog, listener, plugin, points.length, closeChangeSet, anonymously); uploadTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, points); } + private void showOnMap(OsmPoint osmPoint) { + boolean isOsmPoint = osmPoint instanceof OpenstreetmapPoint; + String type = osmPoint.getGroup() == OsmPoint.Group.POI ? PointDescription.POINT_TYPE_POI : PointDescription.POINT_TYPE_OSM_BUG; + String name = (isOsmPoint ? ((OpenstreetmapPoint) osmPoint).getName() : ((OsmNotesPoint) osmPoint).getText()); + getMyApplication().getSettings().setMapLocationToShow(osmPoint.getLatitude(), osmPoint.getLongitude(), 15, + new PointDescription(type, name), true, osmPoint); //$NON-NLS-1$ + MapActivity.launchMapActivityMoveToTop(getActivity()); + } + + private void deletePoint(OsmPoint osmPoint) { + osmEdits.remove(osmPoint); + listAdapter.notifyDataSetChanged(); + } + + private void notifyDataSetChanged() { + listAdapter.notifyDataSetChanged(); + } + + public static class DeleteOsmEditsConfirmDialogFragment extends DialogFragment { + public static final String TAG = "DeleteOsmEditsConfirmDialogFragment"; + private static final String POINTS_LIST = "points_list"; + + public static DeleteOsmEditsConfirmDialogFragment createInstance( + ArrayList points) { + DeleteOsmEditsConfirmDialogFragment fragment = new DeleteOsmEditsConfirmDialogFragment(); + Bundle args = new Bundle(); + args.putSerializable(POINTS_LIST, points); + fragment.setArguments(args); + return fragment; + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final OsmEditsFragment parentFragment = (OsmEditsFragment) getParentFragment(); + final OsmEditingPlugin plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class); + @SuppressWarnings("unchecked") + final ArrayList points = (ArrayList) getArguments().getSerializable(POINTS_LIST); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + assert points != null; + builder.setMessage(getString(R.string.local_osm_changes_delete_all_confirm, points.size())); + builder.setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Iterator it = points.iterator(); + while (it.hasNext()) { + OsmPoint osmPoint = it.next(); + assert plugin != null; + if (osmPoint.getGroup() == OsmPoint.Group.POI) { + plugin.getDBPOI().deletePOI((OpenstreetmapPoint) osmPoint); + } else if (osmPoint.getGroup() == OsmPoint.Group.BUG) { + plugin.getDBBug().deleteAllBugModifications((OsmNotesPoint) osmPoint); + } + it.remove(); + parentFragment.deletePoint(osmPoint); + } + parentFragment.notifyDataSetChanged(); + + } + }); + builder.setNegativeButton(R.string.shared_string_cancel, null); + return builder.create(); + } + } public class BackupOpenstreetmapPointAsyncTask extends AsyncTask { - private File osmchange; public BackupOpenstreetmapPointAsyncTask() { @@ -745,71 +715,4 @@ public class OsmEditsFragment extends OsmAndListFragment } } - private void showOnMap(OsmPoint osmPoint) { - boolean isOsmPoint = osmPoint instanceof OpenstreetmapPoint; - String type = osmPoint.getGroup() == OsmPoint.Group.POI ? PointDescription.POINT_TYPE_POI : PointDescription.POINT_TYPE_OSM_BUG; - String name = (isOsmPoint ? ((OpenstreetmapPoint) osmPoint).getName() : ((OsmNotesPoint) osmPoint).getText()); - getMyApplication().getSettings().setMapLocationToShow(osmPoint.getLatitude(), osmPoint.getLongitude(), 15, - new PointDescription(type, name), true, osmPoint); //$NON-NLS-1$ - MapActivity.launchMapActivityMoveToTop(getActivity()); - } - - private void deletePoint(OsmPoint osmPoint) { - listAdapter.delete(osmPoint); - } - - private void notifyDataSetChanged() { - listAdapter.notifyDataSetChanged(); - } - - public static class DeleteOsmEditsConfirmDialogFragment extends DialogFragment { - public static final String TAG = "DeleteOsmEditsConfirmDialogFragment"; - private static final String POINTS_LIST = "points_list"; - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final OsmEditsFragment parentFragment = (OsmEditsFragment) getParentFragment(); - final OsmEditingPlugin plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class); - @SuppressWarnings("unchecked") - final ArrayList points = - (ArrayList) getArguments().getSerializable(POINTS_LIST); - - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - assert points != null; - builder.setMessage(getString(R.string.local_osm_changes_delete_all_confirm, - points.size())); - builder.setPositiveButton(R.string.shared_string_delete, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Iterator it = points.iterator(); - while (it.hasNext()) { - OsmPoint osmPoint = it.next(); - assert plugin != null; - if (osmPoint.getGroup() == OsmPoint.Group.POI) { - plugin.getDBPOI().deletePOI((OpenstreetmapPoint) osmPoint); - } else if (osmPoint.getGroup() == OsmPoint.Group.BUG) { - plugin.getDBBug().deleteAllBugModifications((OsmNotesPoint) osmPoint); - } - it.remove(); - parentFragment.deletePoint(osmPoint); - } - parentFragment.notifyDataSetChanged(); - - } - }); - builder.setNegativeButton(R.string.shared_string_cancel, null); - return builder.create(); - } - - public static DeleteOsmEditsConfirmDialogFragment createInstance( - ArrayList points) { - DeleteOsmEditsConfirmDialogFragment fragment = new DeleteOsmEditsConfirmDialogFragment(); - Bundle args = new Bundle(); - args.putSerializable(POINTS_LIST, points); - fragment.setArguments(args); - return fragment; - } - } - } \ No newline at end of file From b010d0eb95ff9ccaf3bfb39c2182ce44aaaf6345 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 14:13:20 +0200 Subject: [PATCH 016/157] Create view holder --- .../osmand/plus/osmedit/OsmEditsAdapter.java | 68 ++++++++++++------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index fe96959346..4cf5339958 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -6,6 +6,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; +import android.widget.ImageButton; import android.widget.ImageView; import net.osmand.plus.OsmandApplication; @@ -56,38 +57,38 @@ public class OsmEditsAdapter extends ArrayAdapter { @NonNull @Override - public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - final OsmPoint child = getItem(position); - if (v == null) { - v = LayoutInflater.from(getContext()).inflate(R.layout.note, parent, false); + public View getView(int position, View convertView, @NonNull ViewGroup parent) { + View view = convertView; + if (view == null) { + view = LayoutInflater.from(getContext()).inflate(R.layout.note, parent, false); + OsmEditViewHolder holder = new OsmEditViewHolder(view); + view.setTag(holder); } - OsmEditsFragment.getOsmEditView(v, child, app); + final OsmPoint child = getItem(position); - v.findViewById(R.id.play).setVisibility(View.GONE); + OsmEditsFragment.getOsmEditView(view, child, app); - final CheckBox ch = (CheckBox) v.findViewById(R.id.check_local_index); - View options = v.findViewById(R.id.options); + final OsmEditViewHolder holder = (OsmEditViewHolder) view.getTag(); + holder.playImageButton.setVisibility(View.GONE); if (selectionMode) { - options.setVisibility(View.GONE); - ch.setVisibility(View.VISIBLE); - ch.setChecked(selectedOsmEdits.contains(child)); - v.findViewById(R.id.icon).setVisibility(View.GONE); - ch.setOnClickListener(new View.OnClickListener() { + holder.optionsImageButton.setVisibility(View.GONE); + holder.selectCheckBox.setVisibility(View.VISIBLE); + holder.selectCheckBox.setChecked(selectedOsmEdits.contains(child)); + holder.icon.setVisibility(View.GONE); + holder.selectCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - selectItem(ch, child); + selectItem(holder.selectCheckBox, child); } }); } else { - v.findViewById(R.id.icon).setVisibility(View.VISIBLE); - options.setVisibility(View.VISIBLE); - ch.setVisibility(View.GONE); + holder.icon.setVisibility(View.VISIBLE); + holder.optionsImageButton.setVisibility(View.VISIBLE); + holder.selectCheckBox.setVisibility(View.GONE); } - ((ImageView) options).setImageDrawable(app.getIconsCache() - .getThemedIcon(R.drawable.ic_overflow_menu_white)); - options.setOnClickListener(new View.OnClickListener() { + holder.optionsImageButton.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); + holder.optionsImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { @@ -95,12 +96,13 @@ public class OsmEditsAdapter extends ArrayAdapter { } } }); - v.setOnClickListener(new View.OnClickListener() { + holder.mainView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (selectionMode) { - ch.setChecked(!ch.isChecked()); - selectItem(ch, child); + CheckBox checkBox = holder.selectCheckBox; + checkBox.setChecked(!checkBox.isChecked()); + selectItem(checkBox, child); } else { if (listener != null) { listener.onItemShowMap(child); @@ -109,7 +111,7 @@ public class OsmEditsAdapter extends ArrayAdapter { } }); - return v; + return view; } private void selectItem(CheckBox checkBox, OsmPoint note) { @@ -123,6 +125,22 @@ public class OsmEditsAdapter extends ArrayAdapter { } } + private class OsmEditViewHolder { + View mainView; + ImageView icon; + ImageButton playImageButton; + CheckBox selectCheckBox; + ImageButton optionsImageButton; + + OsmEditViewHolder(View view) { + mainView = view; + icon = (ImageView) view.findViewById(R.id.icon); + playImageButton = (ImageButton) view.findViewById(R.id.play); + selectCheckBox = (CheckBox) view.findViewById(R.id.check_local_index); + optionsImageButton = (ImageButton) view.findViewById(R.id.options); + } + } + public interface OsmEditsAdapterListener { void onItemSelect(OsmPoint point); From c1dbd2c9e24822f445ed9c228562ddbd3ebecedd Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 14:35:28 +0200 Subject: [PATCH 017/157] Handle bottom divider visibility --- .../net/osmand/plus/audionotes/adapters/NotesAdapter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index 69f7866aa2..622eccfd6e 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -125,7 +125,7 @@ public class NotesAdapter extends ArrayAdapter { holder.icon.setImageDrawable(app.getIconsCache().getIcon(iconRes, colorRes)); } - holder.bottomDivider.setVisibility(View.VISIBLE); + holder.bottomDivider.setVisibility(hideBottomDivider(position) ? View.GONE : View.VISIBLE); holder.icon.setVisibility(selectionMode ? View.GONE : View.VISIBLE); holder.checkBox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); holder.options.setVisibility(selectionMode ? View.GONE : View.VISIBLE); @@ -183,6 +183,10 @@ public class NotesAdapter extends ArrayAdapter { return TYPE_COUNT; } + private boolean hideBottomDivider(int pos) { + return pos == getCount() - 1 || !(getItem(pos + 1) instanceof Recording); + } + private boolean isSelectAllChecked() { for (int i = 0; i < getCount(); i++) { Object item = getItem(i); From 9f0b48e721b3e8cfa874755319c50a9d0e8d5caa Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 15:03:14 +0200 Subject: [PATCH 018/157] Add header --- .../osmand/plus/osmedit/OsmEditsFragment.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 07ff8bbcd0..08e87b7a4a 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -101,11 +101,13 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class); - View view = getActivity().getLayoutInflater().inflate(R.layout.update_index, container, false); - ((TextView) view.findViewById(R.id.header)).setText(R.string.your_edits); - final CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all); - selectAll.setVisibility(View.GONE); + ListView listView = new ListView(getContext()); + View headerView = getActivity().getLayoutInflater().inflate(R.layout.list_item_header, listView, false); + listView.addHeaderView(headerView); + + ((TextView) headerView.findViewById(R.id.title_text_view)).setText(R.string.your_edits); + final CheckBox selectAll = (CheckBox) headerView.findViewById(R.id.check_box); selectAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -118,7 +120,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo } }); plugin.getPoiModificationLocalUtil().addNodeCommittedListener(this); - return view; + return listView; } @Override @@ -304,7 +306,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo if (view == null) { return; } - CheckBox selectAll = (CheckBox) view.findViewById(R.id.select_all); + CheckBox selectAll = (CheckBox) view.findViewById(R.id.check_box); for (int i = 0; i < osmEdits.size(); i++) { OsmPoint point = osmEdits.get(i); if (!osmEditsSelected.contains(point)) { @@ -318,7 +320,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo private void enableSelectionMode(boolean selectionMode) { listAdapter.setSelectionMode(selectionMode); //noinspection ConstantConditions - getView().findViewById(R.id.select_all).setVisibility(selectionMode ? View.VISIBLE : View.GONE); + getView().findViewById(R.id.check_box).setVisibility(selectionMode ? View.VISIBLE : View.GONE); ((FavoritesActivity) getActivity()).setToolbarVisibility(!selectionMode && AndroidUiHelper.isOrientationPortrait(getActivity())); ((FavoritesActivity) getActivity()).updateListViewFooter(footerView); } @@ -376,7 +378,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo ListView listView = getListView(); if (osmEdits.size() > 0 && footerView == null) { //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); - footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, null, false); + footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, listView, false); listView.addFooterView(footerView); listView.setHeaderDividersEnabled(false); listView.setFooterDividersEnabled(false); From 1dc65b0827333b92bffc12f550e46faf5db0ff92 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 15:03:36 +0200 Subject: [PATCH 019/157] Add header --- OsmAnd/res/layout/list_item_header.xml | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 OsmAnd/res/layout/list_item_header.xml diff --git a/OsmAnd/res/layout/list_item_header.xml b/OsmAnd/res/layout/list_item_header.xml new file mode 100644 index 0000000000..24ab6fb14f --- /dev/null +++ b/OsmAnd/res/layout/list_item_header.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From 31090be952099afdb65011c60c3dd3eeda63cdb7 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 15:04:09 +0200 Subject: [PATCH 020/157] Remove unnecessary listener --- OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 08e87b7a4a..2012e83927 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -384,15 +384,6 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo listView.setFooterDividersEnabled(false); } listView.setAdapter(listAdapter); - listView.setOnItemClickListener(new OnItemClickListener() { - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - OsmPoint it = listAdapter.getItem(position); - openPopUpMenu(view, it); - - } - }); } else { listAdapter.setOsmEdits(osmEdits); } From e201a7db89932636c9c8d4f08dbb800e1707f9f2 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 15:17:08 +0200 Subject: [PATCH 021/157] Refactor clicking in row --- .../osmand/plus/osmedit/OsmEditsAdapter.java | 21 +++++-------------- .../osmand/plus/osmedit/OsmEditsFragment.java | 7 ++++++- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 4cf5339958..9a74eb64e4 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -78,7 +78,9 @@ public class OsmEditsAdapter extends ArrayAdapter { holder.selectCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - selectItem(holder.selectCheckBox, child); + if (listener != null) { + listener.onItemSelect(child, holder.selectCheckBox.isChecked()); + } } }); } else { @@ -100,9 +102,7 @@ public class OsmEditsAdapter extends ArrayAdapter { @Override public void onClick(View v) { if (selectionMode) { - CheckBox checkBox = holder.selectCheckBox; - checkBox.setChecked(!checkBox.isChecked()); - selectItem(checkBox, child); + holder.selectCheckBox.performClick(); } else { if (listener != null) { listener.onItemShowMap(child); @@ -114,17 +114,6 @@ public class OsmEditsAdapter extends ArrayAdapter { return view; } - private void selectItem(CheckBox checkBox, OsmPoint note) { - if (checkBox.isChecked()) { - selectedOsmEdits.add(note); - } else { - selectedOsmEdits.remove(note); - } - if (listener != null) { - listener.onItemSelect(note); - } - } - private class OsmEditViewHolder { View mainView; ImageView icon; @@ -143,7 +132,7 @@ public class OsmEditsAdapter extends ArrayAdapter { public interface OsmEditsAdapterListener { - void onItemSelect(OsmPoint point); + void onItemSelect(OsmPoint point, boolean checked); void onItemShowMap(OsmPoint point); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 2012e83927..9016018e1e 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -361,7 +361,12 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo listAdapter.setSelectedOsmEdits(osmEditsSelected); listAdapter.setAdapterListener(new OsmEditsAdapter.OsmEditsAdapterListener() { @Override - public void onItemSelect(OsmPoint point) { + public void onItemSelect(OsmPoint point, boolean checked) { + if (checked) { + osmEditsSelected.add(point); + } else { + osmEditsSelected.remove(point); + } updateSelectionMode(actionMode); } From 94ff8b1bb44fd23709c9d7143d4977685557bee7 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 15:28:15 +0200 Subject: [PATCH 022/157] Fix selection in sorted by type list --- .../osmand/plus/audionotes/NotesFragment.java | 46 +++++++++++++++---- .../audionotes/adapters/NotesAdapter.java | 16 ++++++- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 4ac31679e8..f05b14a8f0 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -218,9 +218,9 @@ public class NotesFragment extends OsmAndListFragment { @Override public void onHeaderClick(int type, boolean checked) { if (checked) { - selectAll(); + selectAll(type); } else { - deselectAll(); + deselectAll(type); } updateSelectionTitle(actionMode); } @@ -261,18 +261,46 @@ public class NotesFragment extends OsmAndListFragment { fragment.show(getChildFragmentManager(), SortByMenuBottomSheetDialogFragment.TAG); } - private void selectAll() { - for (int i = 0; i < listAdapter.getCount(); i++) { - Object item = listAdapter.getItem(i); - if (item instanceof Recording) { - selected.add((Recording) item); + private List getRecordingsByType(int type) { + List allRecs = new LinkedList<>(plugin.getAllRecordings()); + List res = new LinkedList<>(); + for (Recording rec : allRecs) { + if (isAppropriate(rec, type)) { + res.add(rec); } } + return res; + } + + private boolean isAppropriate(Recording rec, int type) { + if (type == NotesAdapter.TYPE_AUDIO_HEADER) { + return rec.isAudio(); + } else if (type == NotesAdapter.TYPE_PHOTO_HEADER) { + return rec.isPhoto(); + } + return rec.isVideo(); + } + + private void selectAll(int type) { + if (type == NotesAdapter.TYPE_DATE_HEADER) { + for (int i = 0; i < listAdapter.getCount(); i++) { + Object item = listAdapter.getItem(i); + if (item instanceof Recording) { + selected.add((Recording) item); + } + } + } else { + selected.addAll(getRecordingsByType(type)); + } listAdapter.notifyDataSetInvalidated(); } - private void deselectAll() { - selected.clear(); + private void deselectAll(int type) { + if (type == NotesAdapter.TYPE_DATE_HEADER) { + selected.clear(); + } else { + selected.removeAll(getRecordingsByType(type)); + } listAdapter.notifyDataSetInvalidated(); } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java index 622eccfd6e..4ab488d049 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/adapters/NotesAdapter.java @@ -78,7 +78,7 @@ public class NotesAdapter extends ArrayAdapter { holder.checkBox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); holder.headerRow.setEnabled(selectionMode); if (selectionMode) { - holder.checkBox.setChecked(isSelectAllChecked()); + holder.checkBox.setChecked(isSelectAllChecked(type)); holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -187,10 +187,13 @@ public class NotesAdapter extends ArrayAdapter { return pos == getCount() - 1 || !(getItem(pos + 1) instanceof Recording); } - private boolean isSelectAllChecked() { + private boolean isSelectAllChecked(int type) { for (int i = 0; i < getCount(); i++) { Object item = getItem(i); if (item instanceof Recording) { + if (type != TYPE_DATE_HEADER && !isAppropriate((Recording) item, type)) { + continue; + } if (!selected.contains(item)) { return false; } @@ -199,6 +202,15 @@ public class NotesAdapter extends ArrayAdapter { return true; } + private boolean isAppropriate(Recording rec, int type) { + if (type == NotesAdapter.TYPE_AUDIO_HEADER) { + return rec.isAudio(); + } else if (type == NotesAdapter.TYPE_PHOTO_HEADER) { + return rec.isPhoto(); + } + return rec.isVideo(); + } + private class HeaderViewHolder { final View view; From 9da8b60b43c81d55c58c4c6df62bdfcf4470d0f4 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 15:44:04 +0200 Subject: [PATCH 023/157] Fix unnecessary scrolling --- OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index f05b14a8f0..73c4266851 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -292,7 +292,7 @@ public class NotesFragment extends OsmAndListFragment { } else { selected.addAll(getRecordingsByType(type)); } - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } private void deselectAll(int type) { @@ -301,7 +301,7 @@ public class NotesFragment extends OsmAndListFragment { } else { selected.removeAll(getRecordingsByType(type)); } - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } private List sortItemsByDateDescending(List recs) { @@ -405,7 +405,7 @@ public class NotesFragment extends OsmAndListFragment { private void updateSelectionMode(ActionMode m) { updateSelectionTitle(m); - listAdapter.notifyDataSetInvalidated(); + listAdapter.notifyDataSetChanged(); } private void deleteItems(final Set selected) { From fdc85d7e577673b9f0c76a00b352bbe267aecbe5 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Thu, 16 Nov 2017 22:13:58 +0000 Subject: [PATCH 024/157] Translated using Weblate (Sardinian) Currently translated at 100.0% (2501 of 2501 strings) --- OsmAnd/res/values-sc/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 0605cae571..1eef73450a 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -2869,4 +2869,5 @@ Pro praghere iscrie su còdighe intreu Ammustra una o duas fritzas chi indicant sa diretzione cara a sos marcadores ativos. Issèbera comente ammustrare sa distàntzia cun sos marcadores ativos. Issèbera cantos indicadores de diretzione cheres ammustrare. + Àteru From d8419f161ab65c9d09ade470166928c5cb4437bd Mon Sep 17 00:00:00 2001 From: Viktar Vauchkevich Date: Fri, 17 Nov 2017 04:45:00 +0000 Subject: [PATCH 025/157] Translated using Weblate (Belarusian) Currently translated at 100.0% (2501 of 2501 strings) --- OsmAnd/res/values-be/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 31349191c4..826a17331f 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -2649,7 +2649,7 @@ Дякуй вам за набыццё поўнай версіі OsmAnd! Абраць перасечанасць мясцовасці Правабаковы рух - Аўтаматычны + Аўтаматычна Аднаўленне пакупак Шрыфты для мапы Аўтамаштаб мапы ўкл/адкл From fa400d11b94bd6463bb02c66f0a65c768c8b4435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ja=C5=ADhien?= Date: Fri, 17 Nov 2017 09:51:03 +0000 Subject: [PATCH 026/157] Translated using Weblate (Belarusian (latin)) Currently translated at 100.0% (2501 of 2501 strings) --- OsmAnd/res/values-be-rBY/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml index 096bccd047..468058bbe2 100644 --- a/OsmAnd/res/values-be-rBY/strings.xml +++ b/OsmAnd/res/values-be-rBY/strings.xml @@ -2414,7 +2414,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Adnaŭleńnie pakupak Šryfty dła mapy Pravabakavy ruch - Aŭtamatyčny + Aŭtamatyčna Nie pakazvać paviedamlieńni pry starcie Opcyi parkoŭki Dziakuj Vam za nabyćcio poŭnaj versii OsmAnd! @@ -2920,5 +2920,5 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd \@string/shared_string_history Naprava Nalieva - Boĺš + Bolš From bb2a401e1effbbe6e2b4a102930a572a2d225726 Mon Sep 17 00:00:00 2001 From: ezjerry liao Date: Fri, 17 Nov 2017 00:21:32 +0000 Subject: [PATCH 027/157] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2501 of 2501 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 070913c4dd..4a6569e714 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -1163,7 +1163,7 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 美國 加拿大 歐洲、亞洲、拉丁美洲和同類的 - 英國、印度和其他 + 英國、印度和同類的 駕駛區域 FPS 除錯資訊 From cb74d9e6dc5612676f38eecc55653969ca3c3268 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Thu, 16 Nov 2017 22:20:49 +0000 Subject: [PATCH 028/157] Translated using Weblate (French) Currently translated at 99.8% (2496 of 2501 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 4afb5e8d38..7eb77c7059 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3020,4 +3020,5 @@ représentant la zone : %1$s x %2$s Afficher une ou deux flèches indiquant la direction vers les marques actives. Indiquez comment afficher la distance avec les marques actives. Indiquez le nombre d\'indicateurs de direction à afficher. + Plus From 846d2882a3e8cc73d34b806760da49e10cabef66 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Fri, 17 Nov 2017 06:33:34 +0000 Subject: [PATCH 029/157] Translated using Weblate (Hebrew) Currently translated at 64.2% (1606 of 2501 strings) --- OsmAnd/res/values-he/strings.xml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index 2ad79db679..8016130948 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -854,7 +854,7 @@ הצגת המפה בתלת־ממד הצגת נ״ע על גבי המפה (שימוש במסנן האחרון שנבחר) הצגת נ״ע - נא לבחור את המקור של אריחי מפה מקוונים או שמורים + נא לבחור מקור של אריחי מפה מקוונים או שמורים. מקור אריחי המפה מקור המפה להשתמש באינטרנט @@ -1134,7 +1134,7 @@ נקודת המוצא לא נבחר אורך סרטון - האורך של כל סרטון מוקלט לא יהיה גדול ממרווח הזמן המוגדר + הגבול העליון לאורך סרטונים מוקלטים. כמות המקום שמותר לנצל לצורך אחסון כל הסרטונים המוקלטים. עדכונים חיים בחירת הנחיה קולית @@ -1210,10 +1210,10 @@ שם המשתמש שגוי! עד מ־ - הצגת תמונות שנוספו בתקופה מסוימת. - תאריכים + הצגת תמונות שנוספו בלבד + תאריך הקלדת שם משתמש - הצגת תמונות שנוספו על ידי משתמש מסוים. + הצגת תמונות שנוספו רק על ידי שם משתמש אפשר לסנן תמונות לפי השולח או לפי תאריך. המסננים חלים רק על תקריב בגודל מסוים. מד זווית @@ -1489,16 +1489,16 @@ ניתן לייבא קבוצות מועדפים או נקודות דרך במסלול כסמנים. שניים אחד - על המפה יופיע קו שמחבר בין המיקום שלך למיקומים של הסמנים הפעילים. - על המפה יופיעו חץ או שניים המציינים את כיוון הסמנים הפעילים. - ניתן לבחור איך ברצונך להציג את המרחק עד לסמנים הפעילים. - נא לבחור כמה מחווני כיוון ברצונך לראות. + הצגת קווים מנחים מהמיקום שלך למיקומים של הסמנים הפעילים. + הצגת חץ או שניים המציינים את כיוון הסמנים הפעילים. + ניתן לבחור כיצד להציג את המרחק עד לסמנים הפעילים. + נא לבחור כמה מחווני כיוון יופיעו. כמות הספרות ימין שמאל הצגת מקלדת ספרות הדבקה - מעבר אוטומטי לשדה הבא לאחר הזנת %1$d ספרות אחרי הנקודה העשרונית + מעבר אוטומטי לשדה הבא לאחר הזנת %1$d ספרות אחרי הנקודה העשרונית. %1$d ספרות מעבר לשדה הבא נוספו נקודות דרך לסמני המפה @@ -1989,4 +1989,10 @@ משוב יצירת קשר אתנו מקרא מפה + הצגת חצים על המפה + הסרה מסמני המפה + יורד + עולה + תאריך ההוספה + סידור לפי: From c54b844b8b87c8d6b04dd25bb204f3c038668ff4 Mon Sep 17 00:00:00 2001 From: iman Date: Fri, 17 Nov 2017 02:56:07 +0000 Subject: [PATCH 030/157] Translated using Weblate (Persian) Currently translated at 99.9% (2500 of 2501 strings) --- OsmAnd/res/values-fa/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index ad7f8507ca..047a11fef3 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -2959,4 +2959,5 @@ واردکردن گروه‌ها می‌توانید گروه‌های نقاط برگزیده یا نقاط بین‌راهی را به‌عنوان نشانه وارد کنید. نشانه‌هایی که به‌عنوان عبورکرده مشخص شده‌اند در این صفحه نشان داده می‌شوند. + بیشتر From 9b179b2b1a233b843d10b7d17b0eabbac302b8cd Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Fri, 17 Nov 2017 12:58:16 +0000 Subject: [PATCH 031/157] Translated using Weblate (Russian) Currently translated at 88.3% (2209 of 2501 strings) --- OsmAnd/res/values-ru/strings.xml | 126 ++++++++++++++++++------------- 1 file changed, 72 insertions(+), 54 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 9bd4ea18fe..2d0238c568 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1,33 +1,33 @@ Место - Пункт назначения находится в области с частным доступом. Вы хотите разрешить доступ к частным дорогам для этой поездки? + Ваш пункт назначения находится на частной территории. Вы хотите разрешить доступ к частным дорогам для этой поездки? Искать снова Увеличить радиус поиска Ничего не найдено :( - Изменить запрос или увеличить радиус поиска + Изменить запрос или увеличить радиус поиска. Показать/скрыть заметки OSM Показать заметки OSM Скрыть заметки OSM Нажатие на кнопку действия отобразит/скроет заметки OSM с карты. Отсортировано по расстоянию - Поиск в избранном + Поиск в избранных Для того, чтобы отобразить затенение рельефа, вам нужно загрузить специальную карту для этой области. - Для того, чтобы отобразить затенение рельефа, вам нужно купить и установить плагин + Для того, чтобы отобразить затенение рельефа, вам нужно приобрести и установить плагин \"Contour Lines\" Для того, чтобы отобразить линии контуров рельефа, вам нужно загрузить специальную карту для этой области. Плагин - Для того, чтобы отобразить линии контуров рельефа, вам нужно купить и установить плагин + Для того, чтобы отобразить линии контуров рельефа, вам нужно приобрести и установить плагин \"Contour Lines\" Цветовая схема Отображать с масштаба Анимация моей позиции - Включить анимацию прокрутки карты с моей позицией во время навигации + Включить анимацию прокрутки карты с моей позицией во время навигации. Масштаб: %1$s Имя группы Изменить цвет Изменить имя Возможно, потребуется очень много времени для локального (оффлайн) расчёта маршрута. Пожалуйста, добавьте один или более промежуточных пунктов на маршруте, если расчет не закончен через 10 или более минут. Разрешить частный доступ - Разрешить доступ к частным владениям + Разрешить доступ на частную территорию. Обзор Выберите улицу в %1$s @@ -46,48 +46,48 @@ Опции парковки Спасибо за покупку полной версии OsmAnd! Не показывать сообщения при старте - Отображаются скидки и специальные сообщения о местных событиях + Подавляет отображение сообщений о скидках и специальных локальных событиях. - OsmAnd отсылает общую информацию об использовании программы. Мы не собираем местонахождения пользователей или их запросы, относящиеся к личным данным. + OsmAnd собирает информацию о том, какие вы используете части приложения. Ваше местоположение никогда не отправляется, как и все, что вы вводите, какие области читаете, что ищете или скачиваете. Не отсылать анонимную статистику использования Авто Правосторонняя навигация Видимые Восстановить покупки - Доп.шрифты для карты + Шрифты для карты Посмотреть на карте Морские карты - Морские контуры глубин - Морские контуры глубин - Морские отметки глубин южного полушария - Морские отметки глубин северного полушария - Контуры и точки глубин. + Контуры морских глубин + Контуры морских глубин + Отметки морских глубин южного полушария + Отметки морских глубин северного полушария + Набор карт, содержащих контуры и точки морских глубин. Подпишитесь на нашу email рассылку про скидки на OsmAnd и получите 3 дополнительные загрузки карт! Ошибка Автомасштаб карты вкл/выкл - Нажатие на кнопку действия переключит автомасштаб карты. + Нажатие на кнопку действия вкл/выкл автомасштаб карты в зависимости от скорости. Включение автомасштаба Отключение автомасштаба Добавить пункт назначения Заменить пункт назначения Добавить первую промежуточную точку - Нажатие на кнопку действия добавит пункт назначения в центр экрана. Ранее установленный пункт становится последней промежуточной точкой. - Нажатие на кнопку действия установит пункт назначения в центр экрана. - Нажатие на кнопку действия добавит в центр экрана первую промежуточную точку маршрута. - Карта покрытия выключена - Подложка выключена - Холмы - Равнины - Больше равнин - Скоростной + Нажатие на кнопку действия добавит пункт назначения по центру экрана. Предыдущий пункт назначения станет последней промежуточной точкой. + Нажатие на кнопку действия установит пункт назначения по центру экрана. + Нажатие на кнопку действия добавит по центру экрана первую промежуточную точку маршрута. + Нет покрытия + Нет подложки + Холмистый + Менее холмистый + Равнинный + Короткие маршруты Сбалансированный - Безопасный - Приоритет равнинам или холмам + Предпочитать переулком + Предпочтительный рельеф: равнинный или холмистый. Уклон Добавить новую папку Точки успешно удалены. Вы собираетесь удалить %1$d точку(и). Вы уверены? - Точки для прохождения + Повороты на маршруте Важные точки маршрута Трек Макс. скорость @@ -110,7 +110,7 @@ Стиль вождения - Степень пересечённости рельефа + Выберите пересеченность местности Использовать данные о высотах Использовать данные о рельефе земной поверхности, предоставленные SRTM, ASTER и EU-DEM @@ -1007,7 +1007,7 @@ Начать моделирование Файл не может быть переименован. Файл с таким именем уже существует. - Имени + Имя Категория Установка версии Навигационный сервис OsmAnd @@ -1620,7 +1620,7 @@ Близлежащие POI Туры Все - Расстоянию + Расстояние "Подтрек: %1$s " Пункт назначения Запись поездки @@ -2389,29 +2389,29 @@ Голос выключен Голос включен Файл не может быть перемещен. - Благодарим вас за покупку морских контуров глубин! + Благодарим вас за покупку контуров морских глубин! Добавить фотографии Разрешения - Онлайн фото - У нас нет фотографий для этого места - Поделиться своим собственным уличным видом этого места через Mapillary. + Онлайн фотографии + У нас нет фотографий для этого места. + Поделиться своими собственными уличными видами этого места через Mapillary. Виджет Mapillary - Позволяет быстро внести свой вклад в Mapillary - Уличные онлайн фотографии для всех. Исследуйте места, сотрудничайте, снимайте мир. + Позволяет быстро внести свой вклад в Mapillary. + Уличные онлайн фотографии для всех. Открывайте для себя места, сотрудничайте, снимайте мир. Mapillary - Уличные фотографии для всех. Исследуйте места, сотрудничайте, снимайте мир. + Уличные фотографии для всех. Открывайте для себя места, сотрудничайте, снимайте мир. Название содержит слишком много заглавных букв. Вы действительно хотите продолжить? - Нажмите эту кнопку, чтобы приостановить навигацию или возобновить ее. + Нажмите эту кнопку, чтобы приостановить или возобновить навигацию. Показывать диалог завершения навигации Запуск/остановка навигации - Нажмите эту кнопку, чтобы начать навигацию, или остановить ее. + Нажмите эту кнопку, чтобы начать или остановить навигацию. Сохранять записанные треки в папках помесячно Сохранять записанные треки в подпапках с записью месяца (например, 2017-01). Кэш тайлов Неверное имя пользователя! Просмотр фотографий, добавленных в определенный период. - Даты - Просмотр фотографий, добавленных определенным пользователем. + Дата + Просмотр только фотографий, добавленных Имя пользователя Радиус-линейка Открыть Mapillary @@ -2439,17 +2439,19 @@ До От Обновить - Вы можете фильтровать изображения по отправителю или по дате. Фильтры применяются только для больших масштабов. + Вы можете фильтровать фотографии по отправителю или по дате. Фильтры применяются только для больших масштабов. OsmAnd не удается импортировать файл. Проверьте имеет ли OsmAnd разрешение на чтение файла из его местоположения. Откорректированное расстояние - Вы можете взять ваши собственные фотографии или серии фотографий и прикрепить их к этому месту на карте. Для этого Вам необходимо установить с Goggle Play маркета приложение Mapillary. + Вы можете взять ваши собственные фотографии или серии фотографий и прикрепить их к этому месту на карте. +\n +\nДля этого Вам необходимо установить с Goggle Play маркета приложение Mapillary. Высота маршрута Имя GPX файла: Показать на карте после сохранения Просмотрите карту и добавьте точки Измерить расстояние Необходимо добавить хотя бы одну точку. - Отправить изображение в Mapillary + Отправить фотографию в Mapillary Улучшить фотопокрытие через Mapillary Скрыть от шкалы приближения "\\022 Новый контекстно-зависимый Графический Интерфейс для выделения локаций на карте и других экранов @@ -2475,7 +2477,7 @@ Сортировать по Параметры маркера Не использовать анимацию - Отключение анимации в приложении + Отключение анимации в приложении. Выйти без сохранения? Сохранить как точки маршрута Сохранить как линию @@ -2490,7 +2492,7 @@ %1$d из %2$d Список Группы - Пройдено: %1$s + Последнее использование: %1$s Сделать активным Сегодня Вчера @@ -2506,10 +2508,10 @@ по возрастанию Формат координат Использовать системную клавиатуру - Выбор формата координат для ввода. Вы всегда можете изменить его, нажав опции. + Выбор формата координат для ввода. Вы всегда можете изменить его, нажав \"Параметры\". Быстрый ввод координат Избегать ледовых дорог, бродов - Избегать ледовых дорог и бродов + Избегать ледовых дорог и бродов. Моя позиция Финиш Сортировать @@ -2521,14 +2523,14 @@ Сделать маршрут круговым Навигация Использовать позицию - Дате добавления - Сортировать по: + Дата добавления + Критерий сортировки: Выберите способ указания расстояния и направления до маркеров на экране карты: Смена ориентации карты - Выберите скорость с которой ориентация карты переключится с \"По направлению движения\" на \"По направлению компаса\" + Выберите ниже, на которой скорости ориентация карты переключается с \"По направлению движения\" на \"По направлению компаса\". Все маркеры перемещены в историю - Маркер перемещен в историю - Маркер перемещен в действующие + Маркер карты перемещен в историю + Маркер карты перемещен в действующие Указатель расстояния • Полностью переработанные маркеры карты, с направляющими линиями и планированием маршрута \n @@ -2595,4 +2597,20 @@ Нажатие на карте переключает кнопки управления и виджеты. Показать на верхней панели могут быть импортированы как избранные точки или как трек файл. + Больше + Импортировать как файл GPX + Импортировать как избранные + Импорт файла + Неправильный ввод + Просмотр + Путевые точки добавлены в маркеры карты + Маршрут рассчитан + Путешествие + Добавить вашу позицию как первую точку при планировании маршрута. + сохранено + Показывать пройденные + Скрыть пройденные + Удалить из маркеров карты + Продолжать показывать на карте + Линия From b7e799ccb556085087987ebc7e56c103b4c7d09a Mon Sep 17 00:00:00 2001 From: ace shadow Date: Fri, 17 Nov 2017 00:01:16 +0000 Subject: [PATCH 032/157] Translated using Weblate (Slovak) Currently translated at 99.2% (2482 of 2501 strings) --- OsmAnd/res/values-sk/strings.xml | 125 ++++++++++++++++--------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index e07c555d7c..82ec632eab 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -203,7 +203,7 @@ Natívna knižnica nie je podporovaná na tomto zariadení. Inicializácia natívnej knižnice… Automatické centrovanie - Čas pokiaľ sa mapové zobrazenie zosynchronizuje s pozíciou + Čas pokiaľ sa mapové zobrazenie zosynchronizuje s pozíciou. Automatické centrovanie iba pri navigácii Povoliť automatické centrovanie pozície iba v režime navigácie. @@ -247,7 +247,7 @@ %1$d z %2$d položky(iek) úspešne nahraných. Poskytnúť pre OSM Zobraziť podrobnejšiu mapu - Zobrazí viac detailov offline vektorovej mapy (cesty, atď.) už pri nižších priblíženiach + Zobraziť viac detailov offline vektorovej mapy (cesty, atď.) už pri nižších priblíženiach. Obľúbené miesta boli úspešne odstránené. Idete zmazať %1$d obľúbených bodov a %2$d skupín obľúbených. Ste si istý? Doma @@ -264,7 +264,7 @@ %1$d položiek z %2$d úspešne obnovených. Žiadne položky pre akciu: %1$s Chcete %1$s %2$s položiek. Ste si istý? - Správca mapových súborov + Spravovať mapové súbory. Obnoviť Zálohovať (vypnúť) Znovu načítať z karty SD @@ -280,10 +280,10 @@ POI údaje TTS hlas Nové hľadanie - Výber veľkosti písma pre názvy na mape + Vybrať veľkosť písma pre názvy na mape. Veľkosť písma Ladiace info vykresľovania - Zobrazí údaje výkonu vykresľovania pre ladiace účely + Zobraziť údaje výkonu vykresľovania pre účely ladenia. Rozbaľujú sa nové údaje… Je vybratá online navigačná služba, ale nie je dostupné pripojenie na Internet. Nepodporovaný jazyk @@ -295,34 +295,34 @@ Prejsť pozdĺž celej trasy Pre túto oblasť je dostupná offline vektorová mapa.\n\t\n\tNa jej použitie aktivujte Menu → Zobrazenie → Zdroj mapy… → Vektorové OSM mapy. Výstup hlasových pokynov - Výber reproduktora pre prehrávanie hlasových pokynov + Vybrať reproduktor pre prehrávanie hlasových pokynov. Zvuk telefónneho hovoru (tiež preruší Bluetooth stereo v aute) Oznámenia Hudba/médiá Aplikácia nemôže stiahnuť mapovú vrstvu %1$s, prosím skúste ju preinštalovať. - Úprava priehľadnosti prekrývacej mapy + Zmeniť priehľadnosť prekrývacej mapy. Priehľadnosť prekrývacej mapy - Úprava priehľadnosti základnej mapy + Upraviť priehľadnosť základnej mapy. Priehľadnosť mapy Upravte priehľadnosť (0 - priehľadný, 255 - nepriehľadný) Podkladová mapa… Podkladová mapa - Výber podkladovej mapy + Vybrať podkladovú mapu. Prekrývacia mapa… Prekrývacia mapa - Výber mapy na prekrytie - Mapa je už nainštalovaná, nastavenia budú zaktualizované - Vyberte mapy na inštaláciu alebo aktualizáciu - Pre túto operáciu je potrebné internetové pripojenie, avšak nie je dostupné + Vybrať mapu na prekrytie základnej. + Mapa je už nainštalovaná, nastavenia budú zaktualizované. + Vyberte (dlaždicové) mapy na inštaláciu alebo aktualizáciu. + Pre túto operáciu je potrebné internetové pripojenie, avšak nie je dostupné. Inštalovať viac… - Min. úroveň priblíženia pre použitie vektorových máp + Minimálna úroveň priblíženia pre použitie vektorových máp. Min. úroveň vektorového zoomu - " "Online OSM mapová klasifikácia s obrázkami" - Prihodila sa chyba pri offline hľadaní - Nedá sa parsovať geo obsah: "%s" + Online OSM mapová klasifikácia s obrázkami. + Vyskytla sa chyba pri offline hľadaní. + Nedá sa parsovať geo obsah: \'%s\'. Nájsť adresu použitím stiahnutých máp Systémový - Zmeniť zobrazovaný jazyk (po zmene je potrebné reštartovať OsmAnd) + Zmeniť jazyk zobrazenia (po zmene je potrebné reštartovať OsmAnd). Jazyk zobrazenia Zmeniť jednotky dĺžky. Jednotky dĺžky @@ -396,38 +396,38 @@ Nočný režim Východ/Západ slnka Svetelný senzor - Výber medzi denným/nočným režimom + Vybrať pravidlo prepínania denného/nočného režimu. Denný/nočný režim Stiahnuť {0} súbor/y/ov ({1} MB)? Bolo vybraných {0} položiek Zobraziť stiahnuté - Konfigurácia zobrazenia a iných globálnych nastavení + Konfigurovať zobrazenie a iné globálne nastavenia. Všeobecné nastavenia Stiahnutie, zobrazenie podrobností a správa máp na zariadení. Spravovať mapové súbory Režim na pozadí - OsmAnd bude bežať v systéme aj počas vypnutej obrazovky + OsmAnd bude bežať v systéme aj počas vypnutej obrazovky. Najrýchlejšia trasa - Zapnite na výpočet najrýchlejšej trasy alebo vypnite pre ekonomickú trasu + Zapnite pre výpočet najrýchlejšej trasy alebo vypnite pre ekonomickú trasu. Pri priblížení {0} sa stiahne {1} dlaždíc ({2} Mb ) Stiahnuť mapu Vybrať max. priblíženie viditeľnej oblasti na načítanie Táto mapa sa nedá stiahnuť Postupné vykresľovanie - Výber medzi postupným alebo celoobrazovým vykresľovaním + Použiť postupné vykresľovanie namiesto celoobrazového. Nastala chyba pri vykresľovaní vybranej oblasti Použiť umiestnenie… Vykresľovač bol úspešne načítaný Nastala výnimka: vykresľovač nebol načítaný Vektorový vykresľovač - Výber vzhľadu (stiahnutej) vektorovej mapy + Vybrať vzhľad vykreslenia vektorovej mapy. Zobraziť web stránku POI Zobraziť telefónny kontakt POI Web stránka Telefónny kontakt sem zadajte čo chcete nájsť Mapa s vysokým rozlíšením - Použitie mapy s vysokým rozlíšením pre zariadenia s vysokou hustotou bodov + Nerozťahovať (a nerozmazať) mapové dlaždice na obrazovkách s vysokou hustotou bodov. Umiestnenie zatiaľ nenájdené Hľadať hromadnú dopravu Hľadá sa preprava (bez cieľa): @@ -465,13 +465,13 @@ Cesta OSM Poznámky (online) - Body záujmu (POI)… + Vrstva bodov záujmu (POI)… Zdroj mapy… Zobrazenie Hľadať bod záujmu (POI) - Použitie trackballu na pohyb po mape + Použiť trackball na pohyb mapy. Použiť trackball - Nastaví max. čakaciu dobu pre každú ustálenú pozíciu na pozadí + Nastaviť max. čakaciu dobu pre každé ustálenie pozície na pozadí. Max. doba čakania na fix Kde som? Navigačná služba OsmAnd @@ -479,14 +479,14 @@ GPS sekúnd min. - Nastaví interval rozpoznávania pozície službou v pozadí + Nastaviť interval rozpoznávania pozície službou v pozadí. Interval zisťovania pozície z GPS - Výber poskytovateľa umiestnenia pre službu v pozadí + Vybrať poskytovateľa umiestnenia pre službu v pozadí. Poskytovateľ umiestnenia - Spustí OsmAnd v pozadí systému, aby mohol sledovať polohu keď je obrazovka vypnutá + Spustí OsmAnd v pozadí systému, aby mohol sledovať polohu, keď je obrazovka vypnutá. Spustiť OsmAnd v pozadí Služba pre navigovanie v pozadí vyžaduje zapnutý zdroj umiestnenia. - Určiť možnosti navigácie + Určiť možnosti navigácie. Navigácia Skryť filter Zobraziť filter @@ -520,7 +520,7 @@ Na výšku Na šírku Orientácia zobrazenia mapy - Výber orientácie obrazovky + Na výšku, na šírku alebo podľa zariadenia. Formát otváracích hodín nie je podporovaný na úpravu Pridať nové pravidlo Linky @@ -535,7 +535,7 @@ zastávky na prejdenie Vzdialenosť trasy Hromadná doprava - Zobrazenie zastávok hromadnej dopravy na mape + Zobraziť zastávky hromadnej dopravy na mape. Zobraziť zastávky hrom.dopravy Navigačná aplikácia OsmAnd Údaje POI boli úspešne aktualizované ({0} bolo načítaných) @@ -560,9 +560,9 @@ Offline hľadanie Online hľadanie Max. online úroveň priblíženia - Výber maximálnej úrovne priblíženia na stiahnutie online dlaždíc + Zadajte maximálnu úroveň priblíženia, kedy budú sťahované online dlaždice. Celková vzdialenosť %1$s, čas cestovania %2$d hod. %3$d min. - Výber online alebo offline navigačnej služby + Vybrať online alebo offline navigačnú službu. Navigačná služba Priečinok pre uloženie na SD karte nie je prístupný! Stiahnuť {0} - {1} ? @@ -605,12 +605,12 @@ Predošlé spustenie aplikácie malo kritickú chybu. Záznamový súbor je v {0}. Prosím, nahláste problém a priložte záznamový súbor. Ukladajú sa GPX stopy na SD kartu… Dokončené - Použiť Internet na výpočet trasy + Použiť Internet na výpočet trasy. Použiť online navigáciu OSM heslo - Určenie nastavení Openstreetmap.org (OSM) pre OSM nahrávanie - Výber jazyka, stiahnutie/znovu načítanie údajov + Určiť nastavenia Openstreetmap.org (OSM) potrebné pre prispievanie do OSM. + Vybrať jazyk, stiahnutie/znovu načítanie údajov. Údaje OSM upravovanie Automatické priblíženie mapy podľa Vašej rýchlosti (keď je mapa synchronizovaná s aktuálnou polohou). @@ -626,10 +626,10 @@ Automaticky zaznamenávať stopu počas navigácie Aktualizovať mapu Znovu načítať dlaždicu - Meno potrebné pre prispievanie do openstreetmap.org - OSM používateľské meno + Potrebné pre prispievanie do openstreetmap.org. + Vaše používateľské meno v OSM Cieľ - Výber medzi domácimi a anglickými názvami + Vybrať medzi domácimi a anglickými názvami. Použiť anglické názvy v mapách Nastavenia aplikácie Hľadať adresu @@ -638,11 +638,11 @@ Vybrať mesto alebo PSČ Vybrať krajinu Zobraziť uhol pohľadu - Zapnutie 3D zobrazenia mapy + Zapnúť 3D zobrazenie mapy. 3D zobrazenie mapy - Zobrazenie POI na mape (použije sa posledný vybraný filter) - Zobraziť POI - Vybraný zdroj dlaždíc + Zobraziť naposledy vybrané body záujmu ako vrstvu na mape. + Zobraziť vrstvu POI + Vybrať zdroj online mapových dlaždíc. Zdroj dlaždíc mapy Zdroj mapy Použiť internet @@ -1048,7 +1048,7 @@ Niektoré z hlavných funkcií: Zmazať prechodné body Heslo k OSM (voliteľné) Typ ostrenia fotoaparátu - Výber typu ostrenia vstavaného fotoaparátu + Vybrať režim zaostrovania vstavaného fotoaparátu. Automatické ostrenie Hyperfokálne ostrenie Rozšírená hĺbka poľa (EDOF) @@ -1056,7 +1056,7 @@ Niektoré z hlavných funkcií: Makro (z blízka) režim ostrenia Fotoaparát sa bude pokúšať ostriť priebežne Prehrať zvuk pri zachytení snímky - Zvoľte, či sa má prehrať zvuk pri odfotografovaní snímky + Zvoľte, či sa má prehrať zvuk pri odfotografovaní snímky. Eliptický mercator Základná mapa sveta Zväčšenie mapy @@ -1257,7 +1257,7 @@ Afganistan, Albánsko, Alžírsko, Andora, Angola, Anguilla, Antigua a Barbuda, OpenStreetMap sledovanie OsMo Len ručne (použiť šípku) - Opakovať navigačné pokyny v pravidelných intervaloch + Opakovať navigačné pokyny v pravidelných intervaloch. Opakovať navigačné pokyny Oznámenie príjazdu Ako skoro má byť oznámený príjazd do cieľa? @@ -1447,7 +1447,7 @@ Chcete pokračovať v novej registrácii? Neskoro V posledných metroch Veľkosť fotografie - Zvoľte veľkosť obrázka interného fotoaparátu + Vybrať veľkosť obrázka interného fotoaparátu. Štandardná Automobil Bicykel @@ -1755,7 +1755,7 @@ Dĺžka %2$s Výškový limit Zadajte výšku vozidla, ktorá musí byť povolená na cestách. Inteligentné prepočítanie trasy - Pri dlhých výletoch prepočítať iba začiatočný úsek trasy + Pri dlhých výletoch prepočítať iba začiatočný úsek trasy. Odosielať polohu Odhlásiť Vypnuté @@ -1903,7 +1903,7 @@ Dĺžka %2$s Beh v pozadí Vrstevnice vypnuté Zobraziť nápis verzie zdarma - Aj keď používate platenú verziu, môžete vidieť nápis z verzie zadarmo + Zobraziť nápis z verzie zadarmo, aj keď používate platenú verziu. Sťahovanie - súbor %1$d Oblasti Mapy celých oblastí @@ -1923,7 +1923,7 @@ Dĺžka %2$s %.1f MB Aktualizovať všetko (%1$s MB) Počet použitých voľných stiahnutí - Zobrazuje počet využitých stiahnutí + Zobrazuje počet využitých stiahnutí zdarma. Nastaví príznak indikujúci prvý štart aplikácie, ostatné nastavenia ponechá nezmenené. Simulovať prvé spustenie aplikácie geo: @@ -1946,8 +1946,8 @@ Dĺžka %2$s Iné Zásuvné moduly Prvé použitie - Ako sťahovať mapy, urobiť základné nastavenia - Nastavenie navigácie + Ako sťahovať mapy, urobiť základné nastavenia. + Nastaviť navigáciu. Otázky Často kladené otázky Prezeranie mapy @@ -2442,11 +2442,11 @@ Zodpovedá oblasti: %1$s x %2$s Vytvoriť položky Nastaviť mapu Navigácia - Ak ponecháte prázdne, automaticky sa použije adresa alebo názov miesta + Ak ponecháte prázdne, automaticky sa použije adresa alebo názov miesta. Táto správa bude automaticky dokončená v poli komentára. Správa - Vyberte kategóriu pre uloženie obľúbeného bodu - Vyberte voliteľnú kategóriu + Vyberte kategóriu pre uloženie obľúbeného bodu. + Vyberte voliteľnú kategóriu. Zoznam POI Môžete pridať jednu alebo viac kategórií POI, ktoré sa zobrazia na mape. Aktivovaním tlačidla akcie sa posunie zoznam na ďalšiu stranu. @@ -2466,7 +2466,7 @@ Zodpovedá oblasti: %1$s x %2$s Pridať zdroj mapy Zdroj mapy sa zmenil na \"%s\". Zmeniť polohu tlačidla - Podržte a potiahnite tlačidlo pre zmenu jeho pozície na obrazovke + Podržte a potiahnite tlačidlo pre zmenu jeho pozície na obrazovke. Názov akcie Automaticky prerušiť nahrávku po medzere Začať nový úsek po prestávke 6 minút, novú stopu po prestávke 2 hodín alebo nový súbor po dlhšej prestávke ak sa zmenil dátum. @@ -2815,7 +2815,7 @@ Zodpovedá oblasti: %1$s x %2$s Min/Max Časový zásobník pre online sledovanie Zadajte čas pokiaľ budú udržované pozície na odoslanie kým nie je pripojenie - Na zobrazovanie fotografií z Mapillary potrebujete pripojenie na Internet + Na zobrazovanie fotografií z Mapillary potrebujete pripojenie na Internet. Skúsiť znova Prezerať mapu a pridať body Merať vzdialenosť @@ -2846,9 +2846,9 @@ Zodpovedá oblasti: %1$s x %2$s Pridať body trasy Pridať čiaru Pridať a nahrať stopy - Nahrať alebo importovať stopy na zobrazenie + Nahrať alebo importovať stopy na zobrazenie. Pridať obľúbené - Pridať obľúbené na mape alebo ich naimportovať zo súboru + Pridať obľúbené na mape alebo ich naimportovať zo súboru. Importovať stopu Súbor %1$s neobsahuje body trasy, naimportovať ako stopu? Presunúť bod @@ -2966,4 +2966,5 @@ Zodpovedá oblasti: %1$s x %2$s Zobraziť jednu alebo dve šípky smerujúce k aktívnym značkám. Zvoľte ako chcete zobraziť vzdialenosť k aktívnym značkám. Zvoľte koľko ukazovateľov smeru chcete zobraziť. + Viac From 307e246c51a896cf420c04a3ed418a5572d0c9cf Mon Sep 17 00:00:00 2001 From: Roberto GEB Date: Fri, 17 Nov 2017 00:22:15 +0000 Subject: [PATCH 033/157] Translated using Weblate (Spanish) Currently translated at 99.9% (2500 of 2501 strings) --- OsmAnd/res/values-es/strings.xml | 46 +++++++++++++++++--------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 0761adc681..6b09d18f2d 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -2677,7 +2677,7 @@ Por favor proporciona un código completo Indicación de distancia Ordenar por Opciones del marcador - Elige cómo se indica la distancia y dirección a los marcadores del mapa en la pantalla del mapa: + Elige cómo se indica la distancia y la dirección a los marcadores del mapa en la pantalla del mapa: Umbral de orientación del mapa Elije la velocidad a partir de la cual la orientación del mapa cambia de «Dirección del movimiento» a «Brújula». Todos los marcadores del mapa movidos al historial @@ -2694,10 +2694,10 @@ Por favor proporciona un código completo Control Barra superior Mostrar las directrices - Mostrar las flechas en el mapa + Mostrar flechas en el mapa Mostrar descartados Ocultar descartados - Eliminar de Map Markers + Eliminar de Marcadores de mapa descendente ascendente Fecha añadida @@ -2710,7 +2710,7 @@ Por favor proporciona un código completo Ordenar Entrada de coordenadas está guardado - Exporte sus marcadores a un archivo que puede nombrar aquí: + Exporte sus marcadores a un archivo que puedes indicar aquí: Guardar como traza Mover al historial El grupo se quitará al reiniciar @@ -2721,17 +2721,17 @@ Por favor proporciona un código completo Entrada rápida de coordenadas Evitar carreteras de hielo, vados Evita carreteras de hielo y vados. - Excepción ocurrida: nota no modificada + Ha ocurrido una excepción: la nota no se ha modificado Modificar nota Modificar nota OSM - Duplica el punto de inicio y lo añade como destino. - Viaje de ida y vuelta + Añade una copia del punto de inicio como destino. + Hacer ruta circular Navegar Formato incorrecto Carretera Mostrar mapa Ruta calculada - Viaje de ida y vuelta + Ruta circular Debes añadir al menos un marcador para usar esta función. • Marcadores del mapa totalmente rediseñados con directrices y planificación de rutas \n @@ -2746,39 +2746,41 @@ Por favor proporciona un código completo Atrás Ver Puntos de referencia añadidos a marcadores de mapa - Una pulsación en el mapa alterna la vista de la interfaz y los controles. + Una pulsación en el mapa alterna los botones y los controles. Modo de pantalla completa Mostrar en la barra superior Descartar marcador - puede importarse como puntos de favoritos, o como un archivo de trazas. + puede importarse como puntos Favoritos, o como un archivo de traza. Importar como archivo GPX - Importar como favoritos + Importar como Favoritos Importar archivo Cantidad de dígitos Derecha Izquierda Mostrar teclado numérico Pegar - Cambiar automáticamente al campo siguiente al ingresar %1$d dígitos después del punto decimal. + Cambia automáticamente al campo siguiente después de escribir %1$d dígitos tras el punto decimal. %1$d dígitos Ir al campo siguiente Renombrar marcador Apariencia en el mapa - Seleccione los puntos de referencia de la traza que se añadirán a los marcadores. - Seleccione el grupo de favoritos que se añadirán a los marcadores. - Puntos de referencia de la traza + Selecciona los puntos de referencia de la traza que OsmAnd añadirá a los marcadores. + Selecciona el grupo de favoritos que quieres añadir a los marcadores. + Puntos de referencia de traza Grupo de favoritos Añadir grupo - Puedes añadir un grupo de favoritos o puntos de referencia de la traza. + Puedes añadir un grupo de favoritos o puntos de referencia de traza. ¡Marcadores del mapa! - Marca lugares del mapa con una pulsación. + Marca lugares en el mapa con una pulsación. Importar grupos - Puede importar grupos de favoritos o puntos de referencias de la traza como marcadores. + Puedes importar grupos de favoritos o puntos de referencia de traza como marcadores. Los marcadores descartados aparecerán en esta pantalla. Dos Uno - Se mostrará en el mapa una línea que conecta su ubicación con la de los marcadores activos. - Se mostrará en el mapa una o dos flechas indicando la dirección a los marcadores activos. - Seleccione cómo desea ver la distancia a los marcadores activos. - Seleccione cuántos indicadores de dirección desea ver. + Muestra indicaciones desde tu ubicación hasta la de los marcadores activos. + Muestra una o dos flechas indicando la dirección hacia los marcadores activos. + Elige cómo mostrar la distancia hasta los marcadores activos. + Elige cuántos indicadores de dirección se muestran. + Más + From 2f11732e6fbc9a61d175fa9ec3de9ca68ee09e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Ny=C4=8Da?= Date: Fri, 17 Nov 2017 13:57:20 +0000 Subject: [PATCH 034/157] Translated using Weblate (Upper Sorbian) Currently translated at 49.1% (1228 of 2501 strings) --- OsmAnd/res/values-b+hsb/strings.xml | 150 ++++++++++++++-------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/OsmAnd/res/values-b+hsb/strings.xml b/OsmAnd/res/values-b+hsb/strings.xml index 6df56e47d0..ff713d749e 100644 --- a/OsmAnd/res/values-b+hsb/strings.xml +++ b/OsmAnd/res/values-b+hsb/strings.xml @@ -13,7 +13,7 @@ Wubjerće kategoriju Zapodajće mjeno Zapodajće kategoriju - Zapodajće wopisanje + Zapodajće wopisanje. Prózdna lisćina Njeinstalowane Městno zdźělić @@ -31,7 +31,7 @@ Moje mjeno w rozprawach njepokazać Region podpěrać Měsačne košty - Měsačne płaćenje + Měsačne płaćenje. Aktiwne Njeaktiwne Prošu zapodajće płaćiwu mejlkowu adresu @@ -51,7 +51,7 @@ Njeje wubrane Wulkosć składowaka Přistupne karty - Wubjerće puće, kiž chceće při nawigaciji wobeńć + Wubjerće puće, kiž chceće při nawigaciji wobeńć. Zwuk Aplikacija nima dowolnosć k wužiwanju kamery. Aplikacija nima dowolnosć k wužiwanju mikrofona. @@ -63,11 +63,11 @@ Najniša kwalita Najwyša kwalita Kwalita wideja - Wubjerće kwalitu wideja + Wubjerće kwalitu wideja. Format awdijo-dataje - Wubjerće format awdijo-dataje + Wubjerće format awdijo-dataje. awdijo-bitrate - Wubjerće awdijo-bitrate + Wubjerće awdijo-bitrate. Přistup z karty Wot započatka pokazać Offline składować @@ -118,7 +118,7 @@ Wysokostne linije wupinjene Nowu přidać Kategoriju wubrać - Měrjensku jednotku spěšnosće postajić + Měrjensku jednotku spěšnosće postajić. Jednotka spěšnosće Nawtiske mile Kilometrow za hodźinu @@ -195,13 +195,13 @@ Domowe čisła Městno składowanja datow Skład kartow - Wopis pokazać + Wopis pokazać. Karty sćahnyć Witajće Waše změny Potom wopytać Do toho wopytać - Časte prašenja, aktualne změny a druhe + Časte prašenja, aktualne změny a druhe. Nastajenja nawigacije Powšitkowne nastajenja @@ -251,19 +251,19 @@ Wulkosć teksta Hranična kontrola Błyskač - Rěčny paket za nawigaciju wubrać + Rěčny paket za nawigaciju wubrać. - HTTP-Proxy zapinyć - HTTP-Proxy za wšě naprašowanja syće aktiwěrować + HTTP-proxy zapinyć + HTTP-proxy za wšě naprašowanja syće aktiwěrować. Proxy-Host - Mjeno za proxy postajić (n.př. 127.0.0.1) - Port za proxy postajić (n.př. 8118) + Mjeno za proxy postajić (n.př. 127.0.0.1). + Port za proxy postajić (n.př. 8118). Awto Koleso Pěši Z nawigaciju pokročować Nawigaciju na chwilu přetorhnyć - Najlubša rěč za mjena na karće (njeje-li k dispoziciji, pokazaja so lokalne mjena) + Najlubša rěč za mjena na karće (njeje-li k dispoziciji, pokazaja so lokalne mjena). Najlubša rěč za kartu Lokalne mjena Suahelšćina @@ -347,21 +347,21 @@ Mawtowe dróhi wobeńć - Mawtowe dróhi wobeńć + Mawtowe dróhi wobeńć. Njewobkrućene puće wobeńć - Njewobkrućene puće wobeńć + Njewobkrućene puće wobeńć. Přewozy wobeńć - Přewozne łódźe wobeńć + Přewozne łódźe wobeńć. Awtodróhi wobeńć - Awtodróhi wobeńć + Awtodróhi wobeńć. Schody wobeńć - Schody wobeńć + Schody wobeńć. Hranične přechody wobeńć - Přeprěčenje statnych hranicow wobeńć + Přeprěčenje statnych hranicow wobeńć. Wobmjezowanje wahi - Zapodajće wahu wozydła za wobličenje čary + Zapodajće wahu wozydła za wobličenje čary. Wobmjezowanje wysokosće - Zapodajće wysokosć wozydła za wobličenje čary + Zapodajće wysokosć wozydła za wobličenje čary. Nastajenja nawigacije Nastajenja za wobličenje čarow Pućowanje @@ -371,7 +371,7 @@ Wersija : Maksimalny zoom: %1$s Minimalny zoom: %1$s - Wubjerće region jězdźenja: Europa, Azija, Zjednoćene staty abo druhe + Wubjerće region jězdźenja: Europa, Azija, Zjednoćene staty abo druhe. Region jězdźenja Japanska Zjednoćene staty Ameriki @@ -399,7 +399,7 @@ spěšnosć wysokosć Dypk - Redukuje njerunosće pola kompasa, zwyši pak lěnjotu kompasa wo něšto + Redukuje njerunosće pola kompasa, zwyši pak lěnjotu kompasa wo něšto. Kalmanowy filter wužiwać Połna wersija Cil wotstronić @@ -407,7 +407,7 @@ Domowe čisło Webstrona Telefon - Změńće napohlad aplikacije + Změńće napohlad aplikacije. Napohlad aplikacije OpenMaps EU Wikipedija @@ -455,15 +455,15 @@ Za turistow Bencin Warnowanja pokazać… - Wobchadne warnowanja (wobmjezowanja spěšnosće, stopowe znački, prohi), informacije wo krutych błyskačach a jězbnych ćěrach - Wužiwać kompas, hdyž hinaše postajenje směra móžne njeje + Wobchadne warnowanja (wobmjezowanja spěšnosće, stopowe znački, prohi), informacije wo krutych błyskačach a jězbnych ćěrach. + Wužiwać kompas, hdyž hinaše postajenje směra móžne njeje. Kompas wužiwać Awtodróhi wobeńć - Přiměrja wulkosć karty wotpowědujo aktualnej spěšnosći (karta so z tuchwilnym stejišćom synchronizuje) + Přiměrja wulkosć karty wotpowědujo aktualnej spěšnosći (karta so z tuchwilnym stejišćom synchronizuje). Awtomatiski zoom - W běhu nawigacije poziciski dypk na dróhach zdźeržować + W běhu nawigacije poziciski dypk na dróhach zdźeržować. Na dróze wostać - Hudźbu za připowědźe nawigacije přetorhować + Hudźbu za připowědźe nawigacije přetorhować. Wothrawanje hudźby přetorhować OsmAnd karty a nawigacija Globalna kartowa a nawigaciska słužba za OSM-karty (online a offline) @@ -480,7 +480,7 @@ Njewobkrućene puće wobeńć Přewozy wobeńć Wobeńdź… - Wěsty typy pućow wobeńć + Wěsty typy pućow wobeńć. Měra Směr hladanja pokazać Słužbu w pozadku\n zapinyć @@ -560,7 +560,7 @@ Nahrawanje … Wšě nahrać Bjezpłatna wersija - POI-wopis pokazać + Wopis dypka pokazać. Sewjerna Amerika Europa - Nižozemska Sewjerna Amerika - Zjednoćene staty @@ -577,16 +577,16 @@ Wikipedija (offline) Specifiske nastajenja za profile Nawigacija - Nastajenja za nawigaciju (awto, koleso, pěši) + Nastajenja za nawigaciju (awto, koleso, pěši). Powšitkowne nastajenja - Konfiguracija wobrazowki a druhich powšitkownych nastajenjow + Konfiguracija wobrazowki a druhich powšitkownych nastajenjow. Waše wužiwarske mjeno pola OSM Waše hesło pola OSM Pozadkowy modus - OsmAnd dźěła w pozadku, mjeztym zo je wobrazowka hasnjena + OsmAnd dźěła w pozadku dale, mjeztym zo je wobrazowka hasnjena. Njeje dosć swobodneho městna za download %1$s MB (swobodne: %2$s). Kartu sobuwzać - Čakanski čas hač do synchronizowanja karty z aktualnym stejišćom + Čakanski čas hač do synchronizowanja karty z aktualnym stejišćom. Nastajenja kartowych žórłow Nastajenja wektorowych kartow Měšćanski dźěl @@ -623,21 +623,21 @@ Hłosowe připowědźe (nahrate) TTS hłosowe připowědźe Nowe pytanje - Wubjerće wulkosć mjenow na karće + Wubjerće wulkosć mjenow na karće. Wulkosć kartoweho teksta Tuchwilny cil přewzać Hłós nawigacije - Wašnje wudawanja připowědźow wubrać + Wašnje wudawanja připowědźow wubrać. Kaž telefon Kaž zdźělenki Kaž medije/hudźba Instalować dalše… - Zmylk so stał při offline-pytanju + Zmylk so stał při offline-pytanju. Kaž nastroj - Rěč wubrać (prošu startujće OsmAnd po změnje znowa) + Rěč wubrać (prošu startujće OsmAnd po změnje znowa). Rěč aplikacije a menijow njehotowa - Wubjerće jednotki dołhosće a spěšnosće + Wubjerće jednotki dołhosće a spěšnosće. Měrjenske jednotki Mile/stopy Mile/yardy @@ -667,7 +667,7 @@ Nóc Dnjowy/nócny modus Najspěšniša čara - Wubrać za najspěšnišu čaru abo wupinyć za najkrótšu + Wubrać za najspěšnišu čaru abo wupinyć za najkrótšu. Kartu sćahnyć Sćehnjenje tuteje karty njebě móžne Zmylk occurred while rendering selected area @@ -682,7 +682,7 @@ Po kompasu Po směru pohibowanja Žana rotacija (sewjer je horjeka) - Postajće wašnje wusměrjenja karty + Postajće wašnje wusměrjenja karty. Wusměrjenje karty Fawority wuspěšnje importowane Zmylk occurred while loading GPX @@ -696,7 +696,7 @@ Hdźe sym? sek. min. - OsmAnd dźěła w pozadku, zo by nahrawał twoju poziciju při wupinjenej wobrazowce + OsmAnd dźěła w pozadku, zo by nahrawał twoju poziciju při wupinjenej wobrazowce. Słužba w pozadku Filter schować Filter pokazać @@ -722,7 +722,7 @@ Na wysoko Naprěki Wusměrjenje wobraza - Wusměrjenje karty + Wusměrjenje karty. Změnjenje wotewrjenskich časow njeje móžne Dodaj nowe prawidło Čary @@ -737,7 +737,7 @@ zbywace zastanišća Dołhosć čary Zjawny transport - Zjawne zastanišća na karće pokazać + Zjawne zastanišća na karće pokazać. Zastanišća pokazać Nawigacija OsmAnd POI-daty su so wuspěšnje zaktualizowali ({0} buchu začitane) @@ -756,7 +756,7 @@ Žadyn wuslědk Pytam… Pytam adresu… - Wubjerće online- abo offline-słužbu za nawigaciju + Wubjerće online- abo offline-słužbu za nawigaciju. Słužba nawigacije Adresa Zarunać @@ -782,16 +782,16 @@ Začituja so daty… GPX-čara składuje so na SD-karće… Hotowo - Wužiwaj internet za nawigaciju + Wužiwaj internet za wobličenje čary. Nawigacija online - Nastajenja za Openstreetmap.org (OSM) - Rěč wubrać, daty sćahnyć abo zaktualizować + Nastajenja za Openstreetmap.org (OSM). + Rěč wubrać, daty sćahnyć abo zaktualizować. Daty Přidatne nastajenja Kartowe kachlicy zaktualizować Kachlicy zaktualizować Cil - Jendźelske abo domjace mjena wužiwać + Jendźelske abo domjace mjena wužiwać. Jendźelske mjena wužiwać Nastajenja aplikacije Adresu pytać @@ -800,11 +800,11 @@ Městno abo póstowe čisło wubrać Kraj wubrać Směr hladanja pokazać - 3D-napohlad karty zmóžnić + 3D-napohlad karty zmóžnić. 3D-napohlad wužiwać - Njedawno wužiwane POI na karće pokazać - Pokazaj POI - Online- abo offline-žórło za kartowe kachlicy wubrać + Njedawno wužiwane dypki na karće pokazać. + Pokazaj runinu z dypkami + Online- abo offline-žórło za kartowe kachlicy wubrać. Žórło kartowych kachlicow Žórło karty Internet wužiwać @@ -903,17 +903,17 @@ Bjez přestawki wočinjene Składowanska karta Format koordinatow - Format za geografiske koordinaty + Format za geografiske koordinaty. Mapillary wobnowić Wopačne wužiwarske mjeno! Wot - Datumy + Datum Wužiwarske mjeno zapodać Prawa Instalować Wobrazy přidać - Za tute městno fota nimamy + Za tute městno fota nimamy. spěšnosć: %1$s Jako dypki na čarje składować Jako liniju składować @@ -929,8 +929,8 @@ zdalenosć měrić Nawigaciju znowa startować/přetorhnyć Do - Wobrazy z wěsteje doby pokazać. - Wobrazy wěsteho wužiwarja pokazać. + Jenož přidate wobrazy pokazać + Jenož wobrazy wužiwarja Wužiwarske mjeno OsmAnd njemóže importować dataju. Prošu přepruwuj hač ma OsmAnd dowolnosć za začitanje dataje z tutoho městna. Zdalenosć skorigowana @@ -945,7 +945,7 @@ Pytanje wospjetować Pytanski radius powjetšić Žadyn pytanski wuslědk :( - Změń pytanske zapřijeće abo powjetš pytanski radius + Změń pytanske zapřijeće abo powjetš pytanski radius. OSM-noticy pokazać/schować OSM-noticy pokazać OSM-noticy schować @@ -958,7 +958,7 @@ Dyrbiš plugin \"Contour Lines\" kupić a instalować, zo bychu so wysokostne linije pokazali na karće Barbny šema Priwatny přistup dowolić - Přistup do priwatnych kónčin dowolić + Přistup do priwatnych kónčin dowolić. Pokazać na zoomowej runinje: %1$s Mjeno skupiny Barbu změnić @@ -1018,7 +1018,7 @@ Woda Wodu schować Awtodróhi dowolić - Awtodróhi dowolić + Awtodróhi dowolić. Móžeš swoju OSM-noticu anonymnje nahrać abo wužić swój profil na OpenStreetMap.org. Zapiski Wikipedije w bliskosći Město abo region pytać @@ -1066,7 +1066,7 @@ Kategoriju dodać Nawigacija Powěsć - Opcionalnu kategoriju wubrać + Opcionalnu kategoriju wubrać. "Lisćina POI" Kartowy stil dodać Parametry njedyrbjeli być prózdne @@ -1088,7 +1088,7 @@ %1$d wot %2$d objektow wuspěšnje nahraty. Na OSM pósłać wjace detailow na karće pokazać - někotre kartowe detaile (n. př. puće) hižo w nišich zoom-runinach pokazać + někotre kartowe detaile (n. př. puće) hižo w nišich zoom-runinach pokazać. Faworitowe dypki wuspěšnje wotstronjene. Chceš %1$d faworit(ow) a %2$d skupin faworitow wotstronić. Sy sej wěsty/a? Zakładna karta swěta (pokrywajo cyły swět na niskich zoom-runinach) pobrachuje. Prošu wobstaraj sej World_basemap_x.obf za globalny přehlad. @@ -1111,13 +1111,13 @@ Nahraće wotstronić modifikaciju wotstronić Lokalnje składowane OSM-dypki/noticy - Tuta bjezpłatna wersija OsmAnd je wobmjezowana na %1$s downloadow a njepodpěruje offline-wužiwanje zapiskow z Wikipedije. + Tuta bjezpłatna wersija OsmAnd je wobmjezowana na %1$s downloadow (přidaće a wobnowjenje kartow) a njepodpěruje offline-wužiwanje zapiskow z Wikipedije. Swětadaloke a tematiske karte Dataja z prjedy eksportowanymi faworitami hižo eksistuje. Chceš ju zarunać? Kartowe dataje zrjadować Powšitkowne Globalne nastajenja aplikacije - Trěbnej za nahrawanja na openstreetmap.org + Trěbnej za nahrawanja na openstreetmap.org. Připokazanki nawigacije wospjetować %1$s wotstronić? Simulaciju zastajić @@ -1126,16 +1126,16 @@ Dataja z tutym mjenom hižo eksistuje. njedefinowane Čara wuspěšnje składowana jako \'%1$s\'. - Kartowe dataje zrjadować + Kartowe dataje zrjadować. POI-daty Wupakuju nowe daty… Online-serwis za nawigaciju bu wubrany, njewobsteji pak zwisk do interneta. Rěč so njepodpěruje Wubrana rěč so ze strony instalowaneho TTS-programa (text-to-speech) njepodpěruje. Chceš za druhim TTS-programom pytać? Hewak so standardna rěč za TTS wužiwa. Falowace daty - Transparencu zakładneje karty změnić + Transparencu zakładneje karty změnić. Transparenca zakładneje karty - Za tutu akciju je zwisk do interneta trěbny, kotryž tuchwilu njewobsteji + Za tutu akciju je zwisk do interneta trěbny, kotryž tuchwilu njewobsteji. Městno pytać Městno: %1$s \n%2$s @@ -1230,11 +1230,11 @@ Powjerch pućow pokazać Kolesowarske čary pokazać Za pokazanje wubrać - Kneflki za zoomowanje za čas nawigacije pokazać + Kneflki za zoomowanje za čas nawigacije pokazać. Kneflki za zoomowanje pokazać Powjetšenje karty Připowědźić… - Připowědźe pućnych mjenow, wobchadnych warnowanjow, błyskačow, wobmjezowanjow spěšnosće + Připowědźe pućnych mjenow, wobchadnych warnowanjow, błyskačow, wobmjezowanjow spěšnosće. Wobmjezowanja spěšnosće Čaru zaćisnyć Pokazać @@ -1243,12 +1243,12 @@ Standardne nastajenja wobnowić Jězdźenje nalěwo Přidatki - Přidatki zmóžnja dalše nastajenja a přidatnu funkcionalitu + Přidatki zmóžnja dalše nastajenja a přidatnu funkcionalitu. Přidatki Připowědźenje přijězda Hdy chceće připowědź přijězda? Wobdźěłanje offline - Přeco offline wobdźěłać + Přeco offline wobdźěłać. Tuchwilnu čaru pokazać Schadźenje/chowanje słónca Přidatki From 71a680ac7cafcacfb60c38747cacb835b56c771f Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 16:06:18 +0200 Subject: [PATCH 035/157] Fix ont note sharing --- .../osmand/plus/audionotes/NotesFragment.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 73c4266851..8f499b3bc7 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -3,6 +3,7 @@ package net.osmand.plus.audionotes; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; @@ -508,22 +509,26 @@ public class NotesFragment extends OsmAndListFragment { }; } - private void shareNote(Recording recording) { - Intent sharingIntent = new Intent(Intent.ACTION_SEND); - if (recording.isPhoto()) { - Uri screenshotUri = Uri.parse(recording.getFile().getAbsolutePath()); - sharingIntent.setType("image/*"); - sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); - } else if (recording.isAudio()) { - Uri audioUri = Uri.parse(recording.getFile().getAbsolutePath()); - sharingIntent.setType("audio/*"); - sharingIntent.putExtra(Intent.EXTRA_STREAM, audioUri); - } else if (recording.isVideo()) { - Uri videoUri = Uri.parse(recording.getFile().getAbsolutePath()); - sharingIntent.setType("video/*"); - sharingIntent.putExtra(Intent.EXTRA_STREAM, videoUri); + private void shareNote(final Recording recording) { + if (!recording.getFile().exists()) { + return; } - startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_note))); + MediaScannerConnection.scanFile(getActivity(), new String[]{recording.getFile().getAbsolutePath()}, + null, new MediaScannerConnection.OnScanCompletedListener() { + public void onScanCompleted(String path, Uri uri) { + Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); + if (recording.isPhoto()) { + shareIntent.setType("image/*"); + } else if (recording.isAudio()) { + shareIntent.setType("audio/*"); + } else if (recording.isVideo()) { + shareIntent.setType("video/*"); + } + shareIntent.putExtra(Intent.EXTRA_STREAM, uri); + shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + startActivity(Intent.createChooser(shareIntent, getString(R.string.share_note))); + } + }); } private void showOnMap(Recording recording) { From ecb4c2b84dab8e634376213a24b2872c3f9a8841 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 16:20:23 +0200 Subject: [PATCH 036/157] Create new list item --- OsmAnd/res/layout/note_list_item.xml | 90 +++++++++++ .../osmand/plus/osmedit/OsmEditingPlugin.java | 4 +- .../osmand/plus/osmedit/OsmEditsAdapter.java | 146 +++++++++++++----- 3 files changed, 197 insertions(+), 43 deletions(-) create mode 100644 OsmAnd/res/layout/note_list_item.xml diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml new file mode 100644 index 0000000000..48dd1007bb --- /dev/null +++ b/OsmAnd/res/layout/note_list_item.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index bcaa26d95f..f8587a634b 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -436,8 +436,8 @@ public class OsmEditingPlugin extends OsmandPlugin { } } - private static String getPrefix(OsmPoint osmPoint) { - return (osmPoint.getGroup() == OsmPoint.Group.POI ? "POI " : "Bug ") + " id: " + osmPoint.getId() + " "; + public static String getPrefix(OsmPoint osmPoint) { + return (osmPoint.getGroup() == OsmPoint.Group.POI ? "POI" : "Bug") + " id: " + osmPoint.getId() + " "; } @Override diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 9a74eb64e4..96b9c020c6 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -1,5 +1,6 @@ package net.osmand.plus.osmedit; +import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; @@ -8,9 +9,11 @@ import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.TextView; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; +import net.osmand.util.Algorithms; import java.util.List; @@ -60,73 +63,134 @@ public class OsmEditsAdapter extends ArrayAdapter { public View getView(int position, View convertView, @NonNull ViewGroup parent) { View view = convertView; if (view == null) { - view = LayoutInflater.from(getContext()).inflate(R.layout.note, parent, false); + view = LayoutInflater.from(getContext()).inflate(R.layout.note_list_item, parent, false); OsmEditViewHolder holder = new OsmEditViewHolder(view); view.setTag(holder); } - final OsmPoint child = getItem(position); + final OsmPoint osmEdit = getItem(position); - OsmEditsFragment.getOsmEditView(view, child, app); + if (osmEdit != null) { + final OsmEditViewHolder holder = (OsmEditViewHolder) view.getTag(); - final OsmEditViewHolder holder = (OsmEditViewHolder) view.getTag(); - holder.playImageButton.setVisibility(View.GONE); - if (selectionMode) { - holder.optionsImageButton.setVisibility(View.GONE); - holder.selectCheckBox.setVisibility(View.VISIBLE); - holder.selectCheckBox.setChecked(selectedOsmEdits.contains(child)); - holder.icon.setVisibility(View.GONE); - holder.selectCheckBox.setOnClickListener(new View.OnClickListener() { + holder.titleTextView.setText(getName(osmEdit)); + holder.descriptionTextView.setText(getDescription(osmEdit)); + Drawable icon = getIcon(osmEdit); + if (icon != null) { + holder.icon.setImageDrawable(icon); + } + if (selectionMode) { + holder.optionsImageButton.setVisibility(View.GONE); + holder.selectCheckBox.setVisibility(View.VISIBLE); + holder.selectCheckBox.setChecked(selectedOsmEdits.contains(osmEdit)); + holder.icon.setVisibility(View.GONE); + holder.selectCheckBox.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onItemSelect(osmEdit, holder.selectCheckBox.isChecked()); + } + } + }); + } else { + holder.icon.setVisibility(View.VISIBLE); + holder.optionsImageButton.setVisibility(View.VISIBLE); + holder.selectCheckBox.setVisibility(View.GONE); + } + + holder.optionsImageButton.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); + holder.optionsImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { - listener.onItemSelect(child, holder.selectCheckBox.isChecked()); + listener.onOptionsClick(v, osmEdit); } } }); - } else { - holder.icon.setVisibility(View.VISIBLE); - holder.optionsImageButton.setVisibility(View.VISIBLE); - holder.selectCheckBox.setVisibility(View.GONE); + holder.mainView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (selectionMode) { + holder.selectCheckBox.performClick(); + } else { + if (listener != null) { + listener.onItemShowMap(osmEdit); + } + } + + } + }); } - holder.optionsImageButton.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white)); - holder.optionsImageButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (listener != null) { - listener.onOptionsClick(v, child); - } - } - }); - holder.mainView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (selectionMode) { - holder.selectCheckBox.performClick(); - } else { - if (listener != null) { - listener.onItemShowMap(child); - } - } - - } - }); return view; } + private Drawable getIcon(OsmPoint point) { + if (point.getGroup() == OsmPoint.Group.POI) { + return app.getIconsCache().getIcon(R.drawable.ic_type_info, R.color.color_distance); + } else if (point.getGroup() == OsmPoint.Group.BUG) { + return app.getIconsCache().getIcon(R.drawable.ic_type_bug, R.color.color_distance); + } + return null; + } + + private String getName(OsmPoint point) { + if (point.getGroup() == OsmPoint.Group.POI) { + return ((OpenstreetmapPoint) point).getName(); + } else if (point.getGroup() == OsmPoint.Group.BUG) { + return ((OsmNotesPoint) point).getText(); + } else { + return ""; + } + } + + private String getDescription(OsmPoint point) { + String action = ""; + if (point.getAction() == OsmPoint.Action.CREATE) { + action = getContext().getString(R.string.action_create); + } else if (point.getAction() == OsmPoint.Action.MODIFY) { + action = getContext().getString(R.string.action_modify); + } else if (point.getAction() == OsmPoint.Action.DELETE) { + action = getContext().getString(R.string.action_delete); + } else if (point.getAction() == OsmPoint.Action.REOPEN) { + action = getContext().getString(R.string.action_modify); + } + + String subtype = ""; + if (point.getGroup() == OsmPoint.Group.POI && !Algorithms.isEmpty(((OpenstreetmapPoint) point).getSubtype())) { + subtype = ((OpenstreetmapPoint) point).getSubtype(); + } + + String prefix = OsmEditingPlugin.getPrefix(point); + + String description = ""; + if (!Algorithms.isEmpty(action)) { + description += action + " • "; + } + if (!Algorithms.isEmpty(subtype)) { + description += subtype + " • "; + } + description += prefix; + + return description; + } + private class OsmEditViewHolder { View mainView; ImageView icon; - ImageButton playImageButton; CheckBox selectCheckBox; ImageButton optionsImageButton; + TextView titleTextView; + TextView descriptionTextView; + View bottomDivider; OsmEditViewHolder(View view) { mainView = view; icon = (ImageView) view.findViewById(R.id.icon); - playImageButton = (ImageButton) view.findViewById(R.id.play); - selectCheckBox = (CheckBox) view.findViewById(R.id.check_local_index); + selectCheckBox = (CheckBox) view.findViewById(R.id.check_box); optionsImageButton = (ImageButton) view.findViewById(R.id.options); + titleTextView = (TextView) view.findViewById(R.id.title); + descriptionTextView = (TextView) view.findViewById(R.id.description); + bottomDivider = view.findViewById(R.id.bottom_divider); } } From 1b3581686933b4004572a8df10e0a44e1691a6b2 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 16:32:38 +0200 Subject: [PATCH 037/157] Fix dividers --- OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java | 2 ++ OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 96b9c020c6..2a4d2dd841 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -119,6 +119,8 @@ public class OsmEditsAdapter extends ArrayAdapter { } }); + boolean showDivider = getCount() > 1 && position != getCount() - 1; + holder.bottomDivider.setVisibility(showDivider ? View.VISIBLE : View.GONE); } return view; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 9016018e1e..b9597621bd 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -384,9 +384,8 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo if (osmEdits.size() > 0 && footerView == null) { //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, listView, false); + listView.setDivider(null); listView.addFooterView(footerView); - listView.setHeaderDividersEnabled(false); - listView.setFooterDividersEnabled(false); } listView.setAdapter(listAdapter); } else { From 3b5cf2164df05713459ecc2cdd0cbd17e8658584 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 16:59:12 +0200 Subject: [PATCH 038/157] Change export for multiple files --- .../osmand/plus/audionotes/NotesFragment.java | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 8f499b3bc7..d4f2eeb42f 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -5,11 +5,11 @@ import android.content.DialogInterface; import android.content.Intent; import android.media.MediaScannerConnection; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; -import android.support.v4.content.FileProvider; import android.support.v7.app.AlertDialog; import android.support.v7.view.ActionMode; import android.view.LayoutInflater; @@ -43,12 +43,10 @@ import net.osmand.plus.audionotes.adapters.NotesAdapter.NotesAdapterListener; import net.osmand.plus.base.OsmAndListFragment; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.myplaces.FavoritesActivity; -import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -430,29 +428,20 @@ public class NotesFragment extends OsmAndListFragment { } private void shareItems(Set selected) { - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_SEND_MULTIPLE); - intent.setType("image/*"); /* This example is sharing jpeg images. */ - ArrayList files = new ArrayList(); - for (Recording path : selected) { - if (path == SHARE_LOCATION_FILE) { - File fl = generateGPXForRecordings(selected); - if (fl != null) { - files.add(FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".fileprovider", fl)); - } - } else { - File src = path.getFile(); - File dst = new File(getActivity().getCacheDir(), "share/" + src.getName()); - try { - Algorithms.fileCopy(src, dst); - files.add(FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".fileprovider", dst)); - } catch (IOException e) { - e.printStackTrace(); - } + ArrayList files = new ArrayList<>(); + for (Recording rec : selected) { + File file = rec == SHARE_LOCATION_FILE ? generateGPXForRecordings(selected) : rec.getFile(); + if (file != null) { + files.add(Uri.parse(file.getAbsolutePath())); } } - intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files); + Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); + intent.setType("*/*"); + intent.putExtra(Intent.EXTRA_STREAM, files); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + if (Build.VERSION.SDK_INT > 18) { + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); + } startActivity(Intent.createChooser(intent, getString(R.string.share_note))); } From 61c7a1334478c929694321d0a6b60c5c716c9b3c Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 17:09:21 +0200 Subject: [PATCH 039/157] Fix adapter --- .../osmand/plus/osmedit/OsmEditsAdapter.java | 13 +--- .../osmand/plus/osmedit/OsmEditsFragment.java | 64 +++++++++---------- 2 files changed, 31 insertions(+), 46 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 2a4d2dd841..150b129766 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -19,7 +19,6 @@ import java.util.List; public class OsmEditsAdapter extends ArrayAdapter { - private List osmEdits; private OsmandApplication app; private boolean selectionMode; @@ -28,18 +27,8 @@ public class OsmEditsAdapter extends ArrayAdapter { private OsmEditsAdapterListener listener; public OsmEditsAdapter(OsmandApplication app, @NonNull List points) { - super(app, R.layout.note, points); + super(app, 0, points); this.app = app; - osmEdits = points; - } - - public List getOsmEdits() { - return osmEdits; - } - - public void setOsmEdits(List osmEdits) { - this.osmEdits = osmEdits; - notifyDataSetChanged(); } public boolean isSelectionMode() { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index b9597621bd..6df34ad1ca 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -356,41 +356,37 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo List l2 = plugin.getDBBug().getOsmbugsPoints(); osmEdits.addAll(l1); osmEdits.addAll(l2); - if (listAdapter == null) { - listAdapter = new OsmEditsAdapter(getMyApplication(), osmEdits); - listAdapter.setSelectedOsmEdits(osmEditsSelected); - listAdapter.setAdapterListener(new OsmEditsAdapter.OsmEditsAdapterListener() { - @Override - public void onItemSelect(OsmPoint point, boolean checked) { - if (checked) { - osmEditsSelected.add(point); - } else { - osmEditsSelected.remove(point); - } - updateSelectionMode(actionMode); - } - - @Override - public void onItemShowMap(OsmPoint point) { - showOnMap(point); - } - - @Override - public void onOptionsClick(View view, OsmPoint note) { - openPopUpMenu(view, note); - } - }); - ListView listView = getListView(); - if (osmEdits.size() > 0 && footerView == null) { - //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); - footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, listView, false); - listView.setDivider(null); - listView.addFooterView(footerView); - } - listView.setAdapter(listAdapter); - } else { - listAdapter.setOsmEdits(osmEdits); + ListView listView = getListView(); + if (osmEdits.size() > 0 && footerView == null) { + //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); + footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, listView, false); + listView.setDivider(null); + listView.addFooterView(footerView); } + listAdapter = new OsmEditsAdapter(getMyApplication(), osmEdits); + listAdapter.setSelectedOsmEdits(osmEditsSelected); + listAdapter.setAdapterListener(new OsmEditsAdapter.OsmEditsAdapterListener() { + @Override + public void onItemSelect(OsmPoint point, boolean checked) { + if (checked) { + osmEditsSelected.add(point); + } else { + osmEditsSelected.remove(point); + } + updateSelectionMode(actionMode); + } + + @Override + public void onItemShowMap(OsmPoint point) { + showOnMap(point); + } + + @Override + public void onOptionsClick(View view, OsmPoint note) { + openPopUpMenu(view, note); + } + }); + listView.setAdapter(listAdapter); } private void showBugDialog(final OsmNotesPoint point) { From 70c3a75fe2b2fae0a2a6d1940d3f8212138b55ba Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 17:12:14 +0200 Subject: [PATCH 040/157] Fix note item layout --- OsmAnd/res/layout/note_list_item.xml | 13 +++++++------ OsmAnd/res/values-large/sizes.xml | 3 +++ OsmAnd/res/values/sizes.xml | 3 +++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml index 62a69eaf32..265de36d7b 100644 --- a/OsmAnd/res/layout/note_list_item.xml +++ b/OsmAnd/res/layout/note_list_item.xml @@ -3,14 +3,13 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="@dimen/bottom_sheet_selected_item_title_height" + android:layout_height="wrap_content" android:background="?attr/bg_color" android:orientation="vertical"> + android:orientation="vertical" + android:paddingBottom="@dimen/list_item_text_container_padding_bottom" + android:paddingTop="@dimen/list_item_text_container_padding_top"> diff --git a/OsmAnd/res/values-large/sizes.xml b/OsmAnd/res/values-large/sizes.xml index f8ce4c32be..5a5f3b6415 100644 --- a/OsmAnd/res/values-large/sizes.xml +++ b/OsmAnd/res/values-large/sizes.xml @@ -135,6 +135,9 @@ 78dp 15dp + 15dp + 18dp + 8dp 42dp diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index 76a1309b52..599decb320 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -206,6 +206,9 @@ 52dp 10dp + 10dp + 12dp + 5dp 28dp From a2b74269bed6039a5fae4550687729a6c6812412 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 17:13:31 +0200 Subject: [PATCH 041/157] Fix strings --- OsmAnd/res/values/strings.xml | 3 +++ OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index c2f368aabf..fca9595e08 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,9 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Deleted + Edited + Added Looking for tracks with waypoints More Appearance on the map diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 150b129766..c75011bcab 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -137,11 +137,11 @@ public class OsmEditsAdapter extends ArrayAdapter { private String getDescription(OsmPoint point) { String action = ""; if (point.getAction() == OsmPoint.Action.CREATE) { - action = getContext().getString(R.string.action_create); + action = getContext().getString(R.string.shared_string_added); } else if (point.getAction() == OsmPoint.Action.MODIFY) { - action = getContext().getString(R.string.action_modify); + action = getContext().getString(R.string.shared_string_edited); } else if (point.getAction() == OsmPoint.Action.DELETE) { - action = getContext().getString(R.string.action_delete); + action = getContext().getString(R.string.shared_string_deleted); } else if (point.getAction() == OsmPoint.Action.REOPEN) { action = getContext().getString(R.string.action_modify); } From cd6a9a473c93d3327b7c194c840e65d731a6bb43 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 17:14:10 +0200 Subject: [PATCH 042/157] Fix strings --- OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index c75011bcab..d52250269e 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -143,7 +143,7 @@ public class OsmEditsAdapter extends ArrayAdapter { } else if (point.getAction() == OsmPoint.Action.DELETE) { action = getContext().getString(R.string.shared_string_deleted); } else if (point.getAction() == OsmPoint.Action.REOPEN) { - action = getContext().getString(R.string.action_modify); + action = getContext().getString(R.string.shared_string_edited); } String subtype = ""; From 2b9275bcd99f09f97b373f79ab4e01e992596fab Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 17:28:52 +0200 Subject: [PATCH 043/157] Fix typo --- OsmAnd/res/layout/note_list_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml index 265de36d7b..d0a084a359 100644 --- a/OsmAnd/res/layout/note_list_item.xml +++ b/OsmAnd/res/layout/note_list_item.xml @@ -49,7 +49,7 @@ android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" - android:textColor="?attrs:searchbar_text" + android:textColor="?attr/searchbar_text" android:textSize="@dimen/default_list_text_size" tools:text="Nov 17, 2017 Audio Note"/> From 96502930d229e905b4dbc7ce6b8693fcf22d5c9f Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 17:57:17 +0200 Subject: [PATCH 044/157] Remove header after deleting all group --- .../net/osmand/plus/audionotes/NotesFragment.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index d4f2eeb42f..5e8c5f76db 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -325,13 +325,17 @@ public class NotesFragment extends OsmAndListFragment { return new SortFragmentListener() { @Override public void onSortModeChanged() { - listAdapter.clear(); - listAdapter.addAll(createItemsList()); - listAdapter.notifyDataSetChanged(); + recreateAdapterData(); } }; } + private void recreateAdapterData() { + listAdapter.clear(); + listAdapter.addAll(createItemsList()); + listAdapter.notifyDataSetChanged(); + } + private void enterSelectionMode(final int type) { actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() { @@ -418,9 +422,8 @@ public class NotesFragment extends OsmAndListFragment { Recording rec = it.next(); plugin.deleteRecording(rec, true); it.remove(); - listAdapter.remove(rec); } - listAdapter.notifyDataSetChanged(); + recreateAdapterData(); } }) .setNegativeButton(R.string.shared_string_cancel, null) From ddbf21dd142d8685bf636f5fd61f745bcd844618 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 18:04:08 +0200 Subject: [PATCH 045/157] Show a "Notes" tab even without notes --- .../net/osmand/plus/audionotes/AudioVideoNotesPlugin.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index ad0870730f..ae599d4142 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -1640,11 +1640,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { @Override public void addMyPlacesTab(FavoritesActivity favoritesActivity, List mTabs, Intent intent) { - if (getAllRecordings().size() > 0) { - mTabs.add(favoritesActivity.getTabIndicator(NOTES_TAB, NotesFragment.class)); - if (intent != null && "AUDIO".equals(intent.getStringExtra("TAB"))) { - app.getSettings().FAVORITES_TAB.set(NOTES_TAB); - } + mTabs.add(favoritesActivity.getTabIndicator(NOTES_TAB, NotesFragment.class)); + if (intent != null && "AUDIO".equals(intent.getStringExtra("TAB"))) { + app.getSettings().FAVORITES_TAB.set(NOTES_TAB); } } From 8fe6486f6255876389c70aa7eef6b6aca0b7ae7a Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Fri, 17 Nov 2017 18:29:24 +0200 Subject: [PATCH 046/157] Add empty state layouts --- .../res/layout-land/empty_state_av_notes.xml | 52 +++++++++++++++++++ OsmAnd/res/layout/empty_state_av_notes.xml | 40 ++++++++++++++ OsmAnd/res/values/strings.xml | 2 + 3 files changed, 94 insertions(+) create mode 100644 OsmAnd/res/layout-land/empty_state_av_notes.xml create mode 100644 OsmAnd/res/layout/empty_state_av_notes.xml diff --git a/OsmAnd/res/layout-land/empty_state_av_notes.xml b/OsmAnd/res/layout-land/empty_state_av_notes.xml new file mode 100644 index 0000000000..1ca2c39846 --- /dev/null +++ b/OsmAnd/res/layout-land/empty_state_av_notes.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/empty_state_av_notes.xml b/OsmAnd/res/layout/empty_state_av_notes.xml new file mode 100644 index 0000000000..ed1bebb5e7 --- /dev/null +++ b/OsmAnd/res/layout/empty_state_av_notes.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 ed756941b2..a6d02f375a 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,8 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Take notes! + Add audio, video or photo note to every point on the map, using widget or context menu. Notes by date By date By type From f2aaec95966cfa2ba070e7d2c91872e9a457ce98 Mon Sep 17 00:00:00 2001 From: Viktar Vauchkevich Date: Fri, 17 Nov 2017 16:27:32 +0000 Subject: [PATCH 047/157] Translated using Weblate (Belarusian) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-be/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 826a17331f..81d02b8df0 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -2950,7 +2950,7 @@ Перайменаваць маркер Два Адзін - Абярыце, якія групы ўлюбёных вы хочаце дадаць да маркераў. + Абярыце ўлюблёную групу, якую вы хочаце дадаць да маркераў. Мы паказваем толькі сляды са шляхавымі кропкамі Шляхавыя кропкі Група ўлюбёных Дадаць групу @@ -2970,4 +2970,5 @@ Направа Налева Больш + Пошук слядоў з шляхавымі кропкамі From 52c3415f29f56d93bf8492a4e9c676200a3944cd Mon Sep 17 00:00:00 2001 From: Viktar Vauchkevich Date: Fri, 17 Nov 2017 16:30:27 +0000 Subject: [PATCH 048/157] Translated using Weblate (Belarusian (latin)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-be-rBY/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml index 468058bbe2..6be3d6cb67 100644 --- a/OsmAnd/res/values-be-rBY/strings.xml +++ b/OsmAnd/res/values-be-rBY/strings.xml @@ -2892,7 +2892,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Poŭnyekranny režym Pakazać na vierchniaj paneli Adznačyć prajdzienyja - Abiarycie, jakija hrupy ŭlubionych vy chočacie dadać da markieraŭ. + Abiarycie ŭliublionuju hrupu, jakuju vy chočacie dadać da markieraŭ. My pakazvajem toĺki sliady sa šliachavymi kropkami Šliachavyja kropki Hrupa ŭlubionych Dadać hrupu @@ -2921,4 +2921,5 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Naprava Nalieva Bolš + Pošuk sliadoŭ z šliachavymi kropkami From 1bd9b7bff918f0282df7ddf97a20034e555364af Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 17 Nov 2017 18:40:47 +0200 Subject: [PATCH 049/157] Change icons --- OsmAnd/res/values/colors.xml | 4 ++++ .../osmand/plus/osmedit/OsmEditsAdapter.java | 24 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values/colors.xml b/OsmAnd/res/values/colors.xml index c95e62c66f..3d16d4ae95 100644 --- a/OsmAnd/res/values/colors.xml +++ b/OsmAnd/res/values/colors.xml @@ -305,4 +305,8 @@ #9fadfc #ed5421 + #73b825 + #FDD835 + #e53935 + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index d52250269e..cf7c7ff088 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -11,8 +11,11 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; +import net.osmand.osm.edit.Node; +import net.osmand.osm.edit.OSMSettings; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; +import net.osmand.plus.render.RenderingIcons; import net.osmand.util.Algorithms; import java.util.List; @@ -117,7 +120,26 @@ public class OsmEditsAdapter extends ArrayAdapter { private Drawable getIcon(OsmPoint point) { if (point.getGroup() == OsmPoint.Group.POI) { - return app.getIconsCache().getIcon(R.drawable.ic_type_info, R.color.color_distance); + Node node = ((OpenstreetmapPoint) point).getEntity(); + int iconResId = 0; + String typeStr = node.getTag(OSMSettings.OSMTagKey.AMENITY); + if (!Algorithms.isEmpty(typeStr)) { + iconResId = RenderingIcons.getBigIconResourceId(OSMSettings.OSMTagKey.AMENITY.getValue() + "_" + typeStr); + } + if (iconResId == 0) { + iconResId = R.drawable.ic_type_info; + } + int colorResId = R.color.color_distance; + if (point.getAction() == OsmPoint.Action.CREATE) { + colorResId = R.color.color_osm_edit_create; + } else if (point.getAction() == OsmPoint.Action.MODIFY) { + colorResId = R.color.color_osm_edit_modify; + } else if (point.getAction() == OsmPoint.Action.DELETE) { + colorResId = R.color.color_osm_edit_delete; + } else if (point.getAction() == OsmPoint.Action.REOPEN) { + colorResId = R.color.color_osm_edit_modify; + } + return app.getIconsCache().getIcon(iconResId, colorResId); } else if (point.getGroup() == OsmPoint.Group.BUG) { return app.getIconsCache().getIcon(R.drawable.ic_type_bug, R.color.color_distance); } From ae17ca6bac2d3fd6dbd83b62b6a01a8d8e972250 Mon Sep 17 00:00:00 2001 From: sonora Date: Fri, 17 Nov 2017 21:15:58 +0100 Subject: [PATCH 050/157] string improvement --- OsmAnd/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index c2f368aabf..47eb5634bc 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -18,8 +18,8 @@ Favorites group Add group You can add a group of favorites or track waypoints. - Markers on map! - Mark places on the map by a tap. + Create map markers! + Long or short tap places, then tap the marker flag button. Import groups You can import favorite groups or track waypoints as markers. @string/shared_string_history From 7db6154b9dad5cf273983a84105877caeaf0cf76 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Fri, 17 Nov 2017 19:48:48 +0000 Subject: [PATCH 051/157] Translated using Weblate (Russian) Currently translated at 88.7% (2220 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 58 ++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 2d0238c568..98606f5973 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -2613,4 +2613,62 @@ Удалить из маркеров карты Продолжать показывать на карте Линия + Поиск трековс путевыми точками + Активация этого вида меняет стиль карты OsmAnd на «Туристическую карту\", это особый высоко детализированный вид для путешественников и профессиональных водителей. +\n +\nЭтот стиль на любом масштабе карты показывает максимальное количество подробностей для поездки, имеющихся в картографических данных (в частности, дороги, дорожки, тропинки, и ориентиры). +\n +\n Он также ясно показывает все виды дорог через цветовое кодирование, что полезно, для, например, управления большими транспортными средствами. +\n +\n И он добавляет специальные туристические настройки, такие как велосипедные маршруты или альпийские горные маршруты. +\n +\nДополнительное скачивание не требуется, вид создается из наших стандартных карт. +\n +\nЭтот вид может быть отменен путем деактивации его здесь или путем изменения «Стиля карты» в разделе «Настройки карты» по желанию. + Открытый код местоположения (OLC) + OsmAnd (OSM Automated Navigation Directions) - картографическая и навигационная программа с доступом к свободным, мировым и высококачественным данным OpenStreetMap (OSM). Получайте наслаждение от голосовой и визуальной навигации, просматривайте точки интереса (англ. POI, points of interest), создавайте и управляйте GPX треками, используйте визуализацию контурных линий и данных высот (через плагин), переключайтесь между режимами автомобиль, велосипед и пешеход, редактируйте OSM данные и многое другое. + GPS-навигация +\n• Вы можете выбрать между автономным режимом (без платы за роуминг) и через Интернет (быстрее) +\n• Пошаговые голосовые подсказки (записанные или синтезированные голоса) доставят вас к месту назначения +\n• Повторный расчет маршрута после значительного отклонения от существующего +\n• Полосы движения, названия улиц и приблизительное время прибытия помогут в дороге +\n• Для того, чтобы сделать ваше путешествие более безопасным, режим дня/ночи переключается автоматически +\n• Вы можете настроить отображение ограничений скорости и получать предупреждения при ее превышении +\n• Карта масштабируется соответственно вашей скорости +\n• Вы можете искать места по адресу, типу (паркинг, ресторан, отель, заправка, музей и т.д.) или географическим координатам +\n• Поддержка промежуточных точек маршрута +\n• Вы можете записать собственный GPX трек или загрузить готовый и придерживаться его + Карта +\n• Отображает POI (точки интереса) около вас +\n• Адаптирует карту в направлении вашего движения (или компаса) +\n• Показывает, где вы находитесь и куда вы смотрите +\n• Делитесь своим расположением, чтобы друзья смогли найти вас +\n• Сохраняет ваши самые важные места в избранных +\n• Позволяет вам выбрать как отображать названия на карте: на английском, местным или с фонетическим написанием +\n• Отображает специальные онлайн тайлы, спутниковые снимки (с Bing), различные метки, как туристические/навигационные GPX треки и дополнительные слои с настраиваемой прозрачностью + Катание на лыжах +\n• OsmAnd плагин лыжные карты позволяет видеть лыжные трассы с уровнем сложности и некоторой дополнительной информацией, как расположение подъемников и других объектов. + Езда на велосипеде +\n• Вы можете найти велосипедные дорожки на карте +\n• GPS навигация в велосипедном режиме строит маршрут используя велосипедные дорожки +\n• Вы можете видеть вашу скорость и высоту над уровнем моря • Опция GPX записи позволяет вам записывать ваше путешествие и делиться им +\n• Через приложение вы можете включить отображение контурных линий и затемнение рельефа + Прогулки, походы, экскурсии +\n• Карта показывает пешеходные и треккинговые тропы +\n• Википедия на предпочитаемом вами языке может многое рассказать вам во время экскурсии по городу +\n• Остановки общественного транспорта (автобус, трамвай, поезд), включая названия маршрутов, помогут ориентироваться в новом городе +\n• GPS навигация в пешеходном режиме высчитывает маршрут, используя пешеходные тропы +\n• Вы можете загрузить и следовать GPX маршруту или записать и делиться своим собственным + Внесение вклада в OSM +\n• Сообщения об ошибках +\n• Загрузка GPX треков в OSM напрямую из программы +\n• Добавление точек интереса (POI) и загрузка их в OSM (или позже, если оффлайн) + "OsmAnd+ (OSM Automated Navigation Directions) - картографическая и навигационная программа с доступом к свободным, мировым и высококачественным данным OpenStreetMap (OSM). Получайте наслаждение от голосовой и визуальной навигации, просматривайте точки интереса (англ. POI, points of interest), создавайте и управляйте GPX треками, используйте визуализацию контурных линий и данных высот, переключайтесь между режимами автомобиль, велосипед и пешеход, редактируйте OSM данные и многое другое. OsmAnd + - платная версия программы. При приобретении, вы поддержите проект, финансируете разработку новых возможностей и получите последние обновления. Некоторые из главных возможностей:" + Навигация +\n• Работает через Интернет (быстрее) или автономно (без платы за роуминг за границей) +\n• Пошаговые голосовые подсказки (записанные или синтезированные голоса) +\n• Полосы движения, отображение названия улицы и приблизительное время прибытия +\n• Поддержка промежуточных точек на вашем маршруте +\n• Автоматическое перестройка маршрута при отклонении от существующего +\n• Поиск мест по адресу, типу (например, ресторан, гостиница, заправка, музей) или географическим координатам From b3ede76a8bc268904082e48d48c95a1f723d18aa Mon Sep 17 00:00:00 2001 From: Suren Date: Fri, 17 Nov 2017 18:53:28 +0000 Subject: [PATCH 052/157] Translated using Weblate (Armenian) Currently translated at 98.7% (2470 of 2502 strings) --- OsmAnd/res/values-hy/strings.xml | 48 ++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/OsmAnd/res/values-hy/strings.xml b/OsmAnd/res/values-hy/strings.xml index 3309633a28..5fd53f891f 100644 --- a/OsmAnd/res/values-hy/strings.xml +++ b/OsmAnd/res/values-hy/strings.xml @@ -98,7 +98,7 @@ Ոչ OpenMaps - Եվրոպա Կոնտուրային գծերի/եզրագծերի տվյալներ - Միացնել ճշգրիտ ճանապարհի հաշվարկի ռեժիմը։ Այս ռեժիմը աշխատում է կարճ հեռավորությունների վրա և չի օգտագործում սեփական գրադարանը + Միացնել ճշգրիտ երթուղիների հաշվարկի ռեժիմը։ Այս ռեժիմը դեր սահմանափակված է հեռավորությամբ և դանդախ է։ Dropbox փլագին Ընտրել ըստ հարցման Ընտրել default Widget գործողություն։ @@ -233,10 +233,10 @@ Սխալ օգտագործողի անուն! Մինչև Սկսած - Դիտել լուսանկարներ ավելացրած որոշակի ժամանակահատվածում: - Ամսաթվեր + Դիտել միայն ավելացրած լուսանկարներ + Ամսաթիվ "Մուտքագրեք օգտատերի անունը" - Դիտել որոշակի օգտագործողի կողմից վերբեռնված լուսանկարները: + Դիտել լուսանկարները ավելացրած օգտագործողի կողմից Օգտատերի անունը Դուք կարող եք դասավորել լուսանկարներ ըստ ուղարկողի կամ ամսաթվի: Զտիչները օգտագործվում են միայն մեծ չափերի համար: Շառավիղ-քանոն @@ -619,7 +619,7 @@ Ձայն Ցանկալի է անջատել պոլիգենների ցուցադրումը։ "Clip երկարությունը" - Յուրաքանչյուր ձայնագրված տեսահոլովակի(clip) երկարությունը չի նշանակվի ավելի երկար ընտրված ժամանակահատվածից + Ձայնագրված տեսահոլովակի(clip) երկարության սահմանաչափը։ Հիշողության ծավալը, որը կարող է զբաղեցված լինի բոլոր clips-ներով։ Հեռավորություն։ Ժամանակ՝ @@ -1077,7 +1077,7 @@ Հավաքներ Փողոցային լուսավորություն Proxy սերվեր - Ինտերնետային կապի հաստատում proxy սերվերի միջոցով + Նշեք Ինտերնետային proxy սերվերը։ Գաղտնիություն Կետեր Ցանկանում եք սկսել նավարկությունը ըստ տրեկի? @@ -1326,7 +1326,7 @@ Նիստի URL սարքի հետեւելու համար "Թիրախային սարքին միանալու համար %2$s, սեխմել հղման վրա %3$s կամ նշեք track ID-ն (%1$s)" Մուտքագրման ընդմիջում - Ընտրեք ժամանակի ընդմիջում դիրքը ուղղարկելու համար + Ընտրեք ժամանակի ընդմիջումը գտնվելու վայրի տվյալները ուղղարկելու համար։ օրեր Միացում Սպառվում է @@ -1785,7 +1785,7 @@ Տեսանելիություն Թեգեր(Tags) Նկարագրություն - Նշեք OSM-ի օգտվողի անունը և գաղտնաբառը, GPX ֆայլերը OpenStreetMap-ին վերբեռնելու համար: + Նշեք OSM-ի օգտվողի անունը և գաղտնաբառը, GPX ֆայլերը OpenStreetMap վերբեռնելու համար: Աջակցում Աջակցել նոր հատկությունների զարգացումը Նվիրատվություն կատարեք նոր հատկությունները հավելվածում տեսնելու համար։ @@ -1896,17 +1896,17 @@ Ընդհանուր Էկրանի պարամետրերը, տեղայնացում, միավորներ և այլն։ Հավելվածի ընդհանուր կարգավորումները - Ձեր OSM օգտվողի անունը (user name) + Ձեր OSM օգտվողի անունը (username) Նշեք OSM-ի օգտվողի անունը (պահանջվում է OSM-ի հետ աշխատելու համար)։ Ձեր OSM գաղտնաբառը Ֆոնային ռեժիմ - Միացնում է OsmAnd-ը ֆոնային ռեժիմում երբ էկրանը անջատված է + Աշխատեցնում է OsmAnd-ը ֆոնային ռեժիմում երբ էկրանը անջատված է։ Ներբեռնելու համար բավարար ազատ տեղ չկա %1$s ՄԲ (ազատ է: %2$s)։ Թափանցիկ թեմա Հիմնական գրադարանը չի աջակցվում այս սարքում: Տեղական գրադարանի ստեղծում … Քարտեզի ավտոմատ վերադարձման կարգավորումները - Ընտրեք այն ժամանակը, երբ քարտեզը կվերադառնա ընթացիկ դիրքին + Ընտրեք այն ժամանակը, երբ քարտեզը կվերադառնա ընթացիկ դիրքին։ Միայն ձեռքով (սեղմելով «սլաքը») Կրկնել նավիգացիոն հրահանգները պարբերաբար։ Կրկնել նավիգացիոն հրահանգները @@ -2105,7 +2105,7 @@ Գիշերային Արևածագ/մայրամուտ Լույսի սենսոր - Ընտրեք քարտեզի ցերեկային/գիշերային ռեժիմը + Ընտրեք քարտեզի ցերեկային/գիշերային ռեժիմը։ Ցերեկային/գիշերային ռեժիմ Ներբերնել {0} ֆայլ(եր) ({1} ՄԲ)? Ընտրվեց {0} @@ -2178,7 +2178,7 @@ վայրկյան րոպ․ Ընտրեք արթնացման ժամանակի ընդմիջումը ֆոնային ծառայության համար։ - Ֆոնային ծառայության համար ընտրել դիրքորոշման աղբյուր + Ֆոնային ծառայության համար ընտրել դիրքորոշման աղբյուր։ Դիրքորոշման աղբյուր Միացնում է OsmAnd-ը ֆոնային ռեժիմում, ձեր գտնվելու վայրը հետեւելու համար, երբ էկրանը անջատված է։ Միացնում է OsmAnd-ը ֆոնին ռեժիմում @@ -2325,8 +2325,8 @@ Ընտրեք երկիրը Միացնել քարտեզի 3D ռեժիմը: Քարտեզի 3D տեսք - Ցուցադրել POI-ի քարտեզի վրա (օգտագործել վերջին ընտրված ֆիլտրը): - Ցույց տալ POI + Ցուցադրել վերջին ընտրած POI-ին քարտեզի վրա: + Ցույց տալ POI-ի Քարտեզի աղբյուրը Օգտագործել Ինտերնետը Ցույց տալ ձեր դիրքը @@ -2597,9 +2597,9 @@ Կրկնել Տրեկի (track) կետերը Ավելացնել խումբ - Դուք կարող եք ավելացնել «Սիրված»-ի խումբ կամ տրեկի կետեր: + Դուք կարող եք ավելացնել «Սիրված» խումբ կամ տրեկի կետեր: Ներմուծել խմբերը - Դուք կարող եք ներմուծել «Սիրված»-ի խմբերը կամ տրեկի կետերը որպես մարկերներ: + Դուք կարող եք ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ: Երկու Մեկ Ավելացնել կետ @@ -2616,4 +2616,16 @@ Ֆայլ %1$s չի պարունակում կետեր, ներմուծել այդ որպես տրեկ? Տեղափոխել կետը Ավելացնել սեգմենտը GPX-ին - +Ավելին + Տեսքը քարտեզի վրա + Ընտրել տրեկը որը OsmAnd-ը կավելացնի մարկերներին + Ընտրեք «Սիրված» խումբը, որը ցանկանում եք ավելացնել մարկերներին + «Սիրված»-ի խումբը + Մարկերները քարտեզի վրա է! + Կետերի նշում քարտեզի վրա սխմելով էկրանին։ + Այս էկրանին կհայտնվեն մարկերներ, որոնք նշված են ինչպես անցած։ + Թվերի քանակը + Ցուցադրել թվային վահանակը + %1$d թվեր + Նշել անցած + From fbda141885a4205cc7ef439d5aa17644a99ea957 Mon Sep 17 00:00:00 2001 From: jan madsen Date: Fri, 17 Nov 2017 21:33:22 +0000 Subject: [PATCH 053/157] Translated using Weblate (Danish) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-da/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 3d699f7965..66278b0260 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -2957,7 +2957,7 @@ Repræsenterer område: %1$s x %2$s Vælg hvordan afstanden til de aktive markører skal vises. Vælg hvor mange retningsindikatorer der vises. Vælg et spor af rutepunkter, som skal tilføjes til markører - Vælg favoritgrupper, der skal tilføjes markører. + Vælg favoritgruppe, der skal tilføjes markører. Viser kun spor med rutepunkter Spor af rutepunkter Favoritgruppe Tilføj gruppe @@ -2969,4 +2969,6 @@ Repræsenterer område: %1$s x %2$s \@string/shared_string_history Markører, der er markeret som passeret vises på denne skærm. Udseende på kortet + Leder efter spor med rutepunkter + Mere From 9215e10b4310fad83f7deaa171ee2e90a7e526ab Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Fri, 17 Nov 2017 21:28:42 +0000 Subject: [PATCH 054/157] Translated using Weblate (French) Currently translated at 99.8% (2497 of 2502 strings) --- OsmAnd/res/values-fr/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 7eb77c7059..6819d9cf6f 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3003,7 +3003,7 @@ représentant la zone : %1$s x %2$s Aller au champ suivant Apparence sur la carte Sélectionnez des points de passage qu\'OsmAnd ajoutera aux marques - Sélectionnez les groupes de favoris à ajouter aux marques. + Sélectionnez les groupes de favoris à ajouter aux marques. Seuls les traces avec points de passage sont affichées Points de passage Groupe de favoris Ajouter un groupe @@ -3021,4 +3021,5 @@ représentant la zone : %1$s x %2$s Indiquez comment afficher la distance avec les marques actives. Indiquez le nombre d\'indicateurs de direction à afficher. Plus + Rechercher des traces avec points de passage From 20b13f61d2827bd730b1d376d72ac19911145c02 Mon Sep 17 00:00:00 2001 From: iman Date: Fri, 17 Nov 2017 18:23:00 +0000 Subject: [PATCH 055/157] Translated using Weblate (Persian) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-fa/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 047a11fef3..d75fab9231 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -2949,7 +2949,7 @@ مشخص کنید چند پیکانِ جهت‌نما نشان داده شود. ظاهر بر روی نقشه نقاط بین‌راهی موردنظرتان را انتخاب کنید تا به نشانه‌ها اضافه شوند - گروه موردنظرتان از نقاط برگزیده را انتخاب کنید تا به نشانه‌ها اضافه شود. + گروه موردنظرتان از نقاط برگزیده را انتخاب کنید تا به نشانه‌ها اضافه شود. فقط مسیرهای دارای نقطهٔ بین‌راهی نشان داده می‌شود. نقاط بین‌راهی مسیر گروه نقاط برگزیده افزودن گروه @@ -2960,4 +2960,5 @@ می‌توانید گروه‌های نقاط برگزیده یا نقاط بین‌راهی را به‌عنوان نشانه وارد کنید. نشانه‌هایی که به‌عنوان عبورکرده مشخص شده‌اند در این صفحه نشان داده می‌شوند. بیشتر + جست‌وجو برای مسیرهای دارای نقطهٔ بین‌راهی From 37c725118db7afabac6b1f7d282fccebb5d65935 Mon Sep 17 00:00:00 2001 From: ezjerry liao Date: Fri, 17 Nov 2017 23:20:27 +0000 Subject: [PATCH 056/157] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 4a6569e714..b47d8308c1 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -2936,13 +2936,13 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 到下一段 顯現在地圖上 選擇 OsmAnd 將哪個軌跡航點增加到標記 - 選擇您想增加標記的我的收藏群組。 + 選擇您想增加標記的我的收藏群組。我們只顯示軌跡跟航點 軌跡航點 我的收藏群組 新增群組 您可以增加一個我的收藏群組或軌跡航點。 - 在地圖上標記! - 在地圖上點一下標記地點。 + 建立地圖標記! + 長按或點一下地點,然後點擊標記標誌按鈕。 匯入群組 您可以匯入我的收藏群組或軌跡航點作為標記。 \@string/shared_string_history @@ -2954,4 +2954,5 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 從您的位置顯示指引路線到現行的標記位置。 顯示一個或兩個箭頭指示方向到現行的標記。 更多 + 尋找軌跡跟航點 From cb716c3337a72a7bea9dda5d23bd30382befdf74 Mon Sep 17 00:00:00 2001 From: Franco Date: Sat, 18 Nov 2017 02:39:10 +0000 Subject: [PATCH 057/157] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index ff3415318f..0c58e162f6 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -1924,7 +1924,7 @@ Se aprecia la participación activa, y las contribuciones pueden hacerse directa Confirmar ¿Borrar el punto GPX? - Editar el punto GPX + Editar punto GPX Color del GPX Ancho del GPX Estilo del camino @@ -2829,13 +2829,13 @@ Proporciona un código completo %1$d dígitos Ir al campo siguiente Elige los puntos de referencia de la traza que se añadirán a los marcadores. - Elige grupos de favoritos para añadir a los marcadores. + Elige el grupo de favoritos que desea agregar a los marcadores. Se muestran sólo trazas con puntos de referencia Puntos de referencia de la traza Grupo de favoritos Añadir grupo Puedes añadir un grupo de favoritos o puntos de referencia de la traza. - ¡Marcadores del mapa! - Marca los lugares del mapa con una pulsación. + ¡Crea marcadores del mapa! + Haz una pulsación corta o larga sobre los lugares, luego pulsa la bandera del marcador. Importar grupos Puedes importar grupos de favoritos o puntos de referencias de la traza como marcadores. Los marcadores descartados aparecerán en esta pantalla. @@ -2847,4 +2847,6 @@ Proporciona un código completo Elige cuántos indicadores de dirección mostrar. Aspecto en el mapa \@string/shared_string_history + Búsqueda de trazas con puntos de referencia + Más From 54f4e78b8576e63d2d1c9f57b42245261a3d12c3 Mon Sep 17 00:00:00 2001 From: josep constanti Date: Sat, 18 Nov 2017 04:19:08 +0000 Subject: [PATCH 058/157] Translated using Weblate (Catalan) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-ca/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index c3debfb70a..6552679f1f 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -2705,13 +2705,13 @@ Abasta l\'àrea: %1$s x %2$s Reanomena el marcador Aparença al mapa Seleccioneu les fites de la traça que OsmAnd afegirà als marcadors - Seleccioneu els grups preferits que voleu afegir als marcadors. + Seleccioneu el grup preferit que voleu afegir als marcadors. Només es mostren traces amb fites Fites de la traça Grup de preferits Afegeix un grup Podeu afegir un grup de preferits o fites de la traça. - Marcadors al mapa! - Destaca llocs al mapa per prémer-hi. + Creeu marcadors de mapa! + Premeu més o menys temps sobre els llocs i després el botó tipus bandera del marcador. Importa grups Podeu importar com marcadors a grups de preferits o a fites de la traça. \@string/shared_string_history @@ -2723,4 +2723,5 @@ Abasta l\'àrea: %1$s x %2$s Seleccioneu com indicar la distància als marcadors actius. Trieu quants indicadors de direcció es mostren. Més + Recerca de traces amb fites From b21b108dee04b2ffb9adc010557220058147b627 Mon Sep 17 00:00:00 2001 From: Hardy Date: Sat, 18 Nov 2017 08:37:53 +0100 Subject: [PATCH 059/157] spelling consistency --- OsmAnd/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 47eb5634bc..0077a2dc06 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -26,7 +26,7 @@ Markers marked as passed will appear on this screen. Two One - Display guidelines from your position to the active marker locations. + Display guide lines from your position to the active marker locations. Display one or two arrows indicating the direction to the active markers. Choose how to display the distance to active markers. Choose how many direction indicators are displayed. @@ -297,7 +297,7 @@ \u2022 Other improvements and bug fixes\n\n - \u2022 Completely reworked map markers with guidelines and route planning\n\n + \u2022 Completely reworked map markers with guide lines and route planning\n\n \u2022 Measure distance tool offering snap to road feature and saving points as track\n\n \u2022 OsmAnd Live: bug fixes, fresh data on the server every 30 minutes, updates implemented into the navigation\n\n From 481b02d0e13b971096dfdb724a607b75b8f213ea Mon Sep 17 00:00:00 2001 From: Hardy Date: Sat, 18 Nov 2017 09:13:51 +0100 Subject: [PATCH 060/157] string improvement --- OsmAnd/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 0077a2dc06..ada4969c50 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -30,12 +30,12 @@ Display one or two arrows indicating the direction to the active markers. Choose how to display the distance to active markers. Choose how many direction indicators are displayed. - Digits quantity + Number of decimal digits Right Left Show number pad Paste - Automatically switch to the next field after entering %1$d digits after the decimal point. + Automatically switch to the next field after entering %1$d decimal digits. %1$d digits Go to next field Rename marker From 92f489a8bd65e97654b78d948a888ba7da422c0f Mon Sep 17 00:00:00 2001 From: Hardy Date: Sat, 18 Nov 2017 10:36:31 +0100 Subject: [PATCH 061/157] string improvement --- OsmAnd/res/values/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index ada4969c50..31ee36984e 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -12,12 +12,12 @@ Looking for tracks with waypoints More Appearance on the map - Select track waypoints of which OsmAnd will add to markers - Select favorite group you want to add to markers. We show only tracks with waypoints + Select a track to add its waypoints to the markers. (Only tracks with waypoints are listed.) + Select a favorite category to add to the markers. Track waypoints - Favorites group - Add group - You can add a group of favorites or track waypoints. + Favorites category + Add a group + You can import groups from favorites or track waypoints. Create map markers! Long or short tap places, then tap the marker flag button. Import groups From ee674eb047a4cab69cab616acdb2be85c7589668 Mon Sep 17 00:00:00 2001 From: Hardy Date: Sat, 18 Nov 2017 10:45:10 +0100 Subject: [PATCH 062/157] string consistency --- 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 31ee36984e..15b8daa3e6 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -83,7 +83,7 @@ Save as track Move to history Group will be removed after restart - Show guide line + Show guide lines Show arrows on the map Show passed Hide passed From 29cf3a3bffb6ad0a77d54a8262919316cd1f9fb8 Mon Sep 17 00:00:00 2001 From: Viktar Vauchkevich Date: Sat, 18 Nov 2017 11:33:52 +0000 Subject: [PATCH 063/157] Translated using Weblate (Belarusian) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-be/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 81d02b8df0..57ae5dcdc0 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -2955,8 +2955,8 @@ Група ўлюбёных Дадаць групу Вы можаце дадаць групу ўлюбёных ці шляхавыя кропкі. - Маркеры на мапе! - Адзначыць месца на мапе дотыкам. + Стварыце маркеры мапы! + Дакраніцеся месца і потым націсніце кнопку маркера. Імпартаваць групы Вы можаце імпартаваць групы улюбёных ці шляхавыя кропкі як маркеры. Маркеры, пазначаныя як пройдзенныя, з\'явяцца на гэтым экране. From b959cc12b4e677647062308f6eae02a1dbb9d92f Mon Sep 17 00:00:00 2001 From: jan madsen Date: Sat, 18 Nov 2017 05:49:12 +0000 Subject: [PATCH 064/157] Translated using Weblate (Danish) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-da/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 66278b0260..0bb3803f6b 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -2962,13 +2962,13 @@ Repræsenterer område: %1$s x %2$s Favoritgruppe Tilføj gruppe Tilføjer en gruppe af favoritter eller et spor af rutepunkter. - Markører på kortet! - Marker steder på kortet med et tryk. + Opret kortmarkører! + Lange eller korte tryk steder, og tryk derefter på markør flag knappen. Importer grupper Importer favoritgrupper eller et spor af rutepunkter som markører. \@string/shared_string_history Markører, der er markeret som passeret vises på denne skærm. Udseende på kortet - Leder efter spor med rutepunkter + Find spor med rutepunkter Mere From 9e1df789c6242674c6c29cab38e160ca8531630a Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sat, 18 Nov 2017 08:26:17 +0000 Subject: [PATCH 065/157] Translated using Weblate (French) Currently translated at 99.8% (2497 of 2502 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 6819d9cf6f..169efaa159 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3003,13 +3003,13 @@ représentant la zone : %1$s x %2$s Aller au champ suivant Apparence sur la carte Sélectionnez des points de passage qu\'OsmAnd ajoutera aux marques - Sélectionnez les groupes de favoris à ajouter aux marques. Seuls les traces avec points de passage sont affichées + Sélectionnez les groupes de favoris à ajouter aux marques. Seules les traces avec points de passage sont affichées Points de passage Groupe de favoris Ajouter un groupe Vous pouvez ajouter un groupe de favoris ou des points de passage. - Marques sur la carte ! - Marquez des emplacements sur la carte par simple appui. + Ajoutez des marques sur la carte ! + Sélectionnez des emplacements sur la carte puis appuyez sur le drapeau de marque. Importer des groupes Vous pouvez importer des groupes de favoris ou des points de passage comme marques. \@string/shared_string_history From 5e20cb6f7fa3b07dfe15360debb8d945ad4d2b1f Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Sat, 18 Nov 2017 08:25:46 +0000 Subject: [PATCH 066/157] Translated using Weblate (Hebrew) Currently translated at 64.1% (1604 of 2502 strings) --- OsmAnd/res/values-he/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index 8016130948..117ab5610d 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -931,7 +931,7 @@ עריכת נ״ע יצירת נ״ע - לא ניתן למצוא את המפרק או שנותן השירות מפוזר על פני מספר מפרקים + לא ניתן למצוא את המפרק או שהמתחם מורכב ממספר מפרקים, מצב שלא נתמך עדיין. האם למחוק את {0} (להזין הערה)? מחיקת נ״ע מחיקה From 7b7db2f2c8e7531cc02353516e357daf5474e556 Mon Sep 17 00:00:00 2001 From: iman Date: Sat, 18 Nov 2017 06:08:08 +0000 Subject: [PATCH 067/157] Translated using Weblate (Persian) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-fa/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index d75fab9231..0d3ec3c08e 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -2954,8 +2954,8 @@ گروه نقاط برگزیده افزودن گروه می‌توانید گروهی از نقاط برگزیده یا نقاط بین‌راهی را اضافه کنید. - نشانه‌گذاری روی نقشه! - با لمسِ نقشه، مکان‌های مختلف را نشانه بزنید. + روی نقشه نشانه‌گذاری کنید! + مکان‌ها به‌صورت کوتاه یا طولانی لمس کنید و سپس دکمهٔ پرچم را بزنید. واردکردن گروه‌ها می‌توانید گروه‌های نقاط برگزیده یا نقاط بین‌راهی را به‌عنوان نشانه وارد کنید. نشانه‌هایی که به‌عنوان عبورکرده مشخص شده‌اند در این صفحه نشان داده می‌شوند. From c357590c116dd4872bd97051e0e5dc117b6b6ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Sok=C3=B3=C5=82?= Date: Sat, 18 Nov 2017 07:11:53 +0000 Subject: [PATCH 068/157] Translated using Weblate (Polish) Currently translated at 90.4% (2263 of 2502 strings) --- OsmAnd/res/values-pl/strings.xml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index df97c5d4b9..e150d71f3a 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -2269,7 +2269,7 @@ Długość %2$s Przenieś w górę Przenieś w dół Zakończ nawigację - Belka górna + Górny pasek Edycji %1$s, range %2$s, zmian łącznie %3$s Subskrypcja OsmAnd Live Wymagany, aby dostarczyć informacje o wkładzie @@ -2880,7 +2880,7 @@ Reprezentuje obszar: %1$s x %2$s Zapisywanie śladu Przenieś do historii Grupa zostanie usunięta po ponownym uruchomieniu - Użyj klawiatury systemowej + Użycie klawiatury systemowej jest zapisany Błędny format Droga @@ -2909,16 +2909,24 @@ Reprezentuje obszar: %1$s x %2$s Wróć Wyświetl Dodano punkty pośrednie do znaczników mapy - Punkty trasy + Punkty śladu Grupa ulubionych Dodawanie grupy - Dodaje grupę ulubionych miejsc lub punktów trasy. + Dodaje grupę ulubionych miejsc lub punktów śladu. Znaczniki na mapie! - Oznacza miejsca na mapie dotknięciem. + Proszę dotknąć miejsce a następnie przycisk znacznika opatrzony flagą. Dwa Jeden Wyświetla na mapie linię łączącą aktualne położenie z położeniem aktywnego znacznika. Wyświetla na mapie jedną lub dwie strzałki wskazujące kierunek do aktywnych znaczników. Wybiera sposób wyświetlania odległości od aktywnego znacznika. Wybiera ilość wyświetlanych wskaźników kierunku. + Wyszukiwanie śladów z punktami + Więcej + Wygląd na mapie + Proszę wybrać ślad, którego punkty zostaną dodane do znaczników. + Wklej + Przechodzi automatycznie do następnego pola po wprowadzeniu %1$d cyfr za przecinkiem. + %1$d cyfr + Przechodzenie do następnego pola From 62034c47c18fbdcead079969e9b57ecc1d8307c1 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Sat, 18 Nov 2017 08:06:53 +0000 Subject: [PATCH 069/157] Translated using Weblate (Russian) Currently translated at 91.4% (2288 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 174 ++++++++++++++++++------------- 1 file changed, 104 insertions(+), 70 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 98606f5973..b64fc47947 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -88,7 +88,7 @@ Точки успешно удалены. Вы собираетесь удалить %1$d точку(и). Вы уверены? Повороты на маршруте - Важные точки маршрута + Важные точки на этом маршруте Трек Макс. скорость Средняя скорость @@ -113,7 +113,7 @@ Выберите пересеченность местности Использовать данные о высотах - Использовать данные о рельефе земной поверхности, предоставленные SRTM, ASTER и EU-DEM + Использовать данные о высоте местности, предоставленные SRTM, ASTER и EU-DEM. Указанное имя для быстрого действия уже используется. Действие будет сохранено как %1$s чтобы избежать дублирования. Обнаружен дубликат имени @@ -144,8 +144,8 @@ Источник карты изменён на \"%s\". Долгое нажатие и перетаскивание позволит переместить кнопку - Отображать данные о глубинах - Контуры глубин + Показывать контуры и точки глубины. + Контуры морских глубин Частота горизонталей Частота горизонталей Высокая @@ -157,9 +157,9 @@ Скрыть воду Старый поиск Показывать старый поиск - Разрешить старый поиск в меню + Добавить старый поиск в меню. Разрешить автомагистрали - Разрешить автомагистрали + Разрешить автомагистрали. Статьи Википедии рядом Поиск города или страны Сверните на %1$d съезд @@ -174,8 +174,8 @@ Поделиться Пауза OsMo запущен - Запись поездки (нет данных) - Показывать уведомление, которое позволит начать запись с помощью кнопки \"Запись поездки\" + Включить быстрый запуск записи + Показывать уведомление, которое позволит начать запись путешествия. Уведомления Продолжить Пауза @@ -183,21 +183,25 @@ Записано Запись Нет данных - - \u2022 Нажимаемые иконки на карте\n\n - \u2022 Гибкая фильтрация POI в поиске: ищите рестораны по типу кухни, кемпинги по наличию удобств\n\n - \u2022 Новый стиль карты Topo для пешего туризма и велосипедистов\n\n - \u2022 Улучшена запись поездки (новые настройки)\n\n - \u2022 Улучшенные навигационные уведомления (Android Wear)\n\n - \u2022 Множество других улучшений и исправлений ошибок\n\n - и многое другое… - + • Нажимаемые иконки на карте +\n +\n • Гибкая фильтрация POI в поиске: ищите рестораны по типу кухни, кемпинги по наличию удобств +\n +\n • Новый стиль карты Topo для пешего туризма и велосипедистов +\n +\n • Улучшена запись поездки (новые настройки) +\n +\n • Улучшенные навигационные уведомления (Android Wear) +\n +\n • Множество других улучшений и исправлений ошибок +\n +\n и многое другое… Минимальная скорость для записи - Выберите минимальную скорость, при превышении которой точка будет записана в трек - Минимальная дистанция для записи - Фильтр: выберите минимальное расстояние от последней позиции для записи точки - Минимально допустимая точность - Выберите минимально допустимую точность определения координат + Фильтр: задайте минимальную скорость для записи точки. + Минимальное перемещение для записи + Фильтр: выберите минимальное расстояние от последней позиции для записи точки. + Минимально точность для записи + Фильтр: задайте минимальную точность для записи точки. Рождественские POI В преддверии рождественских и новогодних праздников, вы можете выбрать для отображения POI, связанные с Рождеством: елки, ярмарки и т. п. Показать рождественские POI? @@ -214,7 +218,7 @@ Редактировать категории Подкатегории Выбранные категории - Настройка поиска + Создать настраиваемый фильтр Настроить поиск Фильтры Применить фильтры @@ -1451,11 +1455,11 @@ Старт сессии Отладочная информация Трекер ID - Автоматический старт поездки и отправка местоположения после запуска приложения + Автоматический старт поездки и отправка местоположения после запуска приложения. Автоматический старт поездки ID трекера Токен сессии: %1$s - Нажмите для просмотра ID трекера + Нажмите для просмотра ID трекера. Мировые пункты обмена bitcoin ID группы Название группы @@ -1603,7 +1607,13 @@ Как обычно Попозже На последних метрах - " - Все созданные группы являются открытыми! Если вы хотите сохранить анонимность, подключите устройства непосредственно через ID трекера.\n - Приватные группы ограничены 8 человеками.\n - Если в группе не будет активным хотя бы 1 человек в течении 2-х недель группа будет удалена.\n - Вы можете ограничить вход в группу, только по приглашениям, но для управления группой вы должны войти в консоль администратора.\n - Если вам нужно создать группу, но с другими условиями, пожалуйста, свяжитесь со службой поддержки http://osmo.mobi + - Введите название и описание группы при создании +\n - С приложением создаются только группы простого типа, подробнее на сайте https://osmo.mobi/g/new +\n - Группами можно управлять через веб-сайт, предоставляя маршруты и точки доступные всем +\n - Мы не поддерживаем использование только одного пользователя, если эта группа не POI +\n - Частные группы ограничены до 8 человек +\n - Подробные условия всегда есть на сайте osMo.mobi +\n - Если вам нужны специальные условия, пожалуйста, свяжитесь со службой поддержки: osmo.mobi @ gmail.com Пеший горный туризм по шкале (SAC) Визуализация пути согласно трассам OSMC Цветовая маркировка зданий по типу @@ -2226,24 +2236,24 @@ Карта привязана к местоположению Введите имя Введите категорию - Введите описание + Введите описание. Выберите категорию Цвет по умолчанию Интеллектуальное автооповещение - Говорить только при изменении направления на целевую точку + Уведомлять только при изменении направления на целевую точку. Период автооповещений Минимальное время между оповещениями - Не менять маршрут при сходе с пути - Предотвращает автоматический пересчет маршрута при значительном удалении от заданного пути - Не менять маршрут при неверном направлении движения - Предотвращает автоматический пересчет маршрута при неверном направлении движения + Не пересчитывать маршрут при сходе с него + Предотвращает автоматический пересчет маршрута после того, как вы покинули его. + Не пересчитывать маршрут при обратном направлении движения + Предотвращает автоматический пересчет маршрута при обратном направлении движения. Пункт назначения не задан Звуковая индикация направления - Индицировать звуком направление на целевую точку + Индицировать звуком направление на целевую точку. Тактильная индикация направления - Индицировать вибрацией направление на целевую точку + Индицировать вибрацией направление на целевую точку. Подписка OsmAnd Live - Включить навигацию с учетом автообновлений OsmAnd Live + Включить навигацию с учетом автообновлений OsmAnd Live. Испанский (американский) Английский (Соединенное Королевство) Венгерский (официальный) @@ -2253,7 +2263,7 @@ Поиск по координатам Расширенный поиск по координатам Вернуться в поиск - Удалить выбранное из истории поиска? + Удалить выбранные элементы из истории? Показать %1$s на карте Искать за %1$s от местоположения поделились через OsmAnd @@ -2265,7 +2275,7 @@ Открыто 24/7 Карта памяти Формат координат - Формат для географических координат + Формат для географических координат. Автобус Поезд @@ -2279,12 +2289,12 @@ Надземные объекты - Не проверять информацию о новых версиях и скидках от OsmAnd + Не проверять информацию о новых версиях и скидках от OsmAnd. Не показывать обновления Вы хотите обновить все карты сейчас? Очистить всю плитку Экономичный путь - Использование экономичного пути (обычно короче) + Использование топливо-сберегающего пути (обычно короче). Вы уверены, что хотите заменить любимые %1$s? Изменить Начать @@ -2292,7 +2302,7 @@ Подписывайтесь на нас Она нужна нам, чтобы предоставить вам информацию о взносах Действительно загрузить {0} файл (ов)? Для этого необходимо {3} Мб временно и {1} Мб на постоянной основе. В настоящее время существует {2} Мб свободного места. - Определить моё местоположение + Найти мою позицию Прокладывайте маршруты и открывайте новые для себя места без подключения к интернету Разрешить доступ к местоположению Дать разрешение @@ -2303,7 +2313,7 @@ Соединение с интернетом отсутствует Не удалось определить местоположение OsmAnd определит ваше местоположение и предложит загрузить карты для этой области. - Поиск карты… + Поиск карт… Выберите другой регион Пропустить загрузку карт У вас нет загруженных карт. Вы можете выбрать карту из списка или загрузить её позже с помощью меню - %1$s. @@ -2318,7 +2328,7 @@ Абонентская плата будет взиматься ежемесячно. Отменить подписку можно на Google Play в любой момент. Пожертвование для сообщества OpenStreetMap Часть вашего пожертвования будет отправлена пользователям OSM, вносящим изменения в OpenStreetMaps. Стоимость подписки при этом остаётся прежней. - Подписка включает в себя ежечасные, ежедневные и еженедельные обновления, а также неограниченное количество доступных загрузок для всех карт со всего мира. + Подписка позволяет получать ежечасные, ежедневные, еженедельные обновления и неограниченные загрузки для всех карт по всему миру. Файл GPX с координатами заметок Астурийский Верхнелужицкий @@ -2361,29 +2371,27 @@ Стили карты Изменить положение кнопки Название действия -" -• Новая функция: кнопка быстрого действия - -• Улучшенный ответ на жесты сенсорного экрана - -• Новый шрифт карты, охватывающий больше языков - -• Поддержка TTS для вариантов региональных языков - -• Улучшение видимости в нескольких стилях карт и Википедии - -• Поддержка Open Location Code (OLC) - -• Отображение профиля высоты, уклона для записанного GPX (также профиль скорости) и построенного маршрута - -• Настройка \"Стиль вождения\" и улучшение логики для велосипедного роутинга - -• Настройки для использования данных о высотах в велосипедном роутинге - -• Множество других улучшений и исправлений ошибок - -и многое другое… - " +• Новая функция: кнопка быстрого действия +\n +\n• Улучшенный ответ на жесты сенсорного экрана +\n +\n• Новый шрифт карты, охватывающий больше языков +\n +\n• Поддержка TTS для вариантов региональных языков +\n +\n• Улучшение видимости в нескольких стилях карт и Википедии +\n +\n• Поддержка Open Location Code (OLC) +\n +\n• Отображение профиля высоты, уклона для записанного GPX (также профиль скорости) и построенного маршрута +\n +\n• Настройка \"Стиль вождения\" и улучшение логики для велосипедного роутинга +\n +\n• Настройки для использования данных о высотах в велосипедном роутинге +\n +\n• Множество других улучшений и исправлений ошибок +\n +\nи многое другое… Сербский (латиница) Голос вкл/выкл Голос выключен @@ -2409,7 +2417,7 @@ Сохранять записанные треки в подпапках с записью месяца (например, 2017-01). Кэш тайлов Неверное имя пользователя! - Просмотр фотографий, добавленных в определенный период. + Просмотр только добавленных фотографий Дата Просмотр только фотографий, добавленных Имя пользователя @@ -2564,11 +2572,11 @@ Введите новое имя Назад Внешний вид на карте - Выберите группы избранных, которые вы хотите добавить к маркерам. + Выберите группу избранных, которую вы хотите добавить к маркерам. Мы показываем только треки с путевыми точками Группа избранных Добавить группу Вы можете добавить группу из избранных или путевых точек. - Маркеры на карте! + Создайте маркеры карт! Отмечайте места на карте нажатием. Импорт групп Вы можете импортировать группы избранных или путевых точек как маркеры. @@ -2613,7 +2621,7 @@ Удалить из маркеров карты Продолжать показывать на карте Линия - Поиск трековс путевыми точками + Поиск треков с путевыми точками Активация этого вида меняет стиль карты OsmAnd на «Туристическую карту\", это особый высоко детализированный вид для путешественников и профессиональных водителей. \n \nЭтот стиль на любом масштабе карты показывает максимальное количество подробностей для поездки, имеющихся в картографических данных (в частности, дороги, дорожки, тропинки, и ориентиры). @@ -2671,4 +2679,30 @@ \n• Поддержка промежуточных точек на вашем маршруте \n• Автоматическое перестройка маршрута при отклонении от существующего \n• Поиск мест по адресу, типу (например, ресторан, гостиница, заправка, музей) или географическим координатам - + Просмотр карты +\n• Отображение вашей позиции и ориентации +\n• Возможность ориентирования карты по компасу или по направлению вашего движения +\n• Сохранение ваших самых важных мест в качестве избранных +\n• Отображение POI (точек интереса) вокруг вас +\n• Отображение специализированных онлайн тайлов, спутниковые снимки (от Bing ), различные наложения, такие как туристические/навигационные GPX треки и дополнительные слои с настраиваемой прозрачностью. +\n• Возможность отображения географических названий на английском, местном или фонетическом написании + Экран %d + Показать диалог избранных + Название предустановки + " было сохранено в " + Повторить + Добавить точки маршрута + Добавить путевую точку + Добавить линию + Сохранить GPX путевую точку + Сохранить точку маршрута + Путевая точка 1 + Точка маршрута 1 + Добавить и записать треки + Запись или импорт треков для просмотра. + Добавить избранные + Добавить избранные на карту или импортировать из файла. + Импортировать трек + Переместить точку + Добавить в GPX трек + From 824858e31d5a1723b0a31838d0ece7cef74f3449 Mon Sep 17 00:00:00 2001 From: ace shadow Date: Fri, 17 Nov 2017 22:34:42 +0000 Subject: [PATCH 070/157] Translated using Weblate (Slovak) Currently translated at 99.2% (2483 of 2502 strings) --- OsmAnd/res/values-sk/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 82ec632eab..c0ea0fe791 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -2950,13 +2950,13 @@ Zodpovedá oblasti: %1$s x %2$s Premenovať značku Vzhľad na mape Zvoľte body stopy, z ktorých má OsmAnd vytvoriť značky - Zvoľte skupinu obľúbených bodov, z ktorých majú byť vytvorené značky. + Zvoľte skupinu obľúbených bodov, z ktorých majú byť vytvorené značky. Zobrazuj[ sa iba stopy s waypointami Body stopy Skupina obľúbených bodov Pridať skupinu Môžete pridať skupinu obľúbených bodov alebo bodov trasy. - Značky na mape! - Stlačením označte miesta na mape. + Vytvoriť mapové značky! + Stlačením označte miesta na mape, potom stlačte tlačidlo s vlajkou značky. Importovať skupiny Môžete importovať skupiny obľúbených bodov alebo body stopy ako značky. Značky označené ako prejdené sa zobrazia na tejto obrazovke. @@ -2967,4 +2967,5 @@ Zodpovedá oblasti: %1$s x %2$s Zvoľte ako chcete zobraziť vzdialenosť k aktívnym značkám. Zvoľte koľko ukazovateľov smeru chcete zobraziť. Viac + Hľadajú sa stopy s waypointami From 9cf41e985085632d42f1b9fe4545ff642098e59b Mon Sep 17 00:00:00 2001 From: Franco Date: Sat, 18 Nov 2017 02:50:11 +0000 Subject: [PATCH 071/157] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index fa982fe639..957b09c5cb 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -1924,7 +1924,7 @@ Se aprecia la participación activa, y las contribuciones pueden hacerse directa Confirmar ¿Borrar el punto GPX? - Editar el punto GPX + Editar punto GPX Color del GPX Ancho del GPX Estilo del camino @@ -2830,13 +2830,13 @@ Proporciona un código completo Ir al campo siguiente Renombrar marcador Elige los puntos de referencia de la traza que se añadirán a los marcadores. - Elige grupos de favoritos para añadir a los marcadores. + Elige el grupo de favoritos que desea agregar a los marcadores. Se muestran sólo trazas con puntos de referencia Puntos de referencia de la traza Grupo de favoritos Añadir grupo Puedes añadir un grupo de favoritos o puntos de referencia de la traza. - ¡Marcadores en el mapa! - Marca los lugares del mapa con una pulsación. + ¡Crea marcadores del mapa! + Haz una pulsación corta o larga sobre los lugares, luego pulsa la bandera del marcador. Importar grupos Puedes importar grupos de favoritos o puntos de referencias de la traza como marcadores. Los marcadores descartados aparecerán en esta pantalla. @@ -2847,4 +2847,7 @@ Proporciona un código completo Elige cómo mostrar la distancia a los marcadores activos. Elige cuántos indicadores de dirección mostrar. Aspecto en el mapa + Búsqueda de trazas con puntos de referencia + Más + \@string/shared_string_history From c86a3235be094ab0aa04adf18fe68ce1e3fbde4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Sok=C3=B3=C5=82?= Date: Sat, 18 Nov 2017 07:12:33 +0000 Subject: [PATCH 072/157] Translated using Weblate (Polish) Currently translated at 99.9% (3313 of 3315 strings) --- OsmAnd/res/values-pl/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index 20e8ad3305..9957adf071 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -3670,4 +3670,6 @@ Rozmiar mapy: miasto Rozmiar mapy: region +Stacja ładowania + From af433f302e01121ca76983304920d546fde6a614 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Sat, 18 Nov 2017 13:11:10 +0000 Subject: [PATCH 073/157] Translated using Weblate (Russian) Currently translated at 91.2% (2283 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index b64fc47947..e79727b7e9 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -2705,4 +2705,29 @@ Импортировать трек Переместить точку Добавить в GPX трек - +Используйте данные OSM и Википедии +\n• Высококачественная информация из лучших совместных проектов мира +\n• Данные OSM доступны по каждой стране или региону +\n• Интересные места (POI) из Википедии прекрасно подходят для осмотра достопримечательностей +\n• Неограниченное количество бесплатных скачиваний непосредственно из приложения +\n• Компактные автономные векторные карты, обновляемые как минимум раз в месяц +\n• Выбор между полными данными региона и только дорожной сетью (пример: вся Япония занимает 700 Мб, а дорожная сеть - 200 Мб) + Функции безопасности +\n• Возможность автоматического переключения режима день/ночь +\n• Возможность отображения ограничения скорости с напоминанием при превышении +\n• Возможность изменения масштаба в зависимости от скорости +\n• Возможность делиться своим местоположением, чтобы друзья смогли найти вас + Возможности для пешеходов и велосипедистов +\n• Просмотр пешеходных, туристических и велосипедных дорожек, прекрасно подходит для активного отдыха +\n• Специальный режимы маршрутизации и отображения для велосипедистов и пешеходов +\n• Опционально остановки общественного транспорта (автобус, трамвай, поезд), включая названия маршрутов +\n• Возможность записи путешествие в локальный GPX файл или интернет-сервис +\n• Возможность отображения скорости и высоты +\n• Отображение контурных линий и затенения высот (через дополнительный плагин) + Непосредственный вклад в OSM +\n• Сообщения об ошибках в данных +\n• Загрузка GPX треков в OSM непосредственно из приложения +\n• Добавление точек интереса (POI) и непосредственная загрузка их в OSM (или позже, если в автономном режиме) +\n• Возможность записи путешествие в фоновом режиме (в то время, как устройство находится в спящем режиме) +\nOsmAnd - открытое программное обеспечение в активной разработке. Каждый может внести вклад сообщая об ошибках, улучшая перевод или разрабатывая новые возможности. Проект находится в состоянии постоянного совершенствования форм взаимодействия разработчиков и пользователей. Ход проекта зависит также от финансовых взносов для обеспечения продолжения кодирования и тестирования новой функциональности. + From 8b059120d20b4c000e48a0a8eef758e5717b753b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B8?= =?UTF-8?q?=D1=85=D0=B8=D1=80=D0=B5=D0=B2?= Date: Sat, 18 Nov 2017 13:13:56 +0000 Subject: [PATCH 074/157] Translated using Weblate (Russian) Currently translated at 91.2% (2283 of 2502 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 e79727b7e9..f23cd46d81 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -538,7 +538,7 @@ Системная Выбор языка программы (перезапустите OsmAnd после изменения) Локализация - След. + Далее Предыдущий Единицы измерения длины и скорости Единицы измерения From e96079d9ff8a5a3d08c25c433d3fee8aa1cfd8ef Mon Sep 17 00:00:00 2001 From: Franco Date: Sat, 18 Nov 2017 15:03:01 +0000 Subject: [PATCH 075/157] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 0c58e162f6..027cb62508 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -2763,7 +2763,7 @@ Proporciona un código completo ascendente Fecha de adición Ordenar por: - Mostrar línea guía + Mostrar líneas guía Mostrar flechas en el mapa Mostrar descartados Ocultar descartados @@ -2792,10 +2792,10 @@ Proporciona un código completo Excepción ocurrida: el informe de problema no se modificó Modificar informe Modificar informe de problema OSM - • Marcadores del mapa totalmente rediseñados con directrices y planificación de rutas -\n -\n • La herramienta de medición de distancias permite el ajuste al camino y guardar puntos como una traza -\n + • Marcadores del mapa totalmente rediseñados con líneas guía y planificación de rutas +\n +\n • La herramienta de medición de distancias permite el ajuste al camino y guardar puntos como una traza +\n \n • OSM Live: corrección de errores, nuevos datos en el servidor cada 30 minutos, actualizaciones implementadas en la navegación \n \n @@ -2820,20 +2820,20 @@ Proporciona un código completo Mostrar en la barra superior Descartar marcador Renombrar marcador - Cantidad de dígitos + Número de dígitos decimales Derecha Izquierda Mostrar teclado numérico Pegar - Cambiar automáticamente al campo siguiente al ingresar %1$d dígitos después del punto decimal. + Cambiar automáticamente al campo siguiente al ingresar %1$d dígitos decimales. %1$d dígitos Ir al campo siguiente - Elige los puntos de referencia de la traza que se añadirán a los marcadores. - Elige el grupo de favoritos que desea agregar a los marcadores. Se muestran sólo trazas con puntos de referencia + Elige una traza y sus puntos de referencia se añadirán a los marcadores. (Sólo se listan las trazas con puntos de referencia.) + Elige una categoría de favoritos para añadir a los marcadores. Puntos de referencia de la traza - Grupo de favoritos - Añadir grupo - Puedes añadir un grupo de favoritos o puntos de referencia de la traza. + Categoría de favoritos + Añadir un grupo + Puedes importar grupos desde favoritos o puntos de referencia de la traza. ¡Crea marcadores del mapa! Haz una pulsación corta o larga sobre los lugares, luego pulsa la bandera del marcador. Importar grupos From 7c8849fa8c22e3312e25aeb559d263a7a2b288c3 Mon Sep 17 00:00:00 2001 From: Franco Date: Sat, 18 Nov 2017 15:07:24 +0000 Subject: [PATCH 076/157] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index 957b09c5cb..e5a59605db 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -2764,7 +2764,7 @@ Proporciona un código completo ascendente Fecha de adición Ordenar por: - Mostrar línea guía + Mostrar líneas guía Mostrar flechas en el mapa Mostrar descartados Ocultar descartados @@ -2793,10 +2793,10 @@ Proporciona un código completo Excepción ocurrida: el informe de problema no se modificó Modificar informe Modificar informe de problema OSM - • Marcadores del mapa totalmente rediseñados con directrices y planificación de rutas -\n -\n • La herramienta de medición de distancias permite el ajuste al camino y guardar puntos como una traza -\n + • Marcadores del mapa totalmente rediseñados con líneas guía y planificación de rutas +\n +\n • La herramienta de medición de distancias permite el ajuste al camino y guardar puntos como una traza +\n \n • OSM Live: corrección de errores, nuevos datos en el servidor cada 30 minutos, actualizaciones implementadas en la navegación \n \n @@ -2820,21 +2820,21 @@ Proporciona un código completo Modo de pantalla completa Mostrar en la barra superior Descartar marcador - Cantidad de dígitos + Número de dígitos decimales Derecha Izquierda Mostrar teclado numérico Pegar - Cambiar automáticamente al campo siguiente al ingresar %1$d dígitos después del punto decimal. + Cambiar automáticamente al campo siguiente al ingresar %1$d dígitos decimales. %1$d dígitos Ir al campo siguiente Renombrar marcador - Elige los puntos de referencia de la traza que se añadirán a los marcadores. - Elige el grupo de favoritos que desea agregar a los marcadores. Se muestran sólo trazas con puntos de referencia + Elige una traza y sus puntos de referencia se añadirán a los marcadores. (Sólo se listan las trazas con puntos de referencia.) + Elige una categoría de favoritos para añadir a los marcadores. Puntos de referencia de la traza - Grupo de favoritos - Añadir grupo - Puedes añadir un grupo de favoritos o puntos de referencia de la traza. + Categoría de favoritos + Añadir un grupo + Puedes importar grupos desde favoritos o puntos de referencia de la traza. ¡Crea marcadores del mapa! Haz una pulsación corta o larga sobre los lugares, luego pulsa la bandera del marcador. Importar grupos From 316ca13bd31ff335b05413a14198c0c2a633fe59 Mon Sep 17 00:00:00 2001 From: Supaplex Date: Sat, 18 Nov 2017 15:54:32 +0000 Subject: [PATCH 077/157] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3315 of 3315 strings) --- OsmAnd/res/values-zh-rTW/phrases.xml | 153 ++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index a246ab87fe..c5bc9eecad 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -2418,8 +2418,8 @@ 防波堤 "歷史時期:村民 (新時代 I, II, 西元前 1580 年 – 西元 133 年)" 歷史時期:城市(新時代 III,西元 133 年 - 西元 374 年) - 類型 - 類型 + 燃料類型 + 燃料類型 (avia) 支付型式 燃料卡 附加 @@ -3530,4 +3530,151 @@ 操作狀態 供水類型 水淨化 - + 水體通行 + +峽谷 + 走廊 + 山區 + + 粘土 + 格子花呢 + 人工草坪 + DecoTurf + 金屬網格 + + 位置:地下 + 位置:水下 + 位置:地上 + 位置:高架 + 位置:屋頂 + 位置:屋頂上 + 位置:戶外 + 位置:室內 + 位置:平台 + 位置:涼亭 + 位置:橋樑 + 位置:牆 + 位置:入口 + + 能見度:房子 + 能見度:街道 + 能見度:區域 + + 開放 + 關閉 + 受限制 + 毀損 + 需要維修 + + 水體耐用度:耐用 + 水體耐用度:緊急 + + + + 反滲透 + Aquatabs + + 水井 + 水管 + 自來水 + + 炮眼 + 運水車 + 水塔 + 瓶裝水 + + 社區 + 家庭 + 多個家庭 + + 插座:CEE 藍色 + 插座:CEE 藍色:電流 + 插座:CEE 藍色:輸出 + 插座:CEE 紅色 16A + 插座:CEE 紅色:電流 + 插座:CEE 紅色 16A:輸出 + 插座:CEE 紅色 32A + 插座:CEE 紅色 32A:電流 + 插座:CEE 紅色 32A:輸出 + 插座:CEE 紅色 64A + 插座:CEE 紅色 64A:電流 + 插座:CEE 紅色 64A:輸出 + 插座:CEE 紅色 125A + 插座:CEE 紅色 125A:電流 + 插座:CEE 紅色 125A:輸出 + 插座:種類 1 + 插座:種類 1:電流 + 插座:種類 1:輸出 + 插座:種類 1 二合一 + 插座:種類 1 二合一:電流 + 插座:種類 1 二合一:輸出 + 插座:種類 2 + 插座:種類 2:電流 + 插座:種類 2:輸出 + 插座:種類 2 二合一 + 插座:種類 2 二合一:電流 + 插座:種類 2 二合一:輸出 + 插座:種類 3 + 插座:種類 3:電流 + 插座:種類 3:輸出 + 插座:CHAdeMO + 插座:CHAdeMO:電流 + 插座:CHAdeMO:輸出 + 插座:特斯拉標準 + 插座:特斯拉標準:電流 + 插座:特斯拉標準:輸出 + 插座:特斯拉超級充電器 + 插座:特斯拉超級充電器:電流 + 插座:特斯拉超級充電器:輸出 + 插座:特斯拉 Roadster + 插座:特斯拉 Roadster:電流 + 插座:特斯拉 Roadster:輸出 + 插座:NEMA 5-15R + 插座:NEMA 5-15R:電流 + 插座:NEMA 5-15R:輸出 + 插座:NEMA 5-20 + 插座:NEMA 5-20:電流 + 插座:NEMA 5-20:輸出 + 插座:NEMA 14-30 + 插座:NEMA 14-30:電流 + 插座:NEMA 14-30:輸出 + 插座:NEMA 14-50 + NEMA 14-50:電流 + NEMA 14-50:輸出 + 插座:Schuko + 插座:Schuko:電流 + 插座:Schuko:輸出 + 插座:BS 1363 + 插座:BS 1363:電流 + 插座:BS 1363:輸出 + 插座:AS/NZS 3112 + 插座:AS/NZS 3112:電流 + 插座:AS/NZS 3112:輸出 + + 汽車:是 + 汽車:否 + 單車:是 + 單車:否 + 摩托車:是 + 摩托車:否 + 貨車:是 + 貨車:否 + + 停車費用:是 + 停車費用:否 + 停車費用 + + 安培 + 充電站輸出 + + 地圖類型:拓撲 + 地圖類型:街道 + 地圖類型:大略 + 地圖類型:高處圖 + 地圖大小:地點 + 地圖大小:城市 + 地圖大小:區域 + + 充電站 + + From 484caa99ca6148654638da9abd93be83959bf92b Mon Sep 17 00:00:00 2001 From: njohnston Date: Sat, 18 Nov 2017 16:33:03 +0000 Subject: [PATCH 078/157] Add missing British English (en-rGB) phrases --- OsmAnd/res/values-en-rGB/phrases.xml | 2 ++ OsmAnd/res/values-en-rGB/strings.xml | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-en-rGB/phrases.xml b/OsmAnd/res/values-en-rGB/phrases.xml index 8f4b37ada4..e1867d5d8a 100644 --- a/OsmAnd/res/values-en-rGB/phrases.xml +++ b/OsmAnd/res/values-en-rGB/phrases.xml @@ -5,6 +5,8 @@ This file is manually maintained in res/values-en-rGB and should ONLY contain strings where a different spelling should be used for English as used in the United Kingdom --> + Bookshop + Football Shop Filling station Waste disposal diff --git a/OsmAnd/res/values-en-rGB/strings.xml b/OsmAnd/res/values-en-rGB/strings.xml index dafd934dfc..dc3d8bdf24 100644 --- a/OsmAnd/res/values-en-rGB/strings.xml +++ b/OsmAnd/res/values-en-rGB/strings.xml @@ -4,6 +4,18 @@ This file is manually maintained in res/values-en-rGB and should ONLY contain strings where a different spelling should be used for English as used in the United Kingdom --> + Select a Favourite category to add to the markers. + Favourites category + You can import groups from favourites or track waypoints. + You can import favourite groups or track waypoints as markers. + Add Favourites + Add favourites on the map or import them from a file. + can be imported as Favourites points, or as track file. + Import as Favourites + Search favourites + Favourite information + Save as group of favourites + Add favourite Change colour Colour scheme towards @@ -62,5 +74,15 @@ Tapping the action button will add a destination at the screen centre location. Tapping the action button will replace the destination with the screen centre location. Tapping the action button will add a first intermediate point at the screen centre location. + Tapping the action button will add a parking place at the screen centre location. + Tapping the action button will add an OSM note at the screen centre location. + Tapping the action button will add a POI at the screen centre location. + Tapping the action button will add a map marker at the screen centre location. + Tapping the action button will add a GPX waypoint at the screen centre location. + Tapping the action button will show or hide the favourite points on the map. + Show/hide favourites + Show Favourites + Hide Favourites + Select the category to save the favourite in. Analyse on map - \ No newline at end of file + From e4b27f64e306d51f040503eb166d020ed03014e6 Mon Sep 17 00:00:00 2001 From: njohnston Date: Sat, 18 Nov 2017 16:34:45 +0000 Subject: [PATCH 079/157] Fix a typo in GPX waypoint quick action message --- 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 15b8daa3e6..1ada3ea758 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -2733,7 +2733,7 @@ Show favorites dialog Name preset Tapping the action button will add a map marker at the screen center location. - Tapping the action button will add a GPX waypiont at the screen center location. + Tapping the action button will add a GPX waypoint at the screen center location. Tapping the action button will add an audio note at the screen center location. Tapping the action button will add a video note at the screen center location. Tapping the action button will add a photo note at the screen center location. From 94e09a8eddf697f925c071682f507467f411eeb0 Mon Sep 17 00:00:00 2001 From: josep constanti Date: Sat, 18 Nov 2017 20:57:56 +0000 Subject: [PATCH 080/157] Translated using Weblate (Catalan) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-ca/strings.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index 6552679f1f..91f5365ef5 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -2638,7 +2638,7 @@ Abasta l\'àrea: %1$s x %2$s S\'ha afegit la data Ordena segons: Seleccioneu com indicar la distància i direcció vers els marcadors de mapa a la pantalla del mapa: - Mostra la línia guia + Mostra les línies guia Mostra fletxes sobre el mapa Mostra ja passat Amaga ja passat @@ -2667,10 +2667,10 @@ Abasta l\'àrea: %1$s x %2$s S\'ha produït una excepció: la nota no s\'ha modificat Modifica nota Modifica nota d\'OSM - \\022 Marcadors revisats totalment amb orientacions i planificació de la ruta -\n -\n • Eina de mesura de distàncies amb capacitat per resseguir les vies i desar els punts com una traça -\n + \\022 Marcadors revisats totalment amb orientacions i planificació de la ruta +\n +\n • Eina de mesura de distàncies amb capacitat per resseguir les vies i desar els punts com una traça +\n \n • OsmAnd Live: correcció d\'errors, actualització de dades al servidor cada 30 minuts, implementació d\'actualitzacions durant la navegació \n \n @@ -2694,22 +2694,22 @@ Abasta l\'àrea: %1$s x %2$s Mode de pantalla completa Mostra a la barra superior Marca com passat - Nombre de dígits + Nombre de dígits decimals Dreta Esquerra Mostra el teclat numèric Enganxa - Canvia automàticament al següent camp després d\'introduïr %1$d dígits decimals. + Canvia automàticament al següent camp després d\'introduir %1$d dígits decimals. %1$d dígits Vés al camp següent Reanomena el marcador Aparença al mapa - Seleccioneu les fites de la traça que OsmAnd afegirà als marcadors - Seleccioneu el grup preferit que voleu afegir als marcadors. Només es mostren traces amb fites + Seleccioneu una traça per afegir les seves fites als marcadors. (Només es llisten les traces amb fites). + Seleccioneu una categoria preferida per afegir-la als marcadors. Fites de la traça - Grup de preferits + Categoria de preferits Afegeix un grup - Podeu afegir un grup de preferits o fites de la traça. + Podeu importar grups des de preferits o des de fites d\'una traça. Creeu marcadors de mapa! Premeu més o menys temps sobre els llocs i després el botó tipus bandera del marcador. Importa grups From f34d6798f1adc9674c554b03ef93f28d29e50e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ja=C5=ADhien?= Date: Sat, 18 Nov 2017 12:08:51 +0000 Subject: [PATCH 081/157] Translated using Weblate (Belarusian) Currently translated at 99.6% (2494 of 2502 strings) --- OsmAnd/res/values-be/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 57ae5dcdc0..728b285d6b 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -2954,7 +2954,7 @@ Шляхавыя кропкі Група ўлюбёных Дадаць групу - Вы можаце дадаць групу ўлюбёных ці шляхавыя кропкі. + Вы можаце імпартаваць групы з улюбёных ці шляхавых кропак. Стварыце маркеры мапы! Дакраніцеся месца і потым націсніце кнопку маркера. Імпартаваць групы From 81f9ff66b9caa80cba4ab68c2e2987677849c9ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ja=C5=ADhien?= Date: Sat, 18 Nov 2017 12:10:00 +0000 Subject: [PATCH 082/157] Translated using Weblate (Belarusian (latin)) Currently translated at 99.5% (2491 of 2502 strings) --- OsmAnd/res/values-be-rBY/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml index 6be3d6cb67..d5609a3de4 100644 --- a/OsmAnd/res/values-be-rBY/strings.xml +++ b/OsmAnd/res/values-be-rBY/strings.xml @@ -2896,7 +2896,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Šliachavyja kropki Hrupa ŭlubionych Dadać hrupu - Vy možacie dadać hrupu ŭlubionych ci šlachavyja kropki. + Vy možacie impartavać hrupy z ulubionych ci šlachavych kropak. Markiery na mapie! Adznačyć miesca na mapie dotykam. Impartavać hrupy From b1d930d7a18dfc3eee68158935aa4386f6b78b0a Mon Sep 17 00:00:00 2001 From: Supaplex Date: Sat, 18 Nov 2017 15:53:38 +0000 Subject: [PATCH 083/157] Translated using Weblate (Chinese (Traditional)) Currently translated at 99.8% (2498 of 2502 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index b47d8308c1..7a06ea55c8 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -2926,7 +2926,7 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 在頂列上顯示 已經過標記 重新命名標記 - 數位量 + 小數位數 右方 左方 顯示數字鍵盤 @@ -2935,12 +2935,12 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 %1$d 個數字 到下一段 顯現在地圖上 - 選擇 OsmAnd 將哪個軌跡航點增加到標記 - 選擇您想增加標記的我的收藏群組。我們只顯示軌跡跟航點 + 選擇將哪個軌跡航點增加到標記 (只有軌跡的航點才會列出) + 選擇您想增加標記的收藏類別。 軌跡航點 - 我的收藏群組 + 我的收藏類別 新增群組 - 您可以增加一個我的收藏群組或軌跡航點。 + 您可以匯入一個我的收藏群組或軌跡航點。 建立地圖標記! 長按或點一下地點,然後點擊標記標誌按鈕。 匯入群組 From 57e1bed377bd83a35f5a31b134105abce3c40ffe Mon Sep 17 00:00:00 2001 From: jan madsen Date: Sat, 18 Nov 2017 13:21:53 +0000 Subject: [PATCH 084/157] Translated using Weblate (Danish) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-da/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 0bb3803f6b..351f68678d 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -2885,7 +2885,7 @@ Repræsenterer område: %1$s x %2$s stigende Dato tilføjet Sorter efter: - Vis vejledningslinje + Vis vejledningslinjer Vis pile på kortet Vis passeret Skjul passeret @@ -2942,12 +2942,12 @@ Repræsenterer område: %1$s x %2$s Vis på topbjælken Marker som passeret Omdøb markør - Antal cifre + Antal decimaler Højre Venstre Vis numerisk tastatur Indsæt - Skift automatisk til det næste felt efter indtastning af %1$d cifre efter decimaltegnet. + Skift automatisk til det næste felt efter indtastning af %1$d decimaler. %1$d cifre Gå til næste felt To @@ -2956,12 +2956,12 @@ Repræsenterer område: %1$s x %2$s Viser en eller to pile der angiver retningen til de aktive markører. Vælg hvordan afstanden til de aktive markører skal vises. Vælg hvor mange retningsindikatorer der vises. - Vælg et spor af rutepunkter, som skal tilføjes til markører - Vælg favoritgruppe, der skal tilføjes markører. Viser kun spor med rutepunkter + Vælg et spor for at tilføje dets rutepunkter til markører (Kun spor med rutepunkter er angivet.) + Vælg favoritkategori, der skal tilføjes markører. Spor af rutepunkter - Favoritgruppe - Tilføj gruppe - Tilføjer en gruppe af favoritter eller et spor af rutepunkter. + Favoritkategorier + Tilføj en gruppe + Importer grupper fra favoritter eller et spor af rutepunkter. Opret kortmarkører! Lange eller korte tryk steder, og tryk derefter på markør flag knappen. Importer grupper From 6f62f5018ee5d5bd6ecaad5b0d1c497e3ec6b76d Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sat, 18 Nov 2017 12:51:46 +0000 Subject: [PATCH 085/157] Translated using Weblate (French) Currently translated at 99.8% (2497 of 2502 strings) --- OsmAnd/res/values-fr/strings.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 169efaa159..6134712e0b 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -2971,11 +2971,11 @@ représentant la zone : %1$s x %2$s Boucle Vous devez ajouter au minimum une marque pour utiliser cette fonction. Route - \\022 Refonte complète des marques sur la carte avec indications de directions et planification d\'itinéraire -\n -\n • Outil de mesure de distance permettant un alignement sur la route et un enregistrement des points comme trace -\n -\n • OsmAnd Live: corrections de bugs, actualisation des données toutes les 30 minutes, prises en compte des mises à jour dans la navigation + \\022 Refonte complète des marques sur la carte avec indications de directions et planification d\'itinéraire +\n +\n • Outil de mesure de distance permettant un alignement sur la route et un enregistrement des points comme trace +\n +\n • OsmAnd Live : corrections de bugs, actualisation des données toutes les 30 minutes, prises en compte des mises à jour dans la navigation \n \n Format incorrect @@ -2993,21 +2993,21 @@ représentant la zone : %1$s x %2$s Afficher dans la barre supérieure Marquer comme visité Renommer la marque - Nombre de chiffres + Nombre de chiffres décimaux Droite Gauche Afficher le pavé numérique Coller - Aller automatiquement au champ suivant après avoir saisi %1$d chiffres après la virgule. + Passer automatiquement au champ suivant après avoir saisi %1$d chiffres après la virgule. %1$d chiffres Aller au champ suivant Apparence sur la carte - Sélectionnez des points de passage qu\'OsmAnd ajoutera aux marques - Sélectionnez les groupes de favoris à ajouter aux marques. Seules les traces avec points de passage sont affichées + Sélectionnez une trace afin d\'ajouter ses points de passage comme marques (seules les traces avec points de passage figurent dans la liste). + Sélectionnez une catégorie de favoris à ajouter aux marques. Points de passage - Groupe de favoris + Catégorie de favoris Ajouter un groupe - Vous pouvez ajouter un groupe de favoris ou des points de passage. + Vous pouvez importer des groupes depuis les favoris ou les points de passage. Ajoutez des marques sur la carte ! Sélectionnez des emplacements sur la carte puis appuyez sur le drapeau de marque. Importer des groupes From fda94d098e0d0799bb73d9ee1022ad537f094d88 Mon Sep 17 00:00:00 2001 From: iman Date: Sat, 18 Nov 2017 13:10:21 +0000 Subject: [PATCH 086/157] Translated using Weblate (Persian) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-fa/strings.xml | 58 ++++++++++++++++---------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 0d3ec3c08e..03c8d460da 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -188,7 +188,7 @@ برای ویدئو از ضبط‌کنندهٔ خود دستگاه استفاده کن. بازکردن پخش‌کنندهٔ خارجی موجود نیست - اندازه‌گیری فاصله + اندازه‌گیری مسافت بخش‌ها نشان‌دادن جهت مقصد مسیری وجود ندارد @@ -514,7 +514,7 @@ افزودن به‌عنوان اولین مقصد میانی افزودن به‌عنوان آخرین مقصد میانی افزودن به‌عنوان اولین مقصد میانی - مقصد میانی %1$s با نزدیک‌ترین جاده فاصلهٔ زیادی دارد. + مقصد میانی %1$s از نزدیک‌ترین جاده خیلی دور است. به مقصد میانی خود رسیده‌اید افزودن به‌عنوان مقصد میانی نقطهٔ بین‌راهی GPX، ‏«{0}»، افزوده شد @@ -678,8 +678,8 @@ ویرایش نقشهٔ OSM مسیر جاری را همین الآن روی کارت حافظه ذخیره کن. ذخیرهٔ مسیر GPX جاری - فاصلهٔ زمانی ثبت داده‌ها در هنگام راهبری - مشخص کنید فاصلهٔ زمانی ورود داده‌ها برای ضبط مسیر در هنگام راهبری چقدر باشد. + بازهٔ زمانی ثبت داده‌ها در هنگام راهبری + مشخص کنید در هنگام راهبری بازهٔ زمانی ورود داده‌ها برای ضبط مسیر چقدر باشد. هنگام راهبری، مسیر GPX به‌صورت خودکار ضبط می‌شود و در پوشهٔ مسیرها (tracks) ذخیره می‌گردد. تنظیمات لازم برای ارتباط با (OpenStreetMap.org (OSM را مشخص کنید. @@ -827,7 +827,7 @@ نقشه قبلاً نصب شده است، تنظیمات به‌روز خواهد شد. برای این عملیات ارتباط اینترنتی لازم است ولی اکنون وجود ندارد. نصب بیشتر… - حداقل زوم برای استفاده از نقشه‌های بُرداری. + کمترین زوم برای استفاده از نقشه‌های بُرداری. در هنگام جست‌وجوی آفلاین خطایی رخ داد. @@ -958,7 +958,7 @@ \nتنها می‌توانید نقشه‌های ازپیش‌بارگیری‌شده را ببینید و نمی‌توانید از اینترنت دانلود کنید. سرویس راهبری OsmAnd بازهٔ بیدارباش سرویس پس‌زمینه را تنظیم کنید. - فاصلهٔ زمانی بیدارباش GPS + بازهٔ زمانی بیدارباش GPS مشخص کنید سرویس پس‌زمینه اطلاعات مکانی را چگونه دریافت کند. ارائه‌دهندهٔ موقعیت برنامهٔ OsmAnd در پس‌زمینه اجرا می‌ماند تا در زمانی‌که صفحه خاموش است موقعیت شما را ردگیری کند. @@ -1180,7 +1180,7 @@ شفافیت نقشهٔ پایه را تغییر دهید. شفافیت نقشهٔ پایه نقشه‌ها (کاشی) را برای نصب یا به‌روزرسانی انتخاب کنید. - حداقل سطح زوم بُرداری + کمترین سطح زوم بُرداری نشانی جغرافیایی \'%s\' قابل‌تجزیه نیست. @@ -1251,12 +1251,12 @@ انقضا (به دقیقه): %1$s قابل‌دانلود: %1$s حداکثر زوم: %1$s - حداقل زوم: %1$s + کمترین زوم: %1$s داده‌های کاشی: %1$s منبع کاشی %1$s ذخیره شد حداکثر زوم انقضا (به دقیقه) - حداقل زوم + کمترین زوم انتخاب از بین موارد موجود… تعریف/ویرایش… منطقهٔ رانندگی @@ -1619,9 +1619,9 @@ نمایش سطح جاده نمایش مسیرهای دوچرخه بازهٔ زمانی برای ضبط مسیر را انتخاب کنید (که از طریق ابزارک ضبط جی‌پی‌ایکس روی نقشه فعال می‌شود). - فاصلهٔ زمانی برای ورود داده‌ها + بازهٔ زمانی ورود داده‌ها (سراسری) می‌توانید ثبت موقعیت در فایل GPX را با استفاده از ابزارک ضبط GPX روی صفحهٔ نقشه، خاموش یا روشن کنید. - فاصلهٔ زمانی ورود + بازهٔ زمانی ثبت با این افزونه می‌توانید همهٔ مسیرهایتان را ضبط و در قالب فایل GPX ذخیره کنید؛ چه آن مسیرهایی که خودتان می‌روید و چه مسیرهایی که با مسیریابی خواهید پیمود. برای این منظور ابزارک ضبط جی‌پی‌ایکس را بر روی صفحهٔ نقشه لمس کنید. \n \nمی‌توانید مسیرهای ضبط‌شده را با دوستان یا برای استفاده در مشارکت‌های OSM به‌اشتراک بگذارید. ورزشکاران می‌توانند برای کنترل تمرین‌هایشان از مسیرهای ضبط‌شده استفاده کنند. برنامهٔ OsmAnd آنالیزهای ساده‌ای مانند مدت مسیر، سرعت متوسط و... را انجام می‌دهد و البته می‌توانید این مسیرها را در سایر نرم‌افزارهای تحلیلگر نیز آنالیز کنید. @@ -2034,7 +2034,7 @@ اعلام هوشمند خودکار فقط اگر جهتم از سمت نقطهٔ مقصد منحرف شد، اعلام کن. بازهٔ زمانی اعلام خودکار - حداقل فاصلهٔ زمانی بین تکرار پیام‌ها. + کمترین فاصله بین اعلام پیام‌ها. رنگ پیش‌فرض انتخاب دسته نام @@ -2183,7 +2183,7 @@ اطلاعاتی وجود ندارد رنگ‌بندی منحنی‌های تراز کمترین سرعت برای ورود به سیستم - حداقل دقت برای ثبت + کمترین دقت برای ثبت نقطهٔ POI کریسمس پیش‌بینی کریسمس و تعطیلات سال نو. برای نمایش POIهای مرتبط با کریسمس: درخت کریسمس، فروشگاه‌ها و غیره. آیا POIهای مربوط به کریسمس نمایش داده شود؟ @@ -2206,7 +2206,7 @@ نام فایل GPX: مشاهده بر روی نقشه پس از ذخیره‌شدن نقشه را بپیمایید و نقاط را اضافه کنید - اندازه‌گیری فاصله + اندازه‌گیری مسافت ادامه/مکث راهبری نمایش پیغام پایان‌یافتن راهبری شروع/اتمام راهبری @@ -2598,7 +2598,7 @@ فرستادن به سابقه گروه بعد از راه‌اندازی مجدد حذف می‌شود نزولی - فاصله تا نشانه‌ها و جهت‌گیری به‌سمت آن‌ها چگونه روی نقشه نشان داده شود: + مسافت تا نشانه‌ها و جهت‌گیری به‌سمت آن‌ها چگونه روی نقشه نشان داده شود: آستانهٔ تغییر جهت نقشه مشخص کنید که در چه سرعتی جهت نقشه از «در جهت حرکت» به «در جهت قطب‌نما» تغییر کند. همهٔ نشانه‌های نقشه به سابقه منتقل شد @@ -2696,14 +2696,14 @@ می‌توانید ویرایش‌های OSM خود را به‌صورت ناشناس یا با نام کاربری سایت OpenStreetMap.org آپلود کنید. خروجی %1$d را بگیرید و بروید در نوار اعلان دستگاه یک اعلان نشان می‌دهد که بتوانید ضبط سفر را شروع کنید. - فیلتر: حداقل سرعتی که یک نقطه باید داشته باشد تا ثبت شود. - فیلتر: حداقل فاصله‌ای که یک نقطه باید از موقعیت قبلی داشته باشد تا ثبت شود. - فیلتر: حداقل دقتی که یک نقطه باید داشته باشد تا ثبت شود. + فیلتر: کمترین سرعتی که یک نقطه باید داشته باشد تا ثبت شود. + فیلتر: کمترین مسافتی که یک نقطه باید از موقعیت قبلی داشته باشد تا ثبت شود. + فیلتر: کمترین دقتی که یک نقطه باید داشته باشد تا ثبت شود. پیداکردن پارکینگ افزودن بازهٔ زمانی خنثی‌کردن همه قطعه‌کردن ضبط‌ها پس از وقفه - حداقل جابه‌جایی برای ثبت + کمترین جابه‌جایی برای ثبت نویسه‌گردانی نام‌ها مدت کلیپ صدا @@ -2759,7 +2759,7 @@ برای مشاهده مسیری را وارد کنید یا ضبط کنید. واردکردن مسیر ورود فوری مختصات - نمایش خط راهنما + نمایش خطوط راهنما به نمایشش روی نقشه ادامه بده ذخیره به‌عنوان نقاط مسیر نقطهٔ مسیر @@ -2791,9 +2791,9 @@ نمایش جست‌وجوی موروثی جست‌وجوی موروثی را به منو اضافه می‌کند. نقشه • نقاط محبوب (POI یا Points of interest) اطرافتان را نشان می‌دهد • نقشه را در راستای حرکتتان (یا قطب‌نما) تنظیم می‌کند • موقعیتتان یا جایی را که جست‌وجو کرده‌اید، نشانتان می‌دهد • موقعیتتان را با دوستانتان به‌اشتراک بگذارید تا شما را پیدا کنند • جاهایی را که دوست دارید در قسمت نقاط برگزیده ذخیره کنید • شیوهٔ نمایش نام‌های روی نقشه را انتخاب کنید: انگلیسی، محلی یا نویسه‌گردانی‌شده • نمایش نقشه‌های تخصصی آنلاین، تصاویر ماهواره‌ای (بینگ) و رولایه‌های مختلف مانند مسیرهای گردشگردی یا راهبری GPX با امکان تنظیم شفافیت - • نشانه‌های نقشه ضمن اضافه‌شدن قابلیت‌های خطوط راهنما و طرح‌ریزی مسیر به‌صورت کامل بازسازی شد + • نشانه‌های نقشه را به‌صورت کامل بازسازی کردیم و قابلیت‌های خطوط راهنما و طرح‌ریزی مسیر نیز به آن افزوده شد \n -\n • قابلیت چسبیدن به جاده و ذخیره‌کردن نقاط به‌عنوان مسیر، به ابزار اندازه‌گیری فاصله اضافه شد +\n • قابلیت چسبیدن به جاده و ذخیره‌کردن نقاط به‌عنوان مسیر، به ابزار مسافت‌سنج اضافه شد \n \n • به‌روزرسانی پویا (OsmAnd Live): رفع ایرادات - داده‌های سرور هر ۳۰ دقیقه به‌روز می‌شود - به‌روزرسانی‌ها در مسیریابی استفاده می‌شود \n @@ -2933,27 +2933,27 @@ در نوار بالا نشان بده از این عبور کردم تغییر نام نشانه - تعداد ارقام + تعداد رقم‌های اعشاری راست چپ نمایش صفحه‌کلید عددی الصاق - با واردکردن %1$d رقم پس از ممیز، خانۀ بعدی به‌صورت خودکار فعال شود. + با واردکردن %1$d رقم اعشار، خانۀ بعدی به‌صورت خودکار فعال شود. %1$d رقم پرش خودکار به خانهٔ بعدی دو یک - نمایش خطوط راهنما از موقعیت شما به‌سوی نشانه‌های فعال. + نمایش خطوط راهنما از موقعیت شما به‌سمت نشانه‌های فعال. نمایش سمت قرارگیری نشانه‌های فعال روی نقشه با یک یا دو پیکان. - مشخص کنید که فاصلهٔ شما تا نشانه‌های فعال چگونه نشان داده شود. + مشخص کنید که مسافت شما تا نشانه‌های فعال چگونه نشان داده شود. مشخص کنید چند پیکانِ جهت‌نما نشان داده شود. ظاهر بر روی نقشه - نقاط بین‌راهی موردنظرتان را انتخاب کنید تا به نشانه‌ها اضافه شوند - گروه موردنظرتان از نقاط برگزیده را انتخاب کنید تا به نشانه‌ها اضافه شود. فقط مسیرهای دارای نقطهٔ بین‌راهی نشان داده می‌شود. + مسیری را انتخاب کنید تا نقاط بین‌راهیِ آن به نشانه‌ها اضافه شود. (فقط مسیرهای دارای نقطهٔ بین‌راهی فهرست شده‌اند.) + یک گروه از نقاط برگزیده را انتخاب کنید تا به نشانه‌ها اضافه شود. نقاط بین‌راهی مسیر گروه نقاط برگزیده افزودن گروه - می‌توانید گروهی از نقاط برگزیده یا نقاط بین‌راهی را اضافه کنید. + می‌توانید گروهی از نقاط برگزیده یا نقاط بین‌راهی را وارد کنید. روی نقشه نشانه‌گذاری کنید! مکان‌ها به‌صورت کوتاه یا طولانی لمس کنید و سپس دکمهٔ پرچم را بزنید. واردکردن گروه‌ها From 78973f190fbc4c9f1d2bef7dca5a854a34eb4b3a Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Sat, 18 Nov 2017 13:23:21 +0000 Subject: [PATCH 087/157] Translated using Weblate (Russian) Currently translated at 91.2% (2284 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index f23cd46d81..8967ff1c68 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1746,7 +1746,7 @@ Редактировать группу Вам необходимо интернет соединение для установки этого плагина. Включить - Выключить + Отключить Получить Лыжные карты Морские карты @@ -2596,7 +2596,7 @@ Полноэкранный режим Отметить пройденным Файл %1$s не содержит путевых точек, импортировать его как трек? - Выбрать трек путевых точек, которые OsmAnd добавит в маркеры + Выберите трек, чтобы добавить свои путевые точки к маркерам. (Отображаются только треки с путевыми точками). Трек путевых точек \@string/shared_string_history Направо From 6b5827e2c72ecb634579f72e4468f82df458a463 Mon Sep 17 00:00:00 2001 From: Roberto GEB Date: Sat, 18 Nov 2017 16:51:38 +0000 Subject: [PATCH 088/157] Translated using Weblate (Spanish) Currently translated at 99.6% (2493 of 2502 strings) --- OsmAnd/res/values-es/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 6b09d18f2d..0bb9eb3b25 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -2764,8 +2764,8 @@ Por favor proporciona un código completo Ir al campo siguiente Renombrar marcador Apariencia en el mapa - Selecciona los puntos de referencia de la traza que OsmAnd añadirá a los marcadores. - Selecciona el grupo de favoritos que quieres añadir a los marcadores. + Selecciona una traza para añadir sus puntos de referencia a los marcadores. (Sólo se muestran las trazas con puntos de referencia) + Selecciona un grupo de favoritos para añadirlos a marcadores. Puntos de referencia de traza Grupo de favoritos Añadir grupo @@ -2782,5 +2782,6 @@ Por favor proporciona un código completo Elige cómo mostrar la distancia hasta los marcadores activos. Elige cuántos indicadores de dirección se muestran. Más - + + Buscando trazas con puntos de referencia From b73aa969a79cda6d74279812900ba63c32e573cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Ny=C4=8Da?= Date: Sat, 18 Nov 2017 16:45:55 +0000 Subject: [PATCH 089/157] Translated using Weblate (Upper Sorbian) Currently translated at 51.7% (1296 of 2502 strings) --- OsmAnd/res/values-b+hsb/strings.xml | 103 +++++++++++++++++++++++----- 1 file changed, 86 insertions(+), 17 deletions(-) diff --git a/OsmAnd/res/values-b+hsb/strings.xml b/OsmAnd/res/values-b+hsb/strings.xml index ff713d749e..1f352c7bbd 100644 --- a/OsmAnd/res/values-b+hsb/strings.xml +++ b/OsmAnd/res/values-b+hsb/strings.xml @@ -169,25 +169,25 @@ Islandšćina Bishnupriya Navajo - Iršćina - Łaćonšćina - Kurdišćina - Tamilšćina + iršćina + łaćonšćina + kurdišćina + tamilšćina Malayalam - Luxemburgšćina - Osetšćina + luxemburgšćina + osetšćina Esperanto - Španišćina (Argentinska) - Norwegska knihowna rěč + španišćina (Argentinska) + norwegska knižna rěč Volapük - Thailandšćina + thailandšćina Telugu - Norwegšćina (Nynorsk) + norwegšćina (Nynorsk) Newar / Nepal Bhasa - Malajišćina - Haitišćina - Galicišćina - Estišćina + malajišćina + haitišćina + galicišćina + estišćina Cebuano Cyły zapis čitać (online) Wikipedija @@ -198,7 +198,7 @@ Wopis pokazać. Karty sćahnyć Witajće - Waše změny + Twoje změny Potom wopytać Do toho wopytać Časte prašenja, aktualne změny a druhe. @@ -895,8 +895,8 @@ Legenda karty Tuchwilna čara Poziciju chorhojčki změnić - Španišćina (Amerika) - Asturišćina + španišćina (Amerika) + asturišćina Jendźelšćina (Zjednoćene kralestwo) Běłorušćina (łaćonsce) Kannadašćina @@ -1252,4 +1252,73 @@ Tuchwilnu čaru pokazać Schadźenje/chowanje słónca Přidatki + Wjace + Kategorija faworitow + Skupinu přidać + Skupiny importować + Dwaj + Jedyn + naprawo + nalěwo + Chorhojčku přemjenować + Jako GPX-dataju importować + Jako faworit importować + Dataju importować + Wobhladać + Wopačny format + Dróha + Čara je so wobličiła + Dyrbiš znajmjeńša jednu chorhojčku dodać, zo by móhł(a) tutu funkciju wužić. + Systemowu tastaturu wužiwać + Lodowe puće a brody wobeńć + Lodowe puće a brody wobeńć. + Twoje stejišćo jako prěni dypk zapodać, zo by čaru planował(a). + Wotzamknyć + Čaru planować + Koordinaty zapodać + Skupiny + Filter składować + Filter wotstronić + Nowy filter + Njewobmjezowane sćehnjenje kartow, aktualizacijow a zapiski Wikipedije. + Moje stejišćo namakać + Aktualizacije njepokazać + Chceš nětko aktualizować wšitke karty? + Sy sej wěsty/a, zo chceš narunać faworit %1$s? + Pytanje koordinatow + Pokročene pytanje koordinatow + Wróćo k pytanju + Kategorije + Póstowe čisło + wot + wokrjes + štwórć + Pytać + Noticu wutworić + Notica je so wuspěšnje wutworiła + Zmylk je so stał: notica njeje so wutworiła + Ćmowožołte + hornjoserbšćina + kabylšćina + berberšćina + Chceš přidatne daty z Wikipedije sćahnyć (%1$s MB)? + Eksterny skład + Kopěrować + Po mjenach filtrować + Mjeno za pytanje zapodać + Nětko wočinić + Wobdźěłać + Městna + Pytać + Zdźělenka + Mjeno skupiny dyrbjało měć znajmjeńša tři pismiki! + h + mjeńš + wyše + Šěr %1$s +\nDołh %2$s + Dalše akcije + akuratnosć + Mjeno GPX-dataje + Wobdźěłanje zahajić From 5105805e068a3127d25dd950ad0dd271d1289c94 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 18 Nov 2017 23:38:26 +0200 Subject: [PATCH 090/157] Do not add header without notes; extract code to method --- .../osmand/plus/audionotes/NotesFragment.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 5e8c5f76db..ea3b620e38 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -30,7 +30,7 @@ import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.OsmandSettings; +import net.osmand.plus.OsmandSettings.NotesSortByMode; import net.osmand.plus.R; import net.osmand.plus.activities.ActionBarProgressActivity; import net.osmand.plus.activities.MapActivity; @@ -178,39 +178,39 @@ public class NotesFragment extends OsmAndListFragment { private List createItemsList() { List recs = new LinkedList<>(plugin.getAllRecordings()); List res = new LinkedList<>(); - OsmandSettings settings = getMyApplication().getSettings(); - if (settings.NOTES_SORT_BY_MODE.get().isByDate()) { - res.add(NotesAdapter.TYPE_DATE_HEADER); - res.addAll(sortItemsByDateDescending(recs)); - } else if (settings.NOTES_SORT_BY_MODE.get().isByType()) { - List audios = new LinkedList<>(); - List photos = new LinkedList<>(); - List videos = new LinkedList<>(); - for (Recording rec : recs) { - if (rec.isAudio()) { - audios.add(rec); - } else if (rec.isPhoto()) { - photos.add(rec); - } else { - videos.add(rec); + if (!recs.isEmpty()) { + NotesSortByMode sortByMode = getMyApplication().getSettings().NOTES_SORT_BY_MODE.get(); + if (sortByMode.isByDate()) { + res.add(NotesAdapter.TYPE_DATE_HEADER); + res.addAll(sortItemsByDateDescending(recs)); + } else if (sortByMode.isByType()) { + List audios = new LinkedList<>(); + List photos = new LinkedList<>(); + List videos = new LinkedList<>(); + for (Recording rec : recs) { + if (rec.isAudio()) { + audios.add(rec); + } else if (rec.isPhoto()) { + photos.add(rec); + } else { + videos.add(rec); + } } - } - if (!audios.isEmpty()) { - res.add(NotesAdapter.TYPE_AUDIO_HEADER); - res.addAll(audios); - } - if (!photos.isEmpty()) { - res.add(NotesAdapter.TYPE_PHOTO_HEADER); - res.addAll(photos); - } - if (!videos.isEmpty()) { - res.add(NotesAdapter.TYPE_VIDEO_HEADER); - res.addAll(videos); + addToResIfNotEmpty(res, audios, NotesAdapter.TYPE_AUDIO_HEADER); + addToResIfNotEmpty(res, photos, NotesAdapter.TYPE_PHOTO_HEADER); + addToResIfNotEmpty(res, videos, NotesAdapter.TYPE_VIDEO_HEADER); } } return res; } + private void addToResIfNotEmpty(List res, List recs, int header) { + if (!recs.isEmpty()) { + res.add(header); + res.addAll(recs); + } + } + private NotesAdapterListener createAdapterListener() { return new NotesAdapterListener() { From 849384a04553e20c27b8a1a2e5b352d2155e9f66 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 19 Nov 2017 00:12:04 +0200 Subject: [PATCH 091/157] Add empty view --- OsmAnd/res/layout/update_index.xml | 5 +++++ .../src/net/osmand/plus/audionotes/NotesFragment.java | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/OsmAnd/res/layout/update_index.xml b/OsmAnd/res/layout/update_index.xml index 4553c67375..a09d3a14ff 100644 --- a/OsmAnd/res/layout/update_index.xml +++ b/OsmAnd/res/layout/update_index.xml @@ -36,4 +36,9 @@ android:layout_marginRight="0dp" android:layout_marginTop="0dp" android:layout_weight="1"/> +` + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index ea3b620e38..d8f8c04944 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -18,9 +18,11 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewStub; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.EditText; +import android.widget.ImageView; import android.widget.ListView; import android.widget.Toast; @@ -69,6 +71,7 @@ public class NotesFragment extends OsmAndListFragment { private Set selected = new HashSet<>(); private View footerView; + private View emptyView; private boolean selectionMode; @@ -92,6 +95,12 @@ public class NotesFragment extends OsmAndListFragment { View view = getActivity().getLayoutInflater().inflate(R.layout.update_index, container, false); view.findViewById(R.id.header_layout).setVisibility(View.GONE); + ViewStub emptyStub = (ViewStub) view.findViewById(R.id.empty_view_stub); + emptyStub.setLayoutResource(R.layout.empty_state_av_notes); + emptyView = emptyStub.inflate(); + int icRes = getMyApplication().getSettings().isLightContent() + ? R.drawable.ic_empty_state_av_notes_day : R.drawable.ic_empty_state_av_notes_night; + ((ImageView) emptyView.findViewById(R.id.empty_state_image_view)).setImageResource(icRes); return view; } @@ -109,6 +118,7 @@ public class NotesFragment extends OsmAndListFragment { List items = createItemsList(); ListView listView = getListView(); listView.setDivider(null); + listView.setEmptyView(emptyView); if (items.size() > 0 && footerView == null) { footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, null, false); listView.addFooterView(footerView); From ba9485a4c8973b0cf4082c1167446f67fe29715f Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Sun, 19 Nov 2017 00:02:20 +0000 Subject: [PATCH 092/157] Translated using Weblate (Sardinian) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-sc/strings.xml | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 1eef73450a..bdf04e0d38 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -2785,7 +2785,7 @@ Pro praghere iscrie su còdighe intreu Issèbera comente indicare sa distàntzia e sa diretzione a sos marcadores in sa mapa: Ùrtimu impreu: %1$s Ativa - Ammustra sa lìnia de ghia + Ammustra sas lìnias de ghia Ammustra sas fritzas in sa mapa Ammustra sos colados Istichi sos colados @@ -2819,10 +2819,10 @@ Pro praghere iscrie su còdighe intreu Àndala torrada a calculare Àndala tzirculare Depes annànghere a su mancu unu marcadore pro impreare custa funtzionalidade. - \\022 Marcadores de mapa noos cun lìnias de ghia e càlculu de s\'àndala -\n -\n • Aina pro sa medidura de sas distàntzias chi permitit de ischertare puntos particulares de sa mapa e de sarvare puntos comente una rasta -\n + \\022 Marcadores de mapa noos cun lìnias de ghia e càlculu de s\'àndala +\n +\n • Aina pro sa medidura de sas distàntzias chi permitit de ischertare puntos particulares de sa mapa e de sarvare puntos comente una rasta +\n \n • OsmAnd Live: curretzione de errores, agiornamentu de sos datos in su server cada 30 minutos, agiornamentos impostados in su mentres de su nàvigu \n \n @@ -2841,24 +2841,24 @@ Pro praghere iscrie su còdighe intreu Modalidade a ischermu intreu Ammustra in sa barra superiore Sinna comente coladu - Nùmeru de tzifras + Nùmeru de tzifras detzimales Destra Manca Ammustra tecladu numèricu Incolla - Cola automaticamente a su campu imbeniente a pustis de àere iscritu %1$d tzifras a pustis de sa vìrgula. + Cola automaticamente a su campu imbeniente a pustis de àere iscritu %1$d tzifras detzimales. %1$d tzifras Cola a su campu imbeniente Torra a numenare su marcadore Visualizatzione in sa mapa - Issèbera sos puntos de coladòrgiu chi OsmAnd at a annànghere a sos marcadores - Issèbera sos grupos de preferidos chi cheres annànghere a sos marcadores. + Issèbera una rasta pro annànghere sos puntos de coladòrgiu suos a sos marcadores (petzi sas rastas cun puntos de coladòrgiu sunt allistadas) + Issèbera una categoria de preferidos pro l\'annànghere a sos marcadores. Puntos de coladòrgiu - Grupu de preferidos - Annanghe grupu - Podes annànghere unu grupu de preferidos o puntos de coladòrgiu de una rasta. - Marcadores in sa mapa! - Marca logos in sa mapa cun un\'incarcu. + Categoria de preferidos + Annanghe unu grupu + Podes importare unu grupu de preferidos o puntos de coladòrgiu de una rasta. + Crea marcadores in sa mapa! + Marca logos in sa mapa cun un\'incarcu curtzu o longu e, a pustis, incarchende su butone cun sa bandera de sos marcadores. Importa grupos Podes importare grupos de preferidos o puntos de coladòrgiu de una rasta comente marcadores. \@string/shared_string_history @@ -2870,4 +2870,5 @@ Pro praghere iscrie su còdighe intreu Issèbera comente ammustrare sa distàntzia cun sos marcadores ativos. Issèbera cantos indicadores de diretzione cheres ammustrare. Àteru + Chirchende rastas cun puntos de coladòrgiu From 178b0b6f30fc6a0b6b840ce0fef6e6ec8bff8480 Mon Sep 17 00:00:00 2001 From: Hardy Date: Sun, 19 Nov 2017 10:49:12 +0100 Subject: [PATCH 093/157] string improvement --- 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 1ada3ea758..143cd7e007 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -82,7 +82,7 @@ Export your markers to a file you can specify here: Save as track Move to history - Group will be removed after restart + Group will be removed after the next app restart. Show guide lines Show arrows on the map Show passed From 9aada834e8beedc67a203294aaf9ac4c48985930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Ny=C4=8Da?= Date: Sun, 19 Nov 2017 11:59:25 +0000 Subject: [PATCH 094/157] Translated using Weblate (Upper Sorbian) Currently translated at 55.0% (1825 of 3315 strings) --- OsmAnd/res/values-b+hsb/phrases.xml | 390 +++++++++++++++++++++++++++- 1 file changed, 389 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-b+hsb/phrases.xml b/OsmAnd/res/values-b+hsb/phrases.xml index eedd0edb69..41dca8e31d 100644 --- a/OsmAnd/res/values-b+hsb/phrases.xml +++ b/OsmAnd/res/values-b+hsb/phrases.xml @@ -428,7 +428,7 @@ Kanu: haj Kanu: ně -typ +typ ćěriwa typ typ typ @@ -1574,4 +1574,392 @@ lětanišćo helipad přizemišćo + kurjenje + k sobuwzaću + cocktaile + mikropiwarnja + wohnišćo + stany + płokawa + haćidło na puću + wobchodźik + pasta + sportowe wuhotowanje + grat a sudobjo + tekstilije + hrajki + swětłownja + + wupožčenje kolesow + powjaznica + tunl + móst + + błyšćak + křižowanišćo + pozastarnja + + studnja + wodočisćernja + wodarnja + spušćadło + nasyp + młyn + mola + přepinarnja + milinarnja + milinowy generator + póšta + listowy kašćik + telefon + wobkedźowanska wěža + zwóńca + chłódźenska wěža + recycling + + kontejner + škleńca + papjera + drasty + tyzki + škleńčane bleše + plastika + šrot + baterije + plastikowe bleše + zelene wotpadki + nowiny + papjerc + drjewo + knihi + črije + aluminij + organiske + zahrodkowe wotpadki + kow + elektriske nastroje + kuchinski wolij + motorowy wolij + plastikowe titki + mobilne telefony + ličaki + wobruče + migracija + nowinska redakcija + dawkowe poradźowanje + + sportowa čara + běhanišćo + kolesowanska čara + jěchanišćo + prokanje + ameriski football + awstralski football + baseball + basketball + bičwolejbul + BMX + kanadiski football + kanu + šach + łaženje + cricket + kolesowanje + nurjenje + scuba-nurjenje + psyče wubědźowanje + pólny hokej + lodohokej + golf + gymnastika + mjetańca + hokej + konjace wubědźowanje + smykanje + lětanski płachtak + płachtakowanje + třělenje + skateboard + sněhakowanje + kopańca + surfowanje + płuwanje + blidotenis + tenis + wuměłska twórba + karusel + Cyrkej Chrysta + Zjednoćena cyrkej Chrysta + sněhakowanski resort + psyči + łakańca + přistaw + marina + minigolf + wodowy park + nawjes + fast food + pitna woda + gril + + kobjeler + čołmotwarc + knihiwjazar + přestrjencar + časnikar + krawc + debjenkar + zamkar + fotograf + fotografiski labor + gipsowar + klampnar + hornčer + třěchikryjer + sedłar + rězak + róštytwarc + sochar + šewc + kamjenjećesar + saznik + krawc + kachlicar + blacharnik + polstrowar + pohrjebne předewzaće + manikira + frizer + masaže + tattoownja + płokarnja + wupožčenje awtow + nuzniki + kurjenski wobłuk + ćěłownja + internetownja + + bankomat + płaćenski terminal + zastawnja + měnjernja + knihiwjednik + zachod prózdnjeńcy + krater + kótleško + rěčne prohi + kedźbyhódny kamjeń + kap + rif + włóžna kónčina + lěs + přirodny rezerwat + přeliw + kupa + kupka + + kótwišćo + přistawnišćo + přistaw + wojerske pasmo + wojerske lětanišćo + strašne pasmo + wojerski běrow + namórniska baza + nuklearne testowanišćo + + arabska Wikipedija + bołharska Wikipedija + katalanska Wikipedija + danska Wikipedija + grjekska Wikipedija + estiska Wikipedija + španiska Wikipedija + finska Wikipedija + francoska Wikipedija + galiciska Wikipedija + hebrejska Wikipedija + hindiska Wikipedija + chorwatska Wikipedija + haitiska Wikipedija + madźarska Wikipedija + indoneska Wikipedija + italska Wikipedija + japanska Wikipedija + korejska Wikipedija + litawska Wikipedija + letiska Wikipedija + malajska Wikipedija + newarska Wikipedija + nižozemska Wikipedija + norwegska (Nynorsk) Wikipedija + norwegska Wikipedija + pólska Wikipedija + portugalska Wikipedija + rumunska Wikipedija + ruska Wikipedija + słowakska Wikipedija + słowjenska Wikipedija + serbiska Wikipedija + šwedska Wikipedija + swahilska Wikipedija + teluguska Wikipedija + thailandska Wikipedija + turkowska Wikipedija + ukrainska Wikipedija + vietnamska Wikipedija + Volapük Wikipedija + chinska Wikipedija + afrikaanska Wikipedija + elsaska Wikipedija + azerbajdźanska Wikipedija + bengalska Wikipedija + bretonska Wikipedija + bosniska Wikipedija + waliziska Wikipedija + esperantorěčna Wikipedija + baskiska Wikipedija + persiska Wikipedija + friziska Wikipedija + irska Wikipedija + armenska Wikipedija + islandska Wikipedija + georgiska Wikipedija + kurdiska Wikipedija + łaćonska Wikipedija + luxemburgska Wikipedija + makedonska Wikipedija + delnjoněmska Wikipedija + osetiska Wikipedija + sardiska Wikipedija + serbskochorwatska Wikipedija + albanska Wikipedija + tamilska Wikipedija + filipinska Wikipedija + kazachiska Wikipedija + uzbekska Wikipedija + čečenska Wikipedija + okcitanska Wikipedija + tatarska Wikipedija + kirgiska Wikipedija + kantonska Wikipedija + tadźikiska Wikipedija + baškirska Wikipedija + čuwašiska Wikipedija + lombardiska Wikipedija + burmaska Wikipedija + aragonska Wikipedija + nepalska Wikipedija + gudźaratska Wikipedija + sicilska Wikipedija + bayerska Wikipedija + mongolska Wikipedija + neapolitanska Wikipedija + + maksimalna wysokosć + maksimalna waha + suchi čas + dešćowy čas + přistup po dowolenju + přistup za kupcow + přistup za dodawanje + přistup za ratarstwo + + wobsah: silaža + wobsah: jił + wobsah: hnojiwa + wobsah: wotwody + wobsah: biomasa + wobsah: wotwody + wobsah: žito + wobsah: pica + wobsah: žito + + winowatostne + zwučene + móžne + + podzemske + mandl + kokosowe palmy + datle + měšćanske + wjesne + + žana klumpa + haj + + pućnik + tafla + běrow + značka + trawnišćo + lochko + kapacita kabiny/woza + přerězny pućowanski čas + přistup w lěću: jenož nutř + přistup w lěću: jenož won + přistup w lěću: nutř a won + + 1 (turist) + 2 (standard) + 3 (komfort) + 4 (prěnja klasa) + 5 (luksus) + 50 centow, 1 euro, 2 euraj + Geldkarte + Geldkarte so njeakceptuje + wegetariske + jenož wegetariske + wegetariske + ničo wegetariskeho + wegan + jenož wegan + wegan + ničo weganeho + bjez glutena + jenož bjez glutena + bjez glutena + ničo bjez glutena + košer + jenož košer + košer + košer: ně + bjez laktozy + jenož bjez laktozy + bjez laktozy + ničo bjez laktozy + mjeno piwarnje + wonka sedźeć: na dworje + + wikowar + přistup k nuznikam: dowoleny + rumnosć za měnjenje pjelchow + + časowe wobmjezowanje za parkowanje + + parkowanske bilety + pica za zwěrjata + architektura: renesansa + struktura mosta: drjewjany + čisćenje + čisćenje kolesow: ně + wopomnišćo + + seniorojo + musikal + komedija + defibrillator + defibrillator: haj + + ciwilizacija: starogrjekska + ciwilizacija: romska + ciwilizacija: bycantinska (285–1453) + ciwilizacija: staroegyptowska (do 332 do.Chr.) + ciwilizacija: dakiska + historiska perioda: klasiska grjeska (5. do 4. ls. do. Chr.) + historiska perioda: druha persiska doba + čisło mosta + čisło tunla + From c957f4d335c82699d828d268e9f2b005484d40cd Mon Sep 17 00:00:00 2001 From: ezjerry liao Date: Sun, 19 Nov 2017 08:01:18 +0000 Subject: [PATCH 095/157] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 7a06ea55c8..000ecbab88 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -2935,12 +2935,12 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 %1$d 個數字 到下一段 顯現在地圖上 - 選擇將哪個軌跡航點增加到標記 (只有軌跡的航點才會列出) + 選擇一個軌跡將航點增加到標記 (只有軌跡的航點才會列出) 選擇您想增加標記的收藏類別。 軌跡航點 我的收藏類別 新增群組 - 您可以匯入一個我的收藏群組或軌跡航點。 + 您可以從我的收藏匯入群組或軌跡航點。 建立地圖標記! 長按或點一下地點,然後點擊標記標誌按鈕。 匯入群組 From 37b2b70b6569393a2493d0ec28236cfee48543b4 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Sat, 18 Nov 2017 22:38:50 +0000 Subject: [PATCH 096/157] Translated using Weblate (Esperanto) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-eo/strings.xml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 0d0770cde4..c531d6612f 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -2762,7 +2762,7 @@ Indikas lokon: %1$s x %2$s" Aldoni kurspunktojn Aldoni linion Aldoni kaj registri spurojn - Registri aŭ enporti spurojn por vidigi. + Registru aŭ enportu spurojn por vidigi. Aldoni ŝatatajn Aldonu ŝatatajn punktojn al la mapo aŭ enportu ilin el dosiero. Enporti spuron @@ -2799,7 +2799,7 @@ Indikas lokon: %1$s x %2$s" kreskante Dato de aldono Ordigi laŭ: - Montri gvidan linion + Montri gvid-liniojn Montri sagetojn sur la mapo Montri malaktivajn Kaŝi malaktivajn @@ -2828,7 +2828,7 @@ Indikas lokon: %1$s x %2$s" Eraro okazis: rimarko ne estis ŝanĝita Redakti rimarkon Redakti OSM-rimarkon - • Tute refaritaj map-markoj kun helpo pri planado de vojaĝo + • Tute refaritaj map-markoj kun gvid-linioj kaj planado de vojaĝo \n \n• Ilo por mezuri distancoj kun ebloj proksimumigi pozicion al vojo kaj konservi punktojn kiel kurson \n @@ -2856,23 +2856,23 @@ Indikas lokon: %1$s x %2$s" Montri en supra breto Marki pasigitajn Alinomi markon - Nombro da ciferoj + Nombro da dekumaj pozicioj Dekstre Maldekstre Montri nombran klavaron Englui - Aŭtomate baskuli al la sekva kampo post entajpi %1$d ciferojn post la komo. + Aŭtomate baskuli al la sekva kampo post entajpi %1$d dekumajn ciferojn. %1$d ciferoj Iri al la sekva kampo Aspekto sur la mapo - Elekti navigadpunktojn por aldoni al map-markoj - Elekti grupon de ŝatataj por aldoni al map-markoj. + Elektu kurson por aldoni ĝiajn navigadpunktojn al map-markoj. (Nur kursoj kun navigadpunktoj vidiĝas.) + Elektu grupon de ŝatataj por aldoni al map-markoj. Navigadpunktoj de kurso - Ŝatataro + Kategorio de ŝatataj Aldoni grupon - Vi povas aldoni grupon da ŝatataj aŭ navigadpunktojn de kurso. - Map-markoj! - Vi povas marki ejojn sur la mapo per frapeti. + Vi povas enporti grupon el ŝatataj aŭ navigadpunktoj de kurso. + Krei map-markoj! + Frapetu aŭ frapetadu ejojn kaj poste frapetu la butonon de flago. Enporti grupojn Vi povas enporti grupojn de ŝatataj aŭ kurs-navigadpunktojn kiel map-markojn. Markoj markitaj kiel pasigitajn montriĝos sur tiu ĉi ekrano. @@ -2882,4 +2882,6 @@ Indikas lokon: %1$s x %2$s" Vidigi unu aŭ du sagetojn indikantajn direkton al map-markoj. Elekti kiel vidigi distancon al aktivaj map-markoj. Elekti nombron da direkt-indikiloj por vidigi. + Serĉado de kursoj kun navigadpunktoj + Pli From aaad6ccdb7412cbc4e48b0ad9f8e36c1dffb6c71 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sat, 18 Nov 2017 22:11:24 +0000 Subject: [PATCH 097/157] Translated using Weblate (French) Currently translated at 99.8% (2497 of 2502 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 6134712e0b..02878abc46 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -46,7 +46,7 @@ Un fichier de favoris précédemment exporté existe déjà. Voulez-vous le remplacer ? Paramètres pour le profil Profil par défaut - Les paramètres d’affichage et de navigation sont mémorisés dans un profil. Créez votre profil par défaut ici. + Les paramètres d’affichage et de navigation sont mémorisés dans un profil. Définissez votre profil par défaut ici. Navigation @@ -2541,7 +2541,7 @@ Si vous appréciez OsmAnd et OSM et que vous souhaitez soutenir ces projets, c\' Déplacer le bouton Appui long pour déplacer le bouton sur l\'écran Appuyez sur le bouton d\'action pour ajouter une marque au centre de la carte. - Appuyez sur le bouton d\'action pour ajouter une étape GPX au centre de la carte. + Un appui sur le bouton d\'action ajoutera une étape GPX au centre de la carte. Appuyez sur le bouton d\'action pour ajouter une note Audio au centre de la carte. Appuyez sur le bouton d\'action pour ajouter une note Vidéo au centre de la carte. Appuyez sur le bouton d\'action pour ajouter une note Photo au centre de la carte. From e85b3cf43125ba7df0c0fbde89cb3685a838fec3 Mon Sep 17 00:00:00 2001 From: Hakuchi Date: Sun, 19 Nov 2017 11:40:11 +0000 Subject: [PATCH 098/157] Translated using Weblate (German) Currently translated at 98.0% (2454 of 2502 strings) --- OsmAnd/res/values-de/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index ad3e984c02..95cbe63e2a 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -2893,4 +2893,20 @@ Abgedeckte Fläche: %1$s x %2$s Rechts Links Einfügen + Suche nach Spuren mit Wegpunkten + Mehr + Darstellung auf der Karte + Favoriten Kategorie + Gruppe hinzufügen + Kartenmarkierungen erstellen! + Gruppen importieren + \@string/shared_string_history + Markierungen, die als passiert gekennzeichnet sind, werden auf diesem Bildschirm angezeigt. + Anzahl der Dezimalstellen + Nummernblock anzeigen + Automatisch in das nächste Feld wechseln nach der Eingabe von \" %1$d Dezimalstellen. + %1$d Ziffern + Zum nächsten Feld + Markierung umbenennen + Markierung passiert From e07c36c18e20d27ad37dedf829f36e3dfa033a74 Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Sun, 19 Nov 2017 11:34:52 +0000 Subject: [PATCH 099/157] Translated using Weblate (Italian) Currently translated at 95.2% (2384 of 2502 strings) --- OsmAnd/res/values-it/strings.xml | 55 +++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 07e9bdf9dd..43524013a7 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1429,7 +1429,7 @@ Memoria in proporzione %4$s MB (limite di Android %5$s MB, Dalvik %6$s MB).Orario attuale Salva come gruppo di preferiti Scegli le destinazioni - Sovrapposizione etichette PDI + Visualizza etichette PDI Mostra i pulsanti dello zoom Mostra i pulsanti dello zoom durante la navigazione. @@ -2599,24 +2599,41 @@ Rappresenta l\'area: %1$s x %2$s Divisione automatica delle registrazioni dopo un periodo Inizia un nuovo segmento dopo 6 minuti, una nuova traccia dopo 2 ore, o un nuovo file dopo un intervallo maggiore. Mostra contorni e punti in profondità. - "• Nuove funzionalità: Pulsante azione veloce + "\\022 Nuove funzionalità: Pulsante azione veloce +\n \n +\n \n • Migliorata la risposta del touch screen ai gesti (es. zoommare e allargare) \n +\n \n • Nuovi caratteri della mappa mappa per estendere la copertura di più lingue +\n \n +\n \n • Supporto TTS per le lingue locali (e accenti) +\n \n +\n \n • Miglioramento della visibilità in molti stili mappa e wikipedia +\n \n +\n \n • Supporto all\'Open Location Code (OLC) +\n \n +\n \n • Visualizzazione di un profilo altimetrico, pendenza, e velocità per i GPX registrati e percorsi calcolati +\n \n +\n \n • Impostazione e miglioramenti della logica dello \"Stile guida\" nella guida svolta per svolta in bicicletta +\n \n +\n \n • Molti altri miglioramenti e correzioni di errori +\n \n +\n \n e altro ancora…" Stile di guida @@ -2809,11 +2826,11 @@ Rappresenta l\'area: %1$s x %2$s Max/Min Min/Max Riprendi/sospendi la navigazione - • Componente aggiuntivo Mapillary con immagini stradali + \\022 Componente aggiuntivo Mapillary con immagini stradali \n \n • Widget righello per la misurazione della distanza \n -\n • Scelta degli intervalli delle tracce GPX con informazioni dettagliate sul tuo percorso +\n • Scelta degli intervalli delle tracce GPX con informazioni dettagliate sul tuo percorso \n \n • Altre migliorie e correzioni di errori \n @@ -2939,37 +2956,39 @@ Rappresenta l\'area: %1$s x %2$s Importa come file GPX Importa come Preferito Importa file - Un tap sulla mappa per modificare i pulsanti di controllo e i widgets. + Un tap sulla mappa per visualizzare o meno i pulsanti di controllo e i widgets. Modalità a schermo intero Mostra nella barra superiore Marcatore superato può essere importato come Luogo Preferito oppure come file traccia. Visualizzazione nella mappa - Scegli i punti intermedi della traccia che OsmAnd aggiungerà ai marcatori - Scegli quali gruppo di luoghi preferiti che OsmAnd aggiungerà ai marcatori + Scegli una traccia per aggiungere punti intermedi ai marcatori. (Saranno elencate solo tracce con punti intermedi.) + Scegli quale gruppo di luoghi preferiti da aggiungere ai marcatori. Punti intermedi della traccia Gruppo di luoghi preferiti - Aggiungi gruppo - Puoi aggiungere un gruppo di preferiti o i punti intermedi di una traccia. - Marcatori nella mappa! - Marca i luoghi sulla mappa tappando su di essi. + Aggiungi un gruppo + Puoi importare un gruppo dai preferiti o i punti intermedi di una traccia. + Crea i marcatori nella mappa! + Tap lungo o breve nel luogo, poi tappa il pulsante bandiera del marcatore. Importa gruppi Puoi importare, come marcatori, gruppi di luoghi preferiti o punti intermedi di tracce. \@string/shared_string_history - Marcatori indicati come superati appariranno su questa schermata. + Marcatori indicati come passati appariranno su questa schermata. Due Uno - Una linea di collegamento fra la tua posizione e le posizioni dei marcatori attivi verrà visualizzata sulla mappa. - Una o due frecce, indicanti la direzione verso i marcatori attivi, verranno visualizzate sulla mappa. - Scegli come vorresti visualizzare la distanza verso marcatori attivi. - Scegli quante indicazioni di direzione vuoi vedere. - Numero di cifre + Una linea-guida fra la tua posizione e le posizioni dei marcatori attivi verrà visualizzata sulla mappa. + Visualizza una o due frecce, indicanti la direzione verso i marcatori attivi. + Scegli come visualizzare la distanza verso marcatori attivi. + Scegli quante indicazioni di direzione sono visualizzate. + Numero di cifre decimali Destra Sinistra Mostra la tastiera numerica Incolla - Spostati automaticamente nel campo successivo dopo l\'immissione di %1$d cifre dopo il punto decimale + Spostati automaticamente nel campo successivo dopo l\'immissione di %1$d cifre decimali. %1$d cifre Vai al campo successivo Rinomina il marcatore + Cerco tracce con punti intermedi + Altro From f1f5b8756293cd53e939959c535f28f5f26ad243 Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Sun, 19 Nov 2017 10:48:22 +0000 Subject: [PATCH 100/157] Translated using Weblate (Japanese) Currently translated at 87.9% (2200 of 2502 strings) --- OsmAnd/res/values-ja/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 6677985623..ef90de7144 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -3060,4 +3060,9 @@ OsmAndとOSMをサポートする方法として現状最適な方法である 移動時間 最大/最小 最小/最大 + 経由地点のある経路を探す + もっと見る + マップの外観 + マーカーに経由地点を追加する経路を選択します。(経由地点を含む経路のみリストアップされます) + マーカーに追加するお気に入りのカテゴリを選択します。 From 17d0887ad04293a513ec9ddc6bb39873c00b2e62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Sok=C3=B3=C5=82?= Date: Sun, 19 Nov 2017 06:34:33 +0000 Subject: [PATCH 101/157] Translated using Weblate (Polish) Currently translated at 90.1% (2256 of 2502 strings) --- OsmAnd/res/values-pl/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index e150d71f3a..645c2a1335 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -2929,4 +2929,5 @@ Reprezentuje obszar: %1$s x %2$s Przechodzi automatycznie do następnego pola po wprowadzeniu %1$d cyfr za przecinkiem. %1$d cyfr Przechodzenie do następnego pola + Tryb pełnego ekranu From 128774acee302f385184b22a5103bfd0c628c521 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Sun, 19 Nov 2017 07:33:40 +0000 Subject: [PATCH 102/157] Translated using Weblate (Russian) Currently translated at 92.7% (2320 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 84 +++++++++++++++++++------------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 8967ff1c68..0b0a866fc6 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -251,14 +251,14 @@ Низкое качество Высокое качество Качество видео - Выберите качество видео + Выберите качество видео. Подтвердить Поиск адреса - Пожалуйста, укажите корректный тип POI из списка, или оставьте его пустым + Пожалуйста, укажите корректный тип POI или оставьте его пустым. Формат аудио - Выберите формат аудио + Выберите формат аудио. Битрейт аудио - Выберите битрейт аудио + Выберите битрейт аудио. Скрыть Адрес не определён Около @@ -431,7 +431,7 @@ Общие настройки Общие настройки приложения Недостаточно места на диске для загрузки %1$s MB (свободно: %2$s). - Загрузить {0} файл(ов)? Необходимо {1} Мб на постоянной основе. В настоящее время доступно {2} Мб свободного места. + Скачать {0} файл (ов)? Используется {1} Мб. (Свободного места - {2} Мб.) Прозрачная тема Нативная библиотека не поддерживается на этом устройстве. Инициализация нативной библиотеки… @@ -1425,7 +1425,11 @@ Поделиться маршрутом используя файл GPX Ключ доступа Настройка параметров мониторинга и установка персонального канала мониторинга - "Плагин обеспечивает функциональность для расширенного живого мониторинга OsMo, см. http://osmo.mobi.\n\nОн позволяет отслеживать другие устройства и отслеживаться самому. Вы можете создавать анонимные группы, делиться друг с другом местоположением и общаться. Возможны различные варианты опций для отслеживания сессии или постоянного слежения.\n\nАнонимные группы создаются для указанного количества дней и ограниченным функционалом, то есть нет дистанционного управления и нет администратора группы. Полностью функциональные группы, с другой стороны, могут быть созданы на веб-сайте и только зарегистрированные пользователи имеют к ним доступ. " + Этот плагин предоставляет некоторые функциональные возможности для мониторинга OpenStreetMap см. https://osmo.mobi +\n +\nВы можете отслеживать все устройства, включенные в группу в режиме реального времени. Вы также можете увидеть точки и маршруты, загруженные в вашу группу. +\n +\nЧтобы группа не была удалена после нескольких месяцев, необходимо привести ее в соответствие с правилами, с которыми вы создаете группы на сайте OsMo.mobi OpenStreetMap Мониторинг OsMo Неправильный формат: %s @@ -1772,7 +1776,7 @@ Выбрать все Очистить Сохранить - Сохранить как GPX трек + Сохранить как новый GPX трек Переименовать Удалить Удалить все @@ -1825,7 +1829,7 @@ Плоский список Широта %1$s Долгота %2$s - Часто задаваемые вопросы, последние изменения и другое + Часто задаваемые вопросы, последние изменения и другое. Моделировать ваше местоположение Свернуть Удалить действие @@ -1841,7 +1845,7 @@ Посетить до Туристическая карта просрочено - Укажите время задержки на экране планирования маршрута + Укажите время задержки на экране планирования маршрута. Задержка начала навигации… Поехали "Плагин расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта. @@ -1864,7 +1868,7 @@ Не использовать Адрес Горнолыжные маршруты - Показать описание + Показать описание. Места Поиск Открыто @@ -1894,8 +1898,8 @@ Перерасчет только начальной части маршрута для длительных поездок Удалить правки OSM Отключено - Раскраска в соответствии с легендой маршрута - Раскраска в соответствии с OSMC + Раскраска по сетевой принадлежности + Раскраска туристических меток по OSMC Передача местоположения Выход Европа - Нидерланды @@ -2009,11 +2013,11 @@ Показывать при запуске Вы уверены? Все несохраненные изменения будут потеряны. Продолжить? - Моделировать, используя рассчитанный маршрут или записанный GPX - Остановить моделирование + Моделировать вашу позицию, используя рассчитанный маршрут или записанный GPX. + Остановить моделирование своей позиции. Добавить новую Выберите категорию - Выберите единицы измерения скорости + Выберите единицы измерения скорости. Единицы измерения скорости Морские мили Километр в час @@ -2059,14 +2063,14 @@ Поделиться местоположением Отправить Выберите, где вы хотите хранить файлы карт и другие данные. - \"Отключено\" непосредственно запускает экран карты + \"Отключено\" непосредственно запускает экран карты. Карта загружена QR-код - Перейти к карте + Показать карту Базовая карта мира (покрывающая весь мир при малом увеличении) отсутствует или устарела. Пожалуйста, загрузите базовую карту мира для полноты рабочего окружения. - Карта %1$s загружена. Вернитесь к карте, чтобы начать её использовать. + Карта %1$s была загружена, теперь вы можете начать её использовать. Имитировать первый запуск - Устанавливает признак первого запуска приложения, не изменяет других настроек + Устанавливает признак первого запуска приложения, не изменяет других настроек. Опрос Связаться с нами Версии @@ -2101,7 +2105,7 @@ Вы действительно хотите сохранить POI без указания типа? Расстояние: Время: - Кнопка меню открывает домашнюю страницу + Кнопка меню открывает домашнюю страницу, а не меню. Доступ с карты Удалить точку GPX? Редактировать точку GPX @@ -2127,7 +2131,7 @@ Еженедельно Выберите месяц и страну Открыть повторно - Выберите дороги, которых следует избегать при навигации + Выберите дороги, которых следует избегать при навигации. ОТМЕНИТЬ ВСЁ Тип OSM правки отправлены через OsmAnd @@ -2136,12 +2140,12 @@ Количество правок Ночь Утро - Объём памяти, который может быть занят всеми видеоклипами + Объём памяти, который может быть занят всеми видеоклипами. Длина ролика - Продолжительность каждого записанного клипа не будет больше выбранного значения + Верхний предел продолжительности записанного клипа. Разбиение на клипы Использовать разбиение на клипы - Циклическая перезапись клипов при превышении заданного объема хранилища + Циклическая перезапись клипов при превышении заданного объема хранилища. Поменять местами пункт отправления и пункт назначения Удалить Подземные объекты @@ -2157,7 +2161,7 @@ Подписаться Не показывать мое имя в отчетах Стоимость в месяц - Ежемесячный платеж + Ежемесячный платеж. Пожалуйста, введите корректный адрес электронной почты Благодарим вас за подписку на автообновления! Параметры подписки @@ -2189,15 +2193,15 @@ Запись удалена элементы удалены Автообновления - Выберите или скачайте голосовое сопровождение для вашего языка + Выберите или скачайте голосовые оповещения для вашего языка. Полный отчет Пересчитать маршрут Имя пользователя и пароль OpenStreetMap Количество получателей Активные Неактивные - Часть вашего пожертвования будет направляться пользователям OpenStreetMap внесшим изменения в карту этого региона - Недостаточно места! Необходимо {3} Мб временно и {1} Мб на постоянной основе. В настоящее время доступно только {2} Мб свободного места. + Часть вашего пожертвования будет направляться пользователям OSM внесшим изменения в карту этого региона. + Недостаточно места! Необходимо {3} Мб временно и {1} Мб на постоянной основе. Свободного места - {2} Мб. Можно отправить заметку OSM анонимно или используя свой профиль OpenStreetMap.org. Загрузить OSM заметку Использовать меню @@ -2207,7 +2211,17 @@ Размер обновления Отчет для Приложение получило разрешение на запись во внешнее хранилище. Требуется перезагрузка приложения. - " • OSM Live. Поддержка авторов и разработчиков карт и получение почасовых обновлений карты.\n\n• Маркеры. Новый способ для быстрого выбора мест на карте.\n\n• Более подробные OSM карты со специфическими дорожными знаками стран и с большим количеством новых функций.\n\n• Улучшен внешний вид и подготовка маршрута.\n\n• Множество улучшений в контекстном меню карты таких как поиск адреса.\n\nИ многое другое... " + • OSM Live. Поддержка авторов и разработчиков карт и получение почасовых обновлений карты. +\n +\n• Маркеры. Новый способ для быстрого выбора мест на карте. +\n +\n• Более подробные OSM карты со специфическими дорожными знаками стран и с большим количеством новых функций. +\n +\n• Улучшен внешний вид и подготовка маршрута. +\n +\n• Множество улучшений в контекстном меню карты таких как поиск адреса. +\n +\nИ многое другое… Отчёт Переместить вверх Переместить вниз @@ -2222,7 +2236,7 @@ Путевых точек не найдено Вы хотите добавить маркеры для всех точек? Добавить к маркерам - Использовать маркеры на карте + Активирует функцию маркеров карты. Папка, выбранная для хранения данных, доступна только для чтения. Вместо нее временно будет использоваться внутренняя память. Пожалуйста, выберите подходящее хранилище. Общее хранилище Сортировать @@ -2301,7 +2315,7 @@ от Подписывайтесь на нас Она нужна нам, чтобы предоставить вам информацию о взносах - Действительно загрузить {0} файл (ов)? Для этого необходимо {3} Мб временно и {1} Мб на постоянной основе. В настоящее время существует {2} Мб свободного места. + Скачать {0} файл (ов)? Используется {3} Мб временной и {1} Мб постоянной памяти. (Свободного места - {2} Мб.) Найти мою позицию Прокладывайте маршруты и открывайте новые для себя места без подключения к интернету Разрешить доступ к местоположению @@ -2329,7 +2343,7 @@ Пожертвование для сообщества OpenStreetMap Часть вашего пожертвования будет отправлена пользователям OSM, вносящим изменения в OpenStreetMaps. Стоимость подписки при этом остаётся прежней. Подписка позволяет получать ежечасные, ежедневные, еженедельные обновления и неограниченные загрузки для всех карт по всему миру. - Файл GPX с координатами заметок + Файл GPX с координатами заметок. Астурийский Верхнелужицкий Белорусский (латиница) @@ -2572,8 +2586,8 @@ Введите новое имя Назад Внешний вид на карте - Выберите группу избранных, которую вы хотите добавить к маркерам. Мы показываем только треки с путевыми точками - Группа избранных + Выберите категорию избранных для добавления к маркерам. + Категория избранных Добавить группу Вы можете добавить группу из избранных или путевых точек. Создайте маркеры карт! @@ -2596,7 +2610,7 @@ Полноэкранный режим Отметить пройденным Файл %1$s не содержит путевых точек, импортировать его как трек? - Выберите трек, чтобы добавить свои путевые точки к маркерам. (Отображаются только треки с путевыми точками). + Выберите трек для добавления путевых точек к маркерам. (Показаны только треки с путевыми точками). Трек путевых точек \@string/shared_string_history Направо From cc8f0522516045f4fa49a496fc53f31ec616fe0e Mon Sep 17 00:00:00 2001 From: Roberto GEB Date: Sun, 19 Nov 2017 00:33:12 +0000 Subject: [PATCH 103/157] Translated using Weblate (Spanish) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es/strings.xml | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 0bb9eb3b25..8ce58a9c42 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -55,7 +55,7 @@ Ya existe un archivo anterior con favoritos exportados. ¿Quiere sustituirlo? Ajustes específicos por perfil Perfil predeterminado - Ajustes de la vista y navegación del mapa son recordados por perfil usado. Establezca su perfil predeterminado aquí. + Los ajustes de vista del mapa y de navegación se recuerdan por perfil de uso. Establece tu perfil predeterminado aquí. Navegación Opciones específicas para la navegación. Ajustes globales @@ -333,9 +333,9 @@ El espacio de almacenamiento usado es {1} MB. Modificar PDI Borrar PDI A la brújula - En dirección al movimiento - No rotar (norte arriba) - Selecciona la alineación del mapa. + A la dirección del movimiento + No rotar (norte está arriba) + Selecciona la alineación de la pantalla del mapa. Orientación del mapa Detalle de la ruta Favoritos importados correctamente @@ -2311,7 +2311,7 @@ El espacio de almacenamiento usado es {3} MB temporalmente y {1} MB permanenteme Mostrar diálogo de favoritos Nombre predefinido Pulsar el botón de acción agregará un marcador de mapa en la ubicación del centro de la pantalla. - Pulsar el botón de acción agregará un punto intermedio GPX en la ubicación del centro de la pantalla. + "Pulsar el botón de acción agregará un punto de referencia GPX en la ubicación del centro de la pantalla." Pulsar el botón de acción agregará una nota de audio en la ubicación del centro de la pantalla. Pulsar el botón de acción agregará una nota de video en la ubicación del centro de la pantalla. Pulsar el botón de acción agregará una nota de la foto en el lugar del centro de la pantalla. @@ -2693,7 +2693,7 @@ Por favor proporciona un código completo Este año Control Barra superior - Mostrar las directrices + Mostrar indicaciones Mostrar flechas en el mapa Mostrar descartados Ocultar descartados @@ -2733,13 +2733,13 @@ Por favor proporciona un código completo Ruta calculada Ruta circular Debes añadir al menos un marcador para usar esta función. - • Marcadores del mapa totalmente rediseñados con directrices y planificación de rutas + "• Marcadores del mapa totalmente rediseñados con indicaciones y planificación de rutas \n \n • La herramienta de medición de distancias permite el ajuste al camino y guardar puntos como una traza \n -\n • OSM Live: corrección de errores, nuevos datos en el servidor cada 30 minutos, actualizaciones implementadas en la navegación -\n -\n +\n • OSM Live: corrección de errores, nuevos datos en el servidor cada 30 minutos, actualizaciones implementadas en la navegación +\n +\n" Amarillo oscuro Entrada incorrecta Ingresar nombre nuevo @@ -2754,12 +2754,12 @@ Por favor proporciona un código completo Importar como archivo GPX Importar como Favoritos Importar archivo - Cantidad de dígitos + Número de dígitos decimales Derecha Izquierda Mostrar teclado numérico Pegar - Cambia automáticamente al campo siguiente después de escribir %1$d dígitos tras el punto decimal. + Cambia automáticamente al campo siguiente después de escribir %1$d dígitos decimales. %1$d dígitos Ir al campo siguiente Renombrar marcador @@ -2769,19 +2769,19 @@ Por favor proporciona un código completo Puntos de referencia de traza Grupo de favoritos Añadir grupo - Puedes añadir un grupo de favoritos o puntos de referencia de traza. - ¡Marcadores del mapa! - Marca lugares en el mapa con una pulsación. + Puedes importar grupos desde favoritos o puntos de referencia de traza. + ¡Crea marcadores de mapa! + Pulsa en lugares en el mapa y luego pulsa en el botón de bandera del marcador. Importar grupos Puedes importar grupos de favoritos o puntos de referencia de traza como marcadores. Los marcadores descartados aparecerán en esta pantalla. Dos Uno - Muestra indicaciones desde tu ubicación hasta la de los marcadores activos. + Muestra indicaciones desde tu ubicación hasta las posiciones de los marcadores activos. Muestra una o dos flechas indicando la dirección hacia los marcadores activos. Elige cómo mostrar la distancia hasta los marcadores activos. Elige cuántos indicadores de dirección se muestran. Más - + \@string/shared_string_history Buscando trazas con puntos de referencia From d2c055a947ca656b027e4fb3b675261eb9eddfbc Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sun, 19 Nov 2017 12:25:17 +0000 Subject: [PATCH 104/157] Translated using Weblate (French) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-fr/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 02878abc46..6f3818f599 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -333,7 +333,7 @@ Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade Téléphone Filtre Carte haute résolution - Utilisez des cartes de haute résolution pour les appareils les mieux équipés + Ne pas étirer (et rendre flou) les tuiles de carte sur les écrans haute résolution. Position inconnue Chercher un transport public @@ -378,7 +378,7 @@ Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade Favoris Notes OSM (en ligne) - Points d\'intérêt… + Sur-couche des points d\'intérêt… Carte en ligne… Couches Rechercher un Point d\'Intérêt @@ -567,8 +567,8 @@ Au-delà la navigation bascule automatiquement sur le service en ligne CloudMade Afficher l\'angle de vue Activer la vue 3D de la carte Vue 3D - Afficher les points d\'intérêt sur la carte (utiliser le dernier filtre) - Afficher point d\'intérêt + Afficher sur la carte la dernière sur-couche de points d\'intérêt sélectionnée. + Afficher la sur-couche points d\'intérêt Sélectionnez la source des cartes dites tuiles (en ligne ou en cache). Carte en ligne (tuiles) Source cartographique @@ -1466,7 +1466,7 @@ Mémoire proportionnelle %4$s Mo (limite Android %5$s Mo, Dalvik %6$s Mo).Chargement de %1$s… Enregistrer comme groupe de favoris Sélectionnez les étapes - Libellés de point + Libellés de la sur-couche des points d\'intérêt Destination Afficher les boutons de zoom pendant la navigation. Afficher les boutons de zoom @@ -2951,7 +2951,7 @@ représentant la zone : %1$s x %2$s Exporte vos marques dans un fichier portant le nom : Enregistrer comme trace Déplacer vers l\'historique - Le groupe sera supprimé au prochain démarrage + Le groupe sera supprimé au prochain démarrage de l\'application. Marques Format des coordonnées Utiliser le clavier système From 6f37964c5ccd5e3600196143521ff1bb55c88164 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Sun, 19 Nov 2017 00:02:30 +0000 Subject: [PATCH 105/157] Translated using Weblate (Sardinian) Currently translated at 100.0% (2502 of 2502 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 bdf04e0d38..b57e318c70 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -2807,7 +2807,7 @@ Pro praghere iscrie su còdighe intreu Esporta sos marcadores tuos in unu documentu chi podes dislindare inoghe: Sarva comente rasta Pone in sa cronologia - Su grupu at a èssere iscantzelladu a pustis de s\'allughìngiu imbeniente + Su grupu at a èssere iscantzelladu a pustis de s\'allughìngiu imbeniente de s\'aplicatzione. B\'est istadu un\'errore: sa nota no est istada modificada Modìfica sa nota Modìfica sa nota OSM From 982cc0a3f8fb6fb1b971ce2163fd017cbd5601af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ja=C5=ADhien?= Date: Sun, 19 Nov 2017 18:47:06 +0000 Subject: [PATCH 106/157] Translated using Weblate (Belarusian) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-be/strings.xml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 728b285d6b..85416e8a2b 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -2606,7 +2606,7 @@ Паказаць дыялёг улюбёных Назва перадусталёўкі Пры націсканні на кнопку дадасць маркер на мапу ў цэнтры экрана. - Пры націсканні на кнопку дадасць GPX-кропку на мапу ў цэнтры экрана. + Пры націску на кнопку дзеяньня дадасьць GPX-кропку на мапу ў цэнтры экрана. Пры націсканні на кнопку дадасць аўдыянататку на мапу ў цэнтры экрана. Пры націсканні на кнопку дадасць відэанататку на мапу ў цэнтры экрана. Пры націсканні на кнопку дадасць фотанататку на мапу ў цэнтры экрана. @@ -2885,7 +2885,7 @@ па ўзрастаньні Дата дадаваньня Сартаваць па: - Паказаць лінію кірунку + Паказаць лініі кірунку Паказаць стрэлкі на карце Паказаць пройдзеныя Схаваць пройдзеныя @@ -2900,7 +2900,7 @@ Экспартаваць вашы маркеры ў файл, які вы можаце пазначыць тут: Захаваць як сьлед Перамясьціць у гісторыю - Група будзе выдаленая пасьля перазапуску + Група будзе выдаленая пасьля наступнага пэразапуску праграмы. Маркеры Фармат каардынат Выкарыстоўваць сыстэмную клявіятуру @@ -2914,7 +2914,7 @@ Адбылося выключэньне: нататка не была зьмененая Зьмяніць нататку Зьмяніць OSM-нататку - • Цалкам перапрацаваныя маркеры з рэкамэндацыямі і плянаваньнем маршрута + • Цалкам перапрацаваныя маркеры з лініямі кірунку і плянаваньнем маршрута \n \n • Інструмэнт вымярэньня адлегласьцей з прывязкай да дарогі і з захаваньнем кропак у сьлед \n @@ -2941,18 +2941,18 @@ Поўныэкранны рэжым Паказаць на верхняй панэлі Адзначыць прайдзеныя - Колькасьць лічбаў + Колькасьць дзесятковых лічбаў Паказаць лічбавую панэль Уставіць - Аўтаматычна пераключыцца ў наступнае поле пасьля ўводу %1$d лічбаў пасьля дзесятковай кропкі. + Аўтаматычна пераключыцца ў наступнае поле пасьля ўводу %1$d дзесятковых лічбаў. %1$d лічбаў Парайсці ў наступнае поле Перайменаваць маркер Два Адзін - Абярыце ўлюблёную групу, якую вы хочаце дадаць да маркераў. Мы паказваем толькі сляды са шляхавымі кропкамі + Абярыце катэгорыю ўлюбёных, каб дадаць да маркераў. Шляхавыя кропкі - Група ўлюбёных + Катэгорыя ўлюбёных Дадаць групу Вы можаце імпартаваць групы з улюбёных ці шляхавых кропак. Стварыце маркеры мапы! @@ -2960,12 +2960,12 @@ Імпартаваць групы Вы можаце імпартаваць групы улюбёных ці шляхавыя кропкі як маркеры. Маркеры, пазначаныя як пройдзенныя, з\'явяцца на гэтым экране. - Паказвае кірунак ад вашага становішча да актыўнага маркера. + Адлюстроўвае лініі кірунку ад вашага становішча да актыўнага маркера. Адлюстроўвае адну ці дзьве стрэлкі, якія паказваюць кірунак да актыўных маркераў. Выберыце, як адлюстроўваць адлегласьць да актыўных маркераў. Выберыце, колькі індыкатараў накірунку будзе адлюстравана. Зьнешні выгляд на мапе - Абраць след шляхавых кропак, якія OsmAnd дадасць у маркеры + Абярыце трэк, каб дадаць шляхавые кропкі да маркераў. (Пералічаныя толькі трэкі з шляхавымі кропкамі.) \@string/shared_string_history Направа Налева From e7c52f994994091a781e7963184e7d3e94891230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ja=C5=ADhien?= Date: Sun, 19 Nov 2017 18:50:37 +0000 Subject: [PATCH 107/157] Translated using Weblate (Belarusian (latin)) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-be-rBY/strings.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml index d5609a3de4..3ede350d13 100644 --- a/OsmAnd/res/values-be-rBY/strings.xml +++ b/OsmAnd/res/values-be-rBY/strings.xml @@ -2702,7 +2702,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Pakazać dyjaloh ulubionych Nazva pieradustaloŭki Pry naciskanni na knopku dadasć markier na mapu ŭ centry ekrana. - Pry naciskanni na knopku dadasć GPX-kropku na mapu ŭ centry ekrana. + Pry nacisku na knopku dziejańnia dadaść GPX-kropku na mapu ŭ centry ekrana. Pry naciskanni na knopku dadasć aŭdyjanatatku na mapu ŭ centry ekrana. Pry naciskanni na knopku dadasć videanatatku na mapu ŭ centry ekrana. Pry naciskanni na knopku dadasć fotanatatku na mapu ŭ centry ekrana. @@ -2836,7 +2836,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd pa ŭzrastańni Data dadavańnia Sartavać pa: - Pakazać liniju kirunku + Pakazać linii kirunku Pakazać strełki na karcie Pakazać projdzienyja Schavać projdzienyja @@ -2851,7 +2851,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Ekspartavać vašy markiery ŭ fajl, jaki vy možacie paznačyć tut: Zachavać jak śled Pieramiaścić u historyju - Hrupa budzie vydalenaja paśla pierazapusku + Hrupa budzie vydalenaja paśla nastupnaha perazapusku prahramy. Markiery Farmat kaardynat Vykarystoŭvać systemnuju klavijaturu @@ -2865,7 +2865,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Adbyłosia vyklučeńnie: natatka nie była źmienienaja Źmianić natatku Źmianić OSM-natatku - • Całkam pierapracavanyja markiery z rekamendacyjami i płanavańniem maršruta + • Całkam pierapracavanyja markiery z linijami kirunku i planavańniem maršruta \n \n • Instrument vymiareńnia adlehłaściej z pryviazkaj da darohi i z zachavańniem kropak u śled \n @@ -2892,31 +2892,31 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Poŭnyekranny režym Pakazać na vierchniaj paneli Adznačyć prajdzienyja - Abiarycie ŭliublionuju hrupu, jakuju vy chočacie dadać da markieraŭ. My pakazvajem toĺki sliady sa šliachavymi kropkami + Abiarycie katehoryju ŭlubionych, kab dadać da markieraŭ. Šliachavyja kropki - Hrupa ŭlubionych + Katehoryja ŭlubionych Dadać hrupu Vy možacie impartavać hrupy z ulubionych ci šlachavych kropak. - Markiery na mapie! + Stvarycie markiery mapy! Adznačyć miesca na mapie dotykam. Impartavać hrupy Vy možacie impartavać hrupy ulubionych ci šlachavyja kropki jak markiery. Markiery, paznačanyja jak projdziennyja, z\'javiacca na hetym ekranie. Dva Adzin - Pakazvaje kirunak ad vašaha stanovišča da aktyŭnaha markiera. + Adlustoŭvaje linii kirunku ad vašaha stanovišča da aktyŭnaha markiera. Adlustroŭvaie adnu ci dzvie strełki, jakija pakazvajuć kirunak da aktyŭnych markieraŭ. Vybierycie, jak adlustroŭvać adlehłaść da aktyŭnych markieraŭ. Vybierycie, kolki indykataraŭ nakirunku budzie adlustravana. - Kolkaść ličbaŭ + Kolkaść dziesiatkovych ličbaŭ Pakazać ličbavuju paneĺ Ustavić - Aŭtamatyčna pieraklučycca ŭ nastupnaje pole paśla ŭvodu %1$d ličbaŭ paśla dziesiatkovaj kropki. + Aŭtamatyčna pieraklučycca ŭ nastupnaje pole paśla ŭvodu %1$ dziesiatkovych ličbaŭ. %1$d ličbaŭ Parajsci ŭ nastupnaje polie Pierajmienavać markier Źniešni vyhlad na mapie - Abrać slied šliachavych kropak, jakija OsmAnd dadasć u markiery + Abiarycie trek, kab dadać šlachavyja kropki da markieraŭ. (Pieraličanyja tolki treki z šlachavymi kropkami.) \@string/shared_string_history Naprava Nalieva From a12790fa35118c5ca723efa540f84540f4df2335 Mon Sep 17 00:00:00 2001 From: Viktar Vauchkevich Date: Sun, 19 Nov 2017 20:29:34 +0000 Subject: [PATCH 108/157] Translated using Weblate (Belarusian (latin)) Currently translated at 99.9% (2502 of 2502 strings) --- OsmAnd/res/values-be-rBY/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml index 3ede350d13..6d17b38540 100644 --- a/OsmAnd/res/values-be-rBY/strings.xml +++ b/OsmAnd/res/values-be-rBY/strings.xml @@ -2898,7 +2898,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Dadać hrupu Vy možacie impartavać hrupy z ulubionych ci šlachavych kropak. Stvarycie markiery mapy! - Adznačyć miesca na mapie dotykam. + Dakraniciesia miesca i potym nacisnicie knopku markiera. Impartavać hrupy Vy možacie impartavać hrupy ulubionych ci šlachavyja kropki jak markiery. Markiery, paznačanyja jak projdziennyja, z\'javiacca na hetym ekranie. From d1f1a7508475112c0cd90e5269137601fe407aeb Mon Sep 17 00:00:00 2001 From: josep constanti Date: Sun, 19 Nov 2017 20:30:40 +0000 Subject: [PATCH 109/157] Translated using Weblate (Catalan) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-ca/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index 91f5365ef5..8e3b933da1 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -2294,7 +2294,7 @@ L\'ús de memòria serà de {3} MB temporalment i {1} MB permanentment. Mostra el diàleg de preferides Configuració de nom Si premeu el botó de l\'acció s\'afegirà un marcador a la posició del centre de la pantalla. - Si premeu el botó de l\'acció s\'afegirà una fita de GPX a la posició del centre de la pantalla. + Prement el botó de l\'acció s\'afegirà, al centre de la pantalla, una fita GPX. Si premeu el botó de l\'acció s\'afegirà una nota d\'àudio a la posició del centre de la pantalla. "Si premeu el botó de l\'acció s\'afegirà una nota de vídeo a la posició del centre de la pantalla." Si premeu el botó de l\'acció s\'afegirà una nota fotogràfica a la posició del centre de la pantalla. @@ -2653,7 +2653,7 @@ Abasta l\'àrea: %1$s x %2$s Desa com una traça Mou a l\'historial Planifica la ruta - Ss\'esborrarà el grup després de reiniciar + S\'esborrarà el grup un cop es reiniciï l\'aplicació. Marcadors Format de coordenades Utilitza el teclat del sistema From 111e23ccae87a7d4c415b99ee2b9f2b0c2488813 Mon Sep 17 00:00:00 2001 From: Franco Date: Mon, 20 Nov 2017 03:47:51 +0000 Subject: [PATCH 110/157] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 027cb62508..5ce8a8e7b2 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -2778,7 +2778,7 @@ Proporciona un código completo Exporta los marcadores a un archivo que puedes nombrar aquí: Guardar como traza Mover al historial - El grupo se quitará al reiniciar + El grupo se quitará al reiniciar la aplicación. Marcadores Formato de coordenadas Usar teclado del sistema From 66cca8c58cbb9940e1492d14a85f1b4a4f67793f Mon Sep 17 00:00:00 2001 From: Franco Date: Mon, 20 Nov 2017 03:48:58 +0000 Subject: [PATCH 111/157] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index e5a59605db..e6d0f12344 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -2779,7 +2779,7 @@ Proporciona un código completo Exporta los marcadores a un archivo que puedes nombrar aquí: Guardar como traza Mover al historial - El grupo se quitará al reiniciar + El grupo se quitará al reiniciar la aplicación. Marcadores Formato de coordenadas Usar teclado del sistema From dd7bf5a0631157da3933ab19eed8b5dacd6398ac Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:02:16 -0800 Subject: [PATCH 112/157] Add missing comma --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index e7e012be9f..562ad29ebd 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,4 +1,4 @@ -Before entering an issue please read the information below. +Before entering an issue, please read the information below. ```Github is a main development tool for developers. There are hundreds requests a month and there are only few developers. So by opening an issue, please know that your issue will be sent out to all developers and please be ready that it could be closed without explanation or with a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard, but there is no guarantee that somebody from developers will pick up the issue to work on it.``` From 2930fa2d20312bbf39f461e03d127d99c7c09ec4 Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:04:05 -0800 Subject: [PATCH 113/157] Fix choosen typo --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 562ad29ebd..0197735db7 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -19,7 +19,7 @@ __*In case of wrong routing:*__ Tell us whether you have used OsmAnd's in-app offline routing, or any online routing provider like YOURS, OpenRouteService or OSRM. -What routing profile is choosen in OsmAnd app? (car, bike, pedestrian, fastest or shortest) +What routing profile is chosen in OsmAnd app? (car, bike, pedestrian, fastest or shortest) Please specify as exactly as possible the start and end point of your route by telling us city name and street name so that we can find it via in-app address search easily. Also a permalink from openstreetmap.org can be helpful. From 731cd39e6ad8041c62d2e01d9412ee0ec83e6073 Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:06:50 -0800 Subject: [PATCH 114/157] Add missing comma after "Also ..." --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 0197735db7..8699c02b49 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -21,6 +21,6 @@ Tell us whether you have used OsmAnd's in-app offline routing, or any online rou What routing profile is chosen in OsmAnd app? (car, bike, pedestrian, fastest or shortest) -Please specify as exactly as possible the start and end point of your route by telling us city name and street name so that we can find it via in-app address search easily. Also a permalink from openstreetmap.org can be helpful. +Please specify as exactly as possible the start and end point of your route by telling us city name and street name so that we can find it via in-app address search easily. Also, a permalink from openstreetmap.org can be helpful. Tell us your expected routing, and how OsmAnd routes, or add screenshots here. From 9519609e1c9abd6efd9cf42417893500a07cce0d Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:10:19 -0800 Subject: [PATCH 115/157] Stylizing GitHub and OsmAnd --- ISSUE_TEMPLATE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 8699c02b49..d3bbe4852e 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,12 +1,12 @@ Before entering an issue, please read the information below. -```Github is a main development tool for developers. There are hundreds requests a month and there are only few developers. So by opening an issue, please know that your issue will be sent out to all developers and please be ready that it could be closed without explanation or with a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard, but there is no guarantee that somebody from developers will pick up the issue to work on it.``` +```GitHub is a main development tool for developers. There are hundreds requests a month and there are only few developers. So by opening an issue, please know that your issue will be sent out to all developers and please be ready that it could be closed without explanation or with a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard, but there is no guarantee that somebody from developers will pick up the issue to work on it.``` -In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about Osmand, please use the [googlegroup](https://groups.google.com/forum/#!forum/osmand). +In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about OsmAnd, please use the [googlegroup](https://groups.google.com/forum/#!forum/osmand). Please be sure to have read our [FAQ](http://osmand.net/help-online) before creating an issue here. (Also tell us in googlegroup when the FAQ is wrong or outdated.) -The best way to get help about an Osmand issue is to create a valid and detailed issue content. +The best way to get help about an OsmAnd issue is to create a valid and detailed issue content. Please give us the following information so that we can try to **reproduce** your issue: What version of OsmAnd are you using, on what device and Android/iOS version? From 1c7dfdbc890f930fdb295b493007be78c017b65b Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:12:55 -0800 Subject: [PATCH 116/157] Properly us the product name Google Groups. --- ISSUE_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index d3bbe4852e..fe8cd37a78 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -2,9 +2,9 @@ Before entering an issue, please read the information below. ```GitHub is a main development tool for developers. There are hundreds requests a month and there are only few developers. So by opening an issue, please know that your issue will be sent out to all developers and please be ready that it could be closed without explanation or with a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard, but there is no guarantee that somebody from developers will pick up the issue to work on it.``` -In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about OsmAnd, please use the [googlegroup](https://groups.google.com/forum/#!forum/osmand). +In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about OsmAnd, please use the [Google group](https://groups.google.com/forum/#!forum/osmand). -Please be sure to have read our [FAQ](http://osmand.net/help-online) before creating an issue here. (Also tell us in googlegroup when the FAQ is wrong or outdated.) +Please be sure to have read our [FAQ](http://osmand.net/help-online) before creating an issue here. (Also tell us in Google Groups when the FAQ is wrong or outdated.) The best way to get help about an OsmAnd issue is to create a valid and detailed issue content. Please give us the following information so that we can try to **reproduce** your issue: From a30706c26addba039ba00e7af8bfdb1b4b5130dd Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:13:43 -0800 Subject: [PATCH 117/157] Comma after "Also ..." --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index fe8cd37a78..68900fdb4b 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -4,7 +4,7 @@ Before entering an issue, please read the information below. In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about OsmAnd, please use the [Google group](https://groups.google.com/forum/#!forum/osmand). -Please be sure to have read our [FAQ](http://osmand.net/help-online) before creating an issue here. (Also tell us in Google Groups when the FAQ is wrong or outdated.) +Please be sure to have read our [FAQ](http://osmand.net/help-online) before creating an issue here. (Also, tell us in Google Groups when the FAQ is wrong or outdated.) The best way to get help about an OsmAnd issue is to create a valid and detailed issue content. Please give us the following information so that we can try to **reproduce** your issue: From a510ec986393fa012a7e27586d89aae832cf2730 Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sun, 19 Nov 2017 22:35:29 -0800 Subject: [PATCH 118/157] Break up long sentence and fix a grammatical mistake --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 68900fdb4b..8f5f620041 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,6 +1,6 @@ Before entering an issue, please read the information below. -```GitHub is a main development tool for developers. There are hundreds requests a month and there are only few developers. So by opening an issue, please know that your issue will be sent out to all developers and please be ready that it could be closed without explanation or with a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard, but there is no guarantee that somebody from developers will pick up the issue to work on it.``` +```GitHub is a main development tool for developers. There are hundreds requests a month and there are only 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 a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard. However, there is no guarantee that a developer will pick up the issue to work on it.``` In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about OsmAnd, please use the [Google group](https://groups.google.com/forum/#!forum/osmand). From ddf4da4b7d09a0ae94d912dfe8d6cf65d6f049fc Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 10:56:23 +0200 Subject: [PATCH 119/157] Fix icons --- .../net/osmand/plus/osmedit/OsmEditsAdapter.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index cf7c7ff088..20ab3de571 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -120,14 +120,15 @@ public class OsmEditsAdapter extends ArrayAdapter { private Drawable getIcon(OsmPoint point) { if (point.getGroup() == OsmPoint.Group.POI) { - Node node = ((OpenstreetmapPoint) point).getEntity(); - int iconResId = 0; - String typeStr = node.getTag(OSMSettings.OSMTagKey.AMENITY); - if (!Algorithms.isEmpty(typeStr)) { - iconResId = RenderingIcons.getBigIconResourceId(OSMSettings.OSMTagKey.AMENITY.getValue() + "_" + typeStr); - } + OpenstreetmapPoint osmPoint = (OpenstreetmapPoint) point; + String type = osmPoint.getType(); + String subtype = osmPoint.getSubtype(); + int iconResId = RenderingIcons.getBigIconResourceId(type); if (iconResId == 0) { - iconResId = R.drawable.ic_type_info; + iconResId = RenderingIcons.getBigIconResourceId(type + "_" + subtype); + if (iconResId == 0) { + iconResId = R.drawable.ic_type_info; + } } int colorResId = R.color.color_distance; if (point.getAction() == OsmPoint.Action.CREATE) { From afc7a91ef0da0e5e6be090d5049b17bf219f547c Mon Sep 17 00:00:00 2001 From: xmd5a Date: Mon, 20 Nov 2017 12:00:30 +0300 Subject: [PATCH 120/157] Fix string --- OsmAnd/res/values-be-rBY/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-be-rBY/strings.xml b/OsmAnd/res/values-be-rBY/strings.xml index 6d17b38540..abfac72121 100644 --- a/OsmAnd/res/values-be-rBY/strings.xml +++ b/OsmAnd/res/values-be-rBY/strings.xml @@ -2911,7 +2911,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd Kolkaść dziesiatkovych ličbaŭ Pakazać ličbavuju paneĺ Ustavić - Aŭtamatyčna pieraklučycca ŭ nastupnaje pole paśla ŭvodu %1$ dziesiatkovych ličbaŭ. + Aŭtamatyčna pieraklučycca ŭ nastupnaje pole paśla ŭvodu %1$d dziesiatkovych ličbaŭ. %1$d ličbaŭ Parajsci ŭ nastupnaje polie Pierajmienavać markier From f91cfe4078d65e8b8c40cb016a26989c55eeb7a1 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 12:01:26 +0200 Subject: [PATCH 121/157] Fix item layout --- OsmAnd/res/layout/note_list_item.xml | 7 +++---- OsmAnd/res/values-be-rBY/strings.xml | 2 +- OsmAnd/res/values-large/sizes.xml | 3 --- OsmAnd/res/values/sizes.xml | 3 --- 4 files changed, 4 insertions(+), 11 deletions(-) diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml index d0a084a359..c0faa3a780 100644 --- a/OsmAnd/res/layout/note_list_item.xml +++ b/OsmAnd/res/layout/note_list_item.xml @@ -39,15 +39,14 @@ android:layout_marginEnd="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding" android:layout_weight="1" - android:orientation="vertical" - android:paddingBottom="@dimen/list_item_text_container_padding_bottom" - android:paddingTop="@dimen/list_item_text_container_padding_top"> + android:orientation="vertical"> Kolkaść dziesiatkovych ličbaŭ Pakazać ličbavuju paneĺ Ustavić - Aŭtamatyčna pieraklučycca ŭ nastupnaje pole paśla ŭvodu %1$ dziesiatkovych ličbaŭ. + Aŭtamatyčna pieraklučycca ŭ nastupnaje pole paśla ŭvodu %1$d dziesiatkovych ličbaŭ. %1$d ličbaŭ Parajsci ŭ nastupnaje polie Pierajmienavać markier diff --git a/OsmAnd/res/values-large/sizes.xml b/OsmAnd/res/values-large/sizes.xml index 5a5f3b6415..f8ce4c32be 100644 --- a/OsmAnd/res/values-large/sizes.xml +++ b/OsmAnd/res/values-large/sizes.xml @@ -135,9 +135,6 @@ 78dp 15dp - 15dp - 18dp - 8dp 42dp diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index 599decb320..76a1309b52 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -206,9 +206,6 @@ 52dp 10dp - 10dp - 12dp - 5dp 28dp From 690ba5dfbb17b2cec08de1ebde3976ecdf200e24 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 12:36:28 +0200 Subject: [PATCH 122/157] Add empty states for osm edits --- .../res/layout-land/empty_state_osm_edits.xml | 51 ++++++++++++++++ OsmAnd/res/layout/empty_state_osm_edits.xml | 39 ++++++++++++ OsmAnd/res/layout/update_index.xml | 5 ++ OsmAnd/res/values/strings.xml | 2 + .../osmand/plus/osmedit/OsmEditingPlugin.java | 8 +-- .../osmand/plus/osmedit/OsmEditsFragment.java | 59 ++++++++++++------- 6 files changed, 137 insertions(+), 27 deletions(-) create mode 100644 OsmAnd/res/layout-land/empty_state_osm_edits.xml create mode 100644 OsmAnd/res/layout/empty_state_osm_edits.xml diff --git a/OsmAnd/res/layout-land/empty_state_osm_edits.xml b/OsmAnd/res/layout-land/empty_state_osm_edits.xml new file mode 100644 index 0000000000..cac933204f --- /dev/null +++ b/OsmAnd/res/layout-land/empty_state_osm_edits.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/empty_state_osm_edits.xml b/OsmAnd/res/layout/empty_state_osm_edits.xml new file mode 100644 index 0000000000..0cc477ea9a --- /dev/null +++ b/OsmAnd/res/layout/empty_state_osm_edits.xml @@ -0,0 +1,39 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/update_index.xml b/OsmAnd/res/layout/update_index.xml index 4553c67375..d637d3c31e 100644 --- a/OsmAnd/res/layout/update_index.xml +++ b/OsmAnd/res/layout/update_index.xml @@ -36,4 +36,9 @@ android:layout_marginRight="0dp" android:layout_marginTop="0dp" android:layout_weight="1"/> + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 9db1c86516..96f8de997e 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,8 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Create or modify OSM objects + Create or modify OSM POI, opening or commenting OSM Notes, and contributing recorded GPX files. Deleted Edited Added diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index f8587a634b..b5fb38b5d4 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -258,11 +258,9 @@ public class OsmEditingPlugin extends OsmandPlugin { @Override public void addMyPlacesTab(FavoritesActivity favoritesActivity, List mTabs, Intent intent) { - if (getDBPOI().getOpenstreetmapPoints().size() > 0 || getDBBug().getOsmbugsPoints().size() > 0) { - mTabs.add(favoritesActivity.getTabIndicator(R.string.osm_edits, OsmEditsFragment.class)); - if (intent != null && "OSM".equals(intent.getStringExtra("TAB"))) { - app.getSettings().FAVORITES_TAB.set(R.string.osm_edits); - } + mTabs.add(favoritesActivity.getTabIndicator(R.string.osm_edits, OsmEditsFragment.class)); + if (intent != null && "OSM".equals(intent.getStringExtra("TAB"))) { + app.getSettings().FAVORITES_TAB.set(R.string.osm_edits); } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 6df34ad1ca..d70c7e057b 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -19,6 +19,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewStub; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; @@ -66,6 +67,8 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo private OsmEditingPlugin plugin; private View footerView; + private View headerView; + private View emptyView; private List osmEdits; private OsmEditsAdapter listAdapter; @@ -102,25 +105,17 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo setHasOptionsMenu(true); plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class); - ListView listView = new ListView(getContext()); - View headerView = getActivity().getLayoutInflater().inflate(R.layout.list_item_header, listView, false); - listView.addHeaderView(headerView); + View view = inflater.inflate(R.layout.update_index, container, false); + view.findViewById(R.id.header_layout).setVisibility(View.GONE); + ViewStub emptyStub = (ViewStub) view.findViewById(R.id.empty_view_stub); + emptyStub.setLayoutResource(R.layout.empty_state_osm_edits); + emptyView = emptyStub.inflate(); + int icRes = getMyApplication().getSettings().isLightContent() + ? R.drawable.ic_empty_state_osm_edits_day : R.drawable.ic_empty_state_osm_edits_night; + ((ImageView) emptyView.findViewById(R.id.empty_state_image_view)).setImageResource(icRes); - ((TextView) headerView.findViewById(R.id.title_text_view)).setText(R.string.your_edits); - final CheckBox selectAll = (CheckBox) headerView.findViewById(R.id.check_box); - selectAll.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (selectAll.isChecked()) { - selectAll(); - } else { - deselectAll(); - } - updateSelectionTitle(actionMode); - } - }); plugin.getPoiModificationLocalUtil().addNodeCommittedListener(this); - return listView; + return view; } @Override @@ -357,11 +352,31 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo osmEdits.addAll(l1); osmEdits.addAll(l2); ListView listView = getListView(); - if (osmEdits.size() > 0 && footerView == null) { - //listView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.list_shadow_header, null, false)); - footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, listView, false); - listView.setDivider(null); - listView.addFooterView(footerView); + listView.setDivider(null); + listView.setEmptyView(emptyView); + + if (osmEdits.size() > 0) { + if (footerView == null) { + footerView = getActivity().getLayoutInflater().inflate(R.layout.list_shadow_footer, listView, false); + listView.addFooterView(footerView); + } + if (headerView == null) { + headerView = getActivity().getLayoutInflater().inflate(R.layout.list_item_header, listView, false); + listView.addHeaderView(headerView); + ((TextView) headerView.findViewById(R.id.title_text_view)).setText(R.string.your_edits); + final CheckBox selectAll = (CheckBox) headerView.findViewById(R.id.check_box); + selectAll.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (selectAll.isChecked()) { + selectAll(); + } else { + deselectAll(); + } + updateSelectionTitle(actionMode); + } + }); + } } listAdapter = new OsmEditsAdapter(getMyApplication(), osmEdits); listAdapter.setSelectedOsmEdits(osmEditsSelected); From 348847c59e5a4f6a5e4735bb1a420a0aa7ceb351 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 12:41:41 +0200 Subject: [PATCH 123/157] Add UI and setting for "markers - One tap active" --- .../fragment_direction_indication_dialog.xml | 60 ++++++++++++++++++- .../fragment_direction_indication_dialog.xml | 59 ++++++++++++++++++ OsmAnd/res/values/strings.xml | 2 + .../src/net/osmand/plus/OsmandSettings.java | 2 + .../DirectionIndicationDialogFragment.java | 9 +++ 5 files changed, 131 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml b/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml index f5424bf6a1..d76253eb22 100644 --- a/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml +++ b/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml @@ -348,7 +348,6 @@ @@ -404,6 +403,65 @@ + + + + + + + + + + + + + + + diff --git a/OsmAnd/res/layout/fragment_direction_indication_dialog.xml b/OsmAnd/res/layout/fragment_direction_indication_dialog.xml index cd7759273e..c66311cb24 100644 --- a/OsmAnd/res/layout/fragment_direction_indication_dialog.xml +++ b/OsmAnd/res/layout/fragment_direction_indication_dialog.xml @@ -398,6 +398,65 @@ + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 143cd7e007..1a678afc6d 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,8 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Tap on marker on the map, move it to the first place in active markers, without opening context menu. + One tap active Looking for tracks with waypoints More Appearance on the map diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index b79ae13a91..0dcefc83ca 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -716,6 +716,8 @@ public class OsmandSettings { public final CommonPreference SHOW_LINES_TO_FIRST_MARKERS = new BooleanPreference("show_lines_to_first_markers", false).makeProfile(); public final CommonPreference SHOW_ARROWS_TO_FIRST_MARKERS = new BooleanPreference("show_arrows_to_first_markers", false).makeProfile(); + public final CommonPreference ONE_TAP_MAKE_MARKER_FIRST = new BooleanPreference("one_tap_make_marker_first", false).makeProfile(); + public final CommonPreference USE_MAPILLARY_FILTER = new BooleanPreference("use_mapillary_filters", false).makeGlobal(); public final CommonPreference MAPILLARY_FILTER_USER_KEY = new StringPreference("mapillary_filter_user_key", "").makeGlobal(); public final CommonPreference MAPILLARY_FILTER_USERNAME = new StringPreference("mapillary_filter_username", "").makeGlobal(); diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java index c46d56625b..ab6bd60d01 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java @@ -182,6 +182,15 @@ public class DirectionIndicationDialogFragment extends BaseOsmAndDialogFragment } }); + final CompoundButton oneTapActiveToggle = (CompoundButton) mainView.findViewById(R.id.one_tap_active_switch); + oneTapActiveToggle.setChecked(settings.ONE_TAP_MAKE_MARKER_FIRST.get()); + mainView.findViewById(R.id.one_tap_active_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + updateChecked(settings.ONE_TAP_MAKE_MARKER_FIRST, oneTapActiveToggle); + } + }); + return mainView; } From 7d741dc89cabbb24a8c17b7c240736d025bbfbee Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 14:16:41 +0200 Subject: [PATCH 124/157] Add functionality for running exclusive action instead of opening context menu; rename setting --- OsmAnd/src/net/osmand/plus/OsmandSettings.java | 2 +- .../net/osmand/plus/audionotes/AudioNotesLayer.java | 5 +++++ .../distancecalculator/DistanceCalculatorPlugin.java | 5 +++++ .../osmand/plus/mapillary/MapillaryVectorLayer.java | 5 +++++ .../mapmarkers/DirectionIndicationDialogFragment.java | 4 ++-- .../plus/measurementtool/MeasurementToolLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java | 7 ++++++- .../osmand/plus/parkingpoint/ParkingPositionLayer.java | 5 +++++ .../plus/routepointsnavigation/RoutePointsLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/views/AidlMapLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java | 8 ++++++++ .../net/osmand/plus/views/DownloadedRegionsLayer.java | 7 ++++++- OsmAnd/src/net/osmand/plus/views/FavouritesLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/views/GPXLayer.java | 5 +++++ .../net/osmand/plus/views/ImpassableRoadsLayer.java | 5 +++++ OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java | 10 ++++++++++ OsmAnd/src/net/osmand/plus/views/POIMapLayer.java | 8 ++++++-- .../src/net/osmand/plus/views/PointLocationLayer.java | 5 +++++ .../net/osmand/plus/views/PointNavigationLayer.java | 7 +++++-- .../src/net/osmand/plus/views/TransportStopsLayer.java | 5 +++++ 22 files changed, 114 insertions(+), 9 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 0dcefc83ca..e4c2cfbc91 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -716,7 +716,7 @@ public class OsmandSettings { public final CommonPreference SHOW_LINES_TO_FIRST_MARKERS = new BooleanPreference("show_lines_to_first_markers", false).makeProfile(); public final CommonPreference SHOW_ARROWS_TO_FIRST_MARKERS = new BooleanPreference("show_arrows_to_first_markers", false).makeProfile(); - public final CommonPreference ONE_TAP_MAKE_MARKER_FIRST = new BooleanPreference("one_tap_make_marker_first", false).makeProfile(); + public final CommonPreference SELECT_MARKER_ON_SINGLE_TAP = new BooleanPreference("select_marker_on_single_tap", false).makeProfile(); public final CommonPreference USE_MAPILLARY_FILTER = new BooleanPreference("use_mapillary_filters", false).makeGlobal(); public final CommonPreference MAPILLARY_FILTER_USER_KEY = new StringPreference("mapillary_filter_user_key", "").makeGlobal(); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java index e8f0d287bb..046fc39059 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java @@ -182,6 +182,11 @@ public class AudioNotesLayer extends OsmandMapLayer implements return o instanceof Recording; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List objects) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java b/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java index 487e2a22ac..f346b95d0c 100644 --- a/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java +++ b/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java @@ -589,6 +589,11 @@ public class DistanceCalculatorPlugin extends OsmandPlugin { return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { getMPointsFromPoint(tileBox, point, o); diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java index 4f802340b3..69ff11e771 100644 --- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java +++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java @@ -333,6 +333,11 @@ class MapillaryVectorLayer extends MapTileLayer implements MapillaryLayer, ICont return o instanceof MapillaryImage; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + private void getImagesFromPoint(RotatedTileBox tb, PointF point, List images) { Map points = this.visiblePoints; if (points != null) { diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java index ab6bd60d01..1b24b4a1dd 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/DirectionIndicationDialogFragment.java @@ -183,11 +183,11 @@ public class DirectionIndicationDialogFragment extends BaseOsmAndDialogFragment }); final CompoundButton oneTapActiveToggle = (CompoundButton) mainView.findViewById(R.id.one_tap_active_switch); - oneTapActiveToggle.setChecked(settings.ONE_TAP_MAKE_MARKER_FIRST.get()); + oneTapActiveToggle.setChecked(settings.SELECT_MARKER_ON_SINGLE_TAP.get()); mainView.findViewById(R.id.one_tap_active_row).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - updateChecked(settings.ONE_TAP_MAKE_MARKER_FIRST, oneTapActiveToggle); + updateChecked(settings.SELECT_MARKER_ON_SINGLE_TAP, oneTapActiveToggle); } }); diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java index b56959ea9d..1cea9008ba 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java @@ -409,6 +409,11 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL return !isInMeasurementMode(); } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + interface OnSingleTapListener { void onAddPoint(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java index 7452609509..5ed95ab18b 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java @@ -512,6 +512,11 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider return o instanceof OpenStreetNote; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java index 1f86adec92..0699f9367a 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java @@ -160,6 +160,11 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC return o instanceof OsmPoint; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java index 6e6209ce11..35e1368055 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPositionLayer.java @@ -13,11 +13,11 @@ import android.graphics.PointF; import android.os.Handler; import android.util.DisplayMetrics; import android.view.WindowManager; + import net.osmand.Location; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; -import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.R; import net.osmand.plus.TargetPointsHelper; import net.osmand.plus.TargetPointsHelper.TargetPoint; @@ -212,6 +212,11 @@ public class OsMoPositionLayer extends OsmandMapLayer implements ContextMenuLaye return o instanceof OsMoDevice; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { getOsmoFromPoint(tileBox, point, o); diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionLayer.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionLayer.java index 56823979bc..d768f4181d 100644 --- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionLayer.java +++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionLayer.java @@ -135,6 +135,11 @@ public class ParkingPositionLayer extends OsmandMapLayer implements return o == getParkingPoint(); } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { getParkingFromPoint(tileBox, point, o); diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java index f171815e89..c8ac99da18 100644 --- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java +++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java @@ -42,6 +42,11 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { diff --git a/OsmAnd/src/net/osmand/plus/views/AidlMapLayer.java b/OsmAnd/src/net/osmand/plus/views/AidlMapLayer.java index e6a7a562e0..b11e902931 100644 --- a/OsmAnd/src/net/osmand/plus/views/AidlMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/AidlMapLayer.java @@ -128,6 +128,11 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider return o instanceof AMapPoint; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { getFromPoint(tileBox, point, o); diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index 84ddef5780..08c0e05efe 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -642,6 +642,13 @@ public class ContextMenuLayer extends OsmandMapLayer { } } } + for (Map.Entry entry : selectedObjects.entrySet()) { + Object o = entry.getKey(); + IContextMenuProvider provider = entry.getValue(); + if (o != null && provider != null && provider.runExclusiveAction(o, showUnknownLocation)) { + return true; + } + } if (selectedObjects.size() == 1) { Object selectedObj = selectedObjects.keySet().iterator().next(); LatLon latLon = objectLatLon; @@ -924,6 +931,7 @@ public class ContextMenuLayer extends OsmandMapLayer { boolean isObjectClickable(Object o); + boolean runExclusiveAction(Object o, boolean unknownLocation); } public interface IMoveObjectProvider { diff --git a/OsmAnd/src/net/osmand/plus/views/DownloadedRegionsLayer.java b/OsmAnd/src/net/osmand/plus/views/DownloadedRegionsLayer.java index 402ddd540e..abbafcdb8e 100644 --- a/OsmAnd/src/net/osmand/plus/views/DownloadedRegionsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/DownloadedRegionsLayer.java @@ -11,9 +11,9 @@ import android.graphics.PointF; import android.text.TextPaint; import android.util.DisplayMetrics; import android.view.WindowManager; + import net.osmand.IndexConstants; import net.osmand.binary.BinaryMapDataObject; -import net.osmand.binary.BinaryMapIndexReader; import net.osmand.binary.BinaryMapIndexReader.TagValuePair; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; @@ -458,6 +458,11 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + private void getWorldRegionFromPoint(RotatedTileBox tb, PointF point, List dataObjects) { int zoom = tb.getZoom(); if (zoom >= ZOOM_TO_SHOW_SELECTION_ST && zoom < ZOOM_TO_SHOW_SELECTION diff --git a/OsmAnd/src/net/osmand/plus/views/FavouritesLayer.java b/OsmAnd/src/net/osmand/plus/views/FavouritesLayer.java index d820578ecf..9efc9f1054 100644 --- a/OsmAnd/src/net/osmand/plus/views/FavouritesLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/FavouritesLayer.java @@ -209,6 +209,11 @@ public class FavouritesLayer extends OsmandMapLayer implements ContextMenuLayer. return o instanceof FavouritePoint && o != contextMenuLayer.getMoveableObject(); } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res) { if (this.settings.SHOW_FAVORITES.get() && tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/views/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/GPXLayer.java index e5f4b73fc9..be7921a76d 100644 --- a/OsmAnd/src/net/osmand/plus/views/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/GPXLayer.java @@ -564,6 +564,11 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex return o instanceof WptPt; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java b/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java index 27136462c4..9fd7c62e70 100644 --- a/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java @@ -161,6 +161,11 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java b/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java index 65e2b40e11..3de4f99215 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java @@ -481,6 +481,16 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + if (unknownLocation || !(o instanceof MapMarker) + || !map.getMyApplication().getSettings().SELECT_MARKER_ON_SINGLE_TAP.get()) { + return false; + } + map.getMyApplication().getMapMarkersHelper().moveMarkerToTop((MapMarker) o); + return true; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { if (tileBox.getZoom() < 3 || !map.getMyApplication().getSettings().USE_MAP_MARKERS.get()) { diff --git a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java index 04b7287646..8d619e05f8 100644 --- a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java @@ -1,7 +1,6 @@ package net.osmand.plus.views; import android.app.Dialog; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.res.Resources; @@ -15,7 +14,6 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.provider.Settings; import android.support.v4.content.ContextCompat; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.PopupMenu; @@ -35,6 +33,7 @@ import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.ScrollView; import android.widget.TextView; + import net.osmand.AndroidUtils; import net.osmand.PlatformUtil; import net.osmand.ResultMatcher; @@ -564,6 +563,11 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon return o instanceof Amenity; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public LatLon getTextLocation(Amenity o) { return o.getLocation(); diff --git a/OsmAnd/src/net/osmand/plus/views/PointLocationLayer.java b/OsmAnd/src/net/osmand/plus/views/PointLocationLayer.java index 67f527ca10..64a0098002 100644 --- a/OsmAnd/src/net/osmand/plus/views/PointLocationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/PointLocationLayer.java @@ -215,6 +215,11 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + private LatLon getMyLocation() { Location location = locationProvider.getLastKnownLocation(); if (location != null) { diff --git a/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java b/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java index 65910cccc5..9d70ae0c7f 100644 --- a/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java @@ -14,7 +14,6 @@ import android.support.v4.content.ContextCompat; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; -import net.osmand.data.QuadPoint; import net.osmand.data.RotatedTileBox; import net.osmand.plus.R; import net.osmand.plus.TargetPointsHelper; @@ -22,7 +21,6 @@ import net.osmand.plus.TargetPointsHelper.TargetPoint; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.views.ContextMenuLayer.IContextMenuProvider; -import java.util.Iterator; import java.util.List; public class PointNavigationLayer extends OsmandMapLayer implements @@ -180,6 +178,11 @@ public class PointNavigationLayer extends OsmandMapLayer implements return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o) { if (tileBox.getZoom() >= 3) { diff --git a/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java b/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java index 9715308027..b43cfae364 100644 --- a/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java @@ -279,6 +279,11 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa return false; } + @Override + public boolean runExclusiveAction(Object o, boolean unknownLocation) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res) { if(tileBox.getZoom() >= startZoomRoute && route != null) { From 5e21aaf8b432b55bf732c20dda70cae9a1a075b4 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 14:21:21 +0200 Subject: [PATCH 125/157] Handle null in runExclusiveAction --- OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java | 5 ++--- OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index 08c0e05efe..ac4aae0893 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -643,9 +643,8 @@ public class ContextMenuLayer extends OsmandMapLayer { } } for (Map.Entry entry : selectedObjects.entrySet()) { - Object o = entry.getKey(); IContextMenuProvider provider = entry.getValue(); - if (o != null && provider != null && provider.runExclusiveAction(o, showUnknownLocation)) { + if (provider != null && provider.runExclusiveAction(entry.getKey(), showUnknownLocation)) { return true; } } @@ -931,7 +930,7 @@ public class ContextMenuLayer extends OsmandMapLayer { boolean isObjectClickable(Object o); - boolean runExclusiveAction(Object o, boolean unknownLocation); + boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation); } public interface IMoveObjectProvider { diff --git a/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java b/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java index 3de4f99215..93f80d5a35 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java @@ -483,7 +483,7 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi @Override public boolean runExclusiveAction(Object o, boolean unknownLocation) { - if (unknownLocation || !(o instanceof MapMarker) + if (unknownLocation || o == null || !(o instanceof MapMarker) || !map.getMyApplication().getSettings().SELECT_MARKER_ON_SINGLE_TAP.get()) { return false; } From fd53cefc1b6c70bd86962b6f17d581c3697140c5 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 14:47:17 +0200 Subject: [PATCH 126/157] Add osm edit options menu --- ...t_osm_edit_options_bottom_sheet_dialog.xml | 210 ++++++++++++++++++ ...mEditOptionsBottomSheetDialogFragment.java | 129 +++++++++++ .../osmand/plus/osmedit/OsmEditingPlugin.java | 15 +- .../osmand/plus/osmedit/OsmEditsAdapter.java | 16 +- .../osmand/plus/osmedit/OsmEditsFragment.java | 104 ++++----- 5 files changed, 400 insertions(+), 74 deletions(-) create mode 100644 OsmAnd/res/layout/fragment_osm_edit_options_bottom_sheet_dialog.xml create mode 100644 OsmAnd/src/net/osmand/plus/osmedit/OsmEditOptionsBottomSheetDialogFragment.java diff --git a/OsmAnd/res/layout/fragment_osm_edit_options_bottom_sheet_dialog.xml b/OsmAnd/res/layout/fragment_osm_edit_options_bottom_sheet_dialog.xml new file mode 100644 index 0000000000..61e0860e73 --- /dev/null +++ b/OsmAnd/res/layout/fragment_osm_edit_options_bottom_sheet_dialog.xml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditOptionsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditOptionsBottomSheetDialogFragment.java new file mode 100644 index 0000000000..ef45713fb6 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditOptionsBottomSheetDialogFragment.java @@ -0,0 +1,129 @@ +package net.osmand.plus.osmedit; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import net.osmand.plus.R; +import net.osmand.plus.base.MenuBottomSheetDialogFragment; +import net.osmand.plus.widgets.TextViewEx; + +public class OsmEditOptionsBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { + + public final static String TAG = "OsmEditOptionsBottomSheetDialogFragment"; + + public static final String OSM_POINT = "osm_point"; + + private OsmEditOptionsFragmentListener listener; + + public void setListener(OsmEditOptionsFragmentListener listener) { + this.listener = listener; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme; + final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.fragment_osm_edit_options_bottom_sheet_dialog, container); + + Bundle args = getArguments(); + if (args != null) { + final OsmPoint osmPoint = (OsmPoint) args.getSerializable(OSM_POINT); + + ((TextViewEx) mainView.findViewById(R.id.osm_edit_name)).setText(OsmEditingPlugin.getName(osmPoint) + ":"); + + ((ImageView) mainView.findViewById(R.id.upload_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_export)); + mainView.findViewById(R.id.upload_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (listener != null) { + listener.onUploadClick(osmPoint); + } + dismiss(); + } + }); + + ((ImageView) mainView.findViewById(R.id.show_on_map_icon)).setImageDrawable(getContentIcon(R.drawable.ic_show_on_map)); + mainView.findViewById(R.id.show_on_map_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (listener != null) { + listener.onShowOnMapClick(osmPoint); + } + dismiss(); + } + }); + + if (osmPoint instanceof OpenstreetmapPoint && osmPoint.getAction() != OsmPoint.Action.DELETE) { + mainView.findViewById(R.id.modify_osm_change_row).setVisibility(View.VISIBLE); + ((ImageView) mainView.findViewById(R.id.modify_osm_change_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_edit_dark)); + mainView.findViewById(R.id.modify_osm_change_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (listener != null) { + listener.onModifyOsmChangeClick(osmPoint); + } + dismiss(); + } + }); + } + + if (osmPoint instanceof OsmNotesPoint) { + mainView.findViewById(R.id.modify_osm_note_row).setVisibility(View.VISIBLE); + ((ImageView) mainView.findViewById(R.id.modify_osm_note_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_edit_dark)); + mainView.findViewById(R.id.modify_osm_note_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (listener != null) { + listener.onModifyOsmNoteClick(osmPoint); + } + dismiss(); + } + }); + } + + ((ImageView) mainView.findViewById(R.id.delete_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_delete_dark)); + mainView.findViewById(R.id.delete_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (listener != null) { + listener.onDeleteClick(osmPoint); + } + dismiss(); + } + }); + } + + if (nightMode) { + ((TextViewEx) mainView.findViewById(R.id.osm_edit_name)).setTextColor(getResources().getColor(R.color.ctx_menu_info_text_dark)); + } + + mainView.findViewById(R.id.cancel_row).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dismiss(); + } + }); + + setupHeightAndBackground(mainView, R.id.osm_edit_options_scroll_view); + + return mainView; + } + + public interface OsmEditOptionsFragmentListener { + + void onUploadClick(OsmPoint osmPoint); + + void onShowOnMapClick(OsmPoint osmPoint); + + void onModifyOsmChangeClick(OsmPoint osmPoint); + + void onModifyOsmNoteClick(OsmPoint osmPoint); + + void onDeleteClick(OsmPoint osmPoint); + } +} diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index b5fb38b5d4..f2ac87d344 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -421,19 +421,30 @@ public class OsmEditingPlugin extends OsmandPlugin { public static String getEditName(OsmPoint point) { String prefix = getPrefix(point); + String name = getName(point); if (point.getGroup() == OsmPoint.Group.POI) { String subtype = ""; if (!Algorithms.isEmpty(((OpenstreetmapPoint) point).getSubtype())) { subtype = " (" + ((OpenstreetmapPoint) point).getSubtype() + ") "; } - return prefix + subtype + ((OpenstreetmapPoint) point).getName(); + return prefix + subtype + name; } else if (point.getGroup() == OsmPoint.Group.BUG) { - return prefix + ((OsmNotesPoint) point).getText(); + return prefix + name; } else { return prefix; } } + public static String getName(OsmPoint point) { + if (point.getGroup() == OsmPoint.Group.POI) { + return ((OpenstreetmapPoint) point).getName(); + } else if (point.getGroup() == OsmPoint.Group.BUG) { + return ((OsmNotesPoint) point).getText(); + } else { + return ""; + } + } + public static String getPrefix(OsmPoint osmPoint) { return (osmPoint.getGroup() == OsmPoint.Group.POI ? "POI" : "Bug") + " id: " + osmPoint.getId() + " "; } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 20ab3de571..45edd4b597 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -64,7 +64,7 @@ public class OsmEditsAdapter extends ArrayAdapter { if (osmEdit != null) { final OsmEditViewHolder holder = (OsmEditViewHolder) view.getTag(); - holder.titleTextView.setText(getName(osmEdit)); + holder.titleTextView.setText(OsmEditingPlugin.getName(osmEdit)); holder.descriptionTextView.setText(getDescription(osmEdit)); Drawable icon = getIcon(osmEdit); if (icon != null) { @@ -94,7 +94,7 @@ public class OsmEditsAdapter extends ArrayAdapter { @Override public void onClick(View v) { if (listener != null) { - listener.onOptionsClick(v, osmEdit); + listener.onOptionsClick(osmEdit); } } }); @@ -147,16 +147,6 @@ public class OsmEditsAdapter extends ArrayAdapter { return null; } - private String getName(OsmPoint point) { - if (point.getGroup() == OsmPoint.Group.POI) { - return ((OpenstreetmapPoint) point).getName(); - } else if (point.getGroup() == OsmPoint.Group.BUG) { - return ((OsmNotesPoint) point).getText(); - } else { - return ""; - } - } - private String getDescription(OsmPoint point) { String action = ""; if (point.getAction() == OsmPoint.Action.CREATE) { @@ -214,6 +204,6 @@ public class OsmEditsAdapter extends ArrayAdapter { void onItemShowMap(OsmPoint point); - void onOptionsClick(View view, OsmPoint note); + void onOptionsClick(OsmPoint note); } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index d70c7e057b..607ff72020 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -9,9 +9,9 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; import android.support.v7.view.ActionMode; -import android.support.v7.widget.PopupMenu; import android.util.Xml; import android.view.LayoutInflater; import android.view.Menu; @@ -20,8 +20,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.EditText; @@ -40,13 +38,12 @@ import net.osmand.plus.activities.ActionBarProgressActivity; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.OsmandActionBarActivity; import net.osmand.plus.base.OsmAndListFragment; -import net.osmand.plus.dialogs.DirectionsDialogs; import net.osmand.plus.dialogs.ProgressDialogFragment; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.myplaces.FavoritesActivity; -import net.osmand.plus.osmedit.OsmPoint.Action; import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment; import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.PoiUploaderType; +import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener; import net.osmand.util.Algorithms; import org.xmlpull.v1.XmlSerializer; @@ -70,7 +67,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo private View headerView; private View emptyView; - private List osmEdits; + private List osmEdits = new ArrayList<>(); private OsmEditsAdapter listAdapter; private ArrayList osmEditsSelected = new ArrayList<>(); @@ -114,6 +111,11 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo ? R.drawable.ic_empty_state_osm_edits_day : R.drawable.ic_empty_state_osm_edits_night; ((ImageView) emptyView.findViewById(R.id.empty_state_image_view)).setImageResource(icRes); + Fragment optionsFragment = getChildFragmentManager().findFragmentByTag(OsmEditOptionsBottomSheetDialogFragment.TAG); + if (optionsFragment != null) { + ((OsmEditOptionsBottomSheetDialogFragment) optionsFragment).setListener(createOsmEditOptionsFragmentListener()); + } + plugin.getPoiModificationLocalUtil().addNodeCommittedListener(this); return view; } @@ -397,8 +399,8 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo } @Override - public void onOptionsClick(View view, OsmPoint note) { - openPopUpMenu(view, note); + public void onOptionsClick(OsmPoint note) { + openPopUpMenu(note); } }); listView.setAdapter(listAdapter); @@ -441,66 +443,50 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo }); } - private void openPopUpMenu(View v, final OsmPoint info) { - OsmandApplication app = getMyApplication(); - final PopupMenu optionsMenu = new PopupMenu(getActivity(), v); - DirectionsDialogs.setupPopUpMenuIcon(optionsMenu); - MenuItem item = optionsMenu.getMenu().add(R.string.shared_string_show_on_map).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_show_on_map)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + private void openPopUpMenu(final OsmPoint info) { + OsmEditOptionsBottomSheetDialogFragment optionsFragment = new OsmEditOptionsBottomSheetDialogFragment(); + Bundle args = new Bundle(); + args.putSerializable(OsmEditOptionsBottomSheetDialogFragment.OSM_POINT, info); + optionsFragment.setUsedOnMap(false); + optionsFragment.setArguments(args); + optionsFragment.setListener(createOsmEditOptionsFragmentListener()); + optionsFragment.show(getChildFragmentManager(), OsmEditOptionsBottomSheetDialogFragment.TAG); + } + + private OsmEditOptionsFragmentListener createOsmEditOptionsFragmentListener() { + return new OsmEditOptionsFragmentListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public void onUploadClick(OsmPoint osmPoint) { + uploadItems(new OsmPoint[]{getPointAfterModify(osmPoint)}); + } + + @Override + public void onShowOnMapClick(OsmPoint osmPoint) { OsmandSettings settings = getMyApplication().getSettings(); - settings.setMapLocationToShow(info.getLatitude(), info.getLongitude(), settings.getLastKnownMapZoom()); + settings.setMapLocationToShow(osmPoint.getLatitude(), osmPoint.getLongitude(), settings.getLastKnownMapZoom()); MapActivity.launchMapActivityMoveToTop(getActivity()); - return true; } - }); - if (info instanceof OpenstreetmapPoint && info.getAction() != Action.DELETE) { - item = optionsMenu.getMenu().add(R.string.poi_context_menu_modify_osm_change).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - - @Override - public boolean onMenuItemClick(MenuItem item) { - OpenstreetmapPoint i = (OpenstreetmapPoint) getPointAfterModify(info); - final Node entity = i.getEntity(); - refreshId = entity.getId(); - EditPoiDialogFragment.createInstance(entity, false).show(getActivity().getSupportFragmentManager(), "edit_poi"); - return true; - } - }); - } - if (info instanceof OsmNotesPoint) { - item = optionsMenu.getMenu().add(R.string.context_menu_item_modify_note).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_edit_dark)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - - @Override - public boolean onMenuItemClick(MenuItem item) { - showBugDialog((OsmNotesPoint) info); - return true; - } - }); - } - item = optionsMenu.getMenu().add(R.string.shared_string_delete).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_delete_dark)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public void onModifyOsmChangeClick(OsmPoint osmPoint) { + OpenstreetmapPoint i = (OpenstreetmapPoint) getPointAfterModify(osmPoint); + final Node entity = i.getEntity(); + refreshId = entity.getId(); + EditPoiDialogFragment.createInstance(entity, false).show(getActivity().getSupportFragmentManager(), "edit_poi"); + } + + @Override + public void onModifyOsmNoteClick(OsmPoint osmPoint) { + showBugDialog((OsmNotesPoint) osmPoint); + } + + @Override + public void onDeleteClick(OsmPoint osmPoint) { ArrayList points = new ArrayList<>(); - points.add(info); + points.add(osmPoint); deleteItems(new ArrayList<>(points)); - return true; - } - }); - item = optionsMenu.getMenu().add(R.string.local_openstreetmap_upload).setIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_action_export)); - item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - uploadItems(new OsmPoint[]{getPointAfterModify(info)}); - return true; - } - }); - optionsMenu.show(); + }; } protected OsmPoint getPointAfterModify(OsmPoint info) { From ccda609fa9911087580666b08e00a2c6c9996e5f Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 15:43:37 +0200 Subject: [PATCH 127/157] Fix category --- .../src/net/osmand/plus/osmedit/OsmEditsAdapter.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 45edd4b597..2c46593fa2 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -11,8 +11,6 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; -import net.osmand.osm.edit.Node; -import net.osmand.osm.edit.OSMSettings; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.render.RenderingIcons; @@ -159,9 +157,9 @@ public class OsmEditsAdapter extends ArrayAdapter { action = getContext().getString(R.string.shared_string_edited); } - String subtype = ""; - if (point.getGroup() == OsmPoint.Group.POI && !Algorithms.isEmpty(((OpenstreetmapPoint) point).getSubtype())) { - subtype = ((OpenstreetmapPoint) point).getSubtype(); + String category = ""; + if (point.getGroup() == OsmPoint.Group.POI) { + category = ((OpenstreetmapPoint) point).getEntity().getTag(EditPoiData.POI_TYPE_TAG); } String prefix = OsmEditingPlugin.getPrefix(point); @@ -170,8 +168,8 @@ public class OsmEditsAdapter extends ArrayAdapter { if (!Algorithms.isEmpty(action)) { description += action + " • "; } - if (!Algorithms.isEmpty(subtype)) { - description += subtype + " • "; + if (!Algorithms.isEmpty(category)) { + description += category + " • "; } description += prefix; From e66ec473e44516fc62f5c5831394ed638e94c7d5 Mon Sep 17 00:00:00 2001 From: anonymous <> Date: Sun, 19 Nov 2017 13:14:05 +0000 Subject: [PATCH 128/157] =?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 91.0% (2277 of 2502 strings) --- OsmAnd/res/values-nb/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index 52ef995f1f..83d0fed432 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -2433,8 +2433,8 @@ Representerer området: %1$s x %2$s \n Ønsker du å fortsette med ny registrering? OSM-notater (på nett) Flytt til historikk - Gruppe vil bli fjernet etter omstart - Vis veiledningslinje + Gruppen blir fjernet etter neste start av programmet. + Vis hjelpelinjer Vis piler på kartet Vis passerte Skjul passerte @@ -2565,19 +2565,19 @@ Representerer området: %1$s x %2$s Fullskjermmodus Vis på topplinjen Utseende på kartet - Legg til gruppe + Legg til en gruppe Importer grupper To Én - Favorittergruppe - Markører på kartet! - Marker steder på kartet med et trykk. + Favoritterkategori + Opprett kartmarkører! + Lang eller kort-trykk steder, deretter trykk markørflaggknappen. Markører markert som passert vises på denne skjermen. - Antall sifre + Antall desimaler Høyre Venstre Lim inn - Skift automatisk til det neste feltet etter å ha angitt %1$d sifre etter desimaltegnet. + Skift automatisk til det neste feltet etter å ha angitt %1$d desimaler. %1$d sifre Gå til neste felt Gi nytt navn til markør From 5cdaf670d5138dcfc023563f5770f60859c2360a Mon Sep 17 00:00:00 2001 From: ezjerry liao Date: Sun, 19 Nov 2017 22:21:59 +0000 Subject: [PATCH 129/157] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2502 of 2502 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 000ecbab88..327f7cd520 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -2884,7 +2884,7 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式 匯出您的標記到檔案,您可以在這裡指定: 另存為軌跡 移至歷程 - 重新啟動後群組將被移除 + 在下一次應用程式重新啟動後,群組才會被移除。 標記 座標格式 使用系統鍵盤 From 7d7e21c43be3b79c2dcb9e646c7e2e20ff39a180 Mon Sep 17 00:00:00 2001 From: jan madsen Date: Sun, 19 Nov 2017 18:01:35 +0000 Subject: [PATCH 130/157] Translated using Weblate (Danish) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-da/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 351f68678d..a27f071f41 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -2900,7 +2900,7 @@ Repræsenterer område: %1$s x %2$s Eksporter markører til den angivne fil: Gem som spor Flyt til historik - Gruppen vil blive fjernet efter genstart + Gruppen vil blive fjernet efter næste genstart. Markører Koordinatformat Brug systemtastaturet @@ -2963,7 +2963,7 @@ Repræsenterer område: %1$s x %2$s Tilføj en gruppe Importer grupper fra favoritter eller et spor af rutepunkter. Opret kortmarkører! - Lange eller korte tryk steder, og tryk derefter på markør flag knappen. + Langt eller kort tryk på steder, og tryk derefter på markørflag knappen. Importer grupper Importer favoritgrupper eller et spor af rutepunkter som markører. \@string/shared_string_history From 63b6fef7c0e05aae46bc3990050b7aad74ca0110 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Mon, 20 Nov 2017 09:20:29 +0000 Subject: [PATCH 131/157] Translated using Weblate (Esperanto) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-eo/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index c531d6612f..4e39eef58a 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -2821,7 +2821,7 @@ Indikas lokon: %1$s x %2$s" Elporti map-markojn al dosiero difinita tie ĉi: Konservi kiel kurson Movi al historio - Grupo estos forigita post restarto + Grupo estos forigita post la sekva restarto de la aplikaĵo. Aldoni kopion de komenc-punkto kiel celon. Fermita ekskurso Navigi @@ -2854,7 +2854,7 @@ Indikas lokon: %1$s x %2$s" Frapeti la mapon por baskuli butonojn kaj fenestraĵojn. Plenekrana reĝimo Montri en supra breto - Marki pasigitajn + Marki kiel pasigitan Alinomi markon Nombro da dekumaj pozicioj Dekstre From 652e8a87f12cbe9c7780d5322a84ef8d7386f615 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Sun, 19 Nov 2017 15:00:09 +0000 Subject: [PATCH 132/157] Translated using Weblate (French) Currently translated at 100.0% (2502 of 2502 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 6f3818f599..ab6d2c6153 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -1776,7 +1776,7 @@ Voulez-vous effectuer à une nouvelle inscription ? Action {0} Vidéo Photo - Publié + sortit le Liste simple Visiter après Visiter avant @@ -2065,7 +2065,7 @@ Voulez-vous effectuer à une nouvelle inscription ? Mise à jour Lire plus - Quoi de neuf dans + Quoi de neuf en version Objets proposés Macédonien Frison occidental From 3c998240df9a15401f170205bf120ec0677625ce Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Mon, 20 Nov 2017 13:47:50 +0000 Subject: [PATCH 133/157] Translated using Weblate (Hebrew) Currently translated at 64.3% (1609 of 2502 strings) --- OsmAnd/res/values-he/strings.xml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index 117ab5610d..88a36b9abe 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -1477,14 +1477,14 @@ שינוי שם סמן נגיעה במפה מחליפה את תצוגת הכפתורים והווידג׳טים. הופעה על המפה - נא לבחור נקודות דרך במסלול שאותן OsmAnd יצרף לסמנים - נא לבחור קבוצות מועדפים להוספה לסמנים. + נא לבחור נקודות דרך במסלול שאותן OsmAnd יצרף לסמנים. (המסלולים המוצגים הם בעלי נקודות דרך בלבד.) + נא לבחור קטגוריה מועדפת להוספה לסמנים. נקודות דרך במסלול - קבוצת מועדפים + קטגוריית מועדפים הוספת קבוצה - ניתן להוסיף קבוצת מועדפים או נקודות דרך של מסלול. - סמנים במפה! - ניתן לסמן מקומות במפה בנגיעה. + ניתן לייבא קבוצות ממועדפים או נקודות דרך של מסלול. + ליצור סמנים במפה! + ניתן לסמן מקומות במפה בנגיעה קצרה או ארוכה ולאחר מכן ללחוץ על כפתור דגל הסמן. ייבוא קבוצות ניתן לייבא קבוצות מועדפים או נקודות דרך במסלול כסמנים. שניים @@ -1995,4 +1995,12 @@ עולה תאריך ההוספה סידור לפי: + מתבצע חיפוש אחר מסלולים עם נקודות דרך + עוד + לא לשלוח סטטיסטיקת שימוש אלמונית + הוספת הערה + פתיחת הערה מחדש + סגירת הערה + ההערה נוצרה בהצלחה + אירעה שגיאה: ההערה לא נוצרה From ef841ccef19ac6d14402b4cd068a00f11c2e4704 Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Mon, 20 Nov 2017 11:34:12 +0000 Subject: [PATCH 134/157] Translated using Weblate (Italian) Currently translated at 95.2% (2384 of 2502 strings) --- OsmAnd/res/values-it/strings.xml | 36 +++++++++++++++----------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 43524013a7..6d10aff29d 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -1079,7 +1079,7 @@ Memoria in proporzione %4$s MB (limite di Android %5$s MB, Dalvik %6$s MB).Utilizza il sensore magnetico (bussola) Linee isoipse Riduce il rumore delle letture della bussola ma introduce dell\'inerzia - Uso del filtro di Kalman + Usa il filtro di Kalman Prego attendere il termine dell\'operazione orario Accuratezza @@ -1302,10 +1302,10 @@ Memoria in proporzione %4$s MB (limite di Android %5$s MB, Dalvik %6$s MB).Formato non valido: %s ID univoco del dispositivo Configura le impostazioni di monitoraggio e imposta il canale di monitoraggio personale. - Questo componente aggiuntivo fornisce parzialmente le funzionalità del monitoraggio di OpenStreetMap, vedi http://osmo.mobi. -\n -\nPuoi tracciare in tempo reale tutti i dispositivi di un gruppo di partecipanti. Puoi anche visualizzare i punti e le tracce caricate dal gruppo a cui appartieni. -\n + Questo componente aggiuntivo fornisce parzialmente le funzionalità del monitoraggio di OpenStreetMap, vedi http://osmo.mobi. +\n +\nPuoi tracciare in tempo reale tutti i dispositivi di un gruppo di partecipanti. Puoi anche visualizzare i punti e le tracce caricate dal gruppo a cui appartieni. +\n \nIl gruppo che non è stato rimosso da mesi viene allineato con le tue regole per la creazione di gruppi nel sito OsMo.mobi Monitoraggio OpenStreetMap OsMO @@ -1367,7 +1367,7 @@ Memoria in proporzione %4$s MB (limite di Android %5$s MB, Dalvik %6$s MB).Invia le mie posizioni Accesso rapido ad OsMo - Salvare i punti come file GPX o importare i waypoint nei favoriti? + Salvare i punti come file GPX o importare i punti intermedi nei favoriti? Rosa @@ -1384,7 +1384,7 @@ Memoria in proporzione %4$s MB (limite di Android %5$s MB, Dalvik %6$s MB).Per creare dei gruppi è necessario essere utenti registrati di OsMo. Le tue credenziali di OsMo non sono valide. Sei sicuro di voler rigenerare gli id personali? Tutti i dispositivi collegati a te non saranno più in grado di tracciarti. - Rigenera l\'id + Rigenera l\'id dell\'utilizzatore Cancella l\'obiettivo mobile Centra nello schermo Imposta come obiettivo mobile @@ -1462,10 +1462,8 @@ Memoria in proporzione %4$s MB (limite di Android %5$s MB, Dalvik %6$s MB). Per favore leggere prima di creare un gruppo! Errore di autorizzazione OsMo: %1$s. - -Potrebbe essere un disservizio temporaneo oppure che la registrazione è scaduta. - -Vuoi procedere con una nuova registrazione? +\n Potrebbe essere un disservizio temporaneo oppure che la registrazione è scaduta. +\n Vuoi procedere con una nuova registrazione? Edifici Strade non carrabili Testo @@ -1572,10 +1570,10 @@ Vuoi procedere con una nuova registrazione? Tolleranza del limite di velocità Seleziona il valore di superamento del limite di velocità dal quale si desidera avere l\'avviso vocale. Dispositivo non trovato - Connessione al server OsMo non riuscita: -- controlla la connessione a Internet; -- controlla le impostazioni; -- contattaci su Twitter: https://twitter.com/OsMomobi + Connessione al server OsMo non riuscita: +\n- controlla la connessione a Internet; +\n- controlla le impostazioni; +\n- contattaci su Twitter: https://twitter.com/OsMomobi Un utente anonimo non può:\n- creare gruppi;\n- sincronizzare con il server gruppi e dispositivi;\n- gestire gruppi e dispositivi nel pannello di controllo sul sito. Utente anonimo Registrato come %1$s @@ -1791,7 +1789,7 @@ Attivando questa vista lo stile della mappa diventerà \'Inverno e sci\', mostra Visita prima Compatta Azione crea - Modificato + Azione modifica Azione elimina Modifiche OSM h @@ -2962,10 +2960,10 @@ Rappresenta l\'area: %1$s x %2$s Marcatore superato può essere importato come Luogo Preferito oppure come file traccia. Visualizzazione nella mappa - Scegli una traccia per aggiungere punti intermedi ai marcatori. (Saranno elencate solo tracce con punti intermedi.) - Scegli quale gruppo di luoghi preferiti da aggiungere ai marcatori. + Scegli una traccia per aggiungerne i punti intermedi ai marcatori. (Saranno elencate solo tracce con punti intermedi.) + Scegli una categoria di luoghi preferiti da aggiungere ai marcatori. Punti intermedi della traccia - Gruppo di luoghi preferiti + Categoria di luoghi preferiti Aggiungi un gruppo Puoi importare un gruppo dai preferiti o i punti intermedi di una traccia. Crea i marcatori nella mappa! From 501e3debdc1a10ddfe6f5ff3c9b0df90547c4448 Mon Sep 17 00:00:00 2001 From: iman Date: Sun, 19 Nov 2017 20:06:27 +0000 Subject: [PATCH 135/157] Translated using Weblate (Persian) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-fa/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 03c8d460da..41ca045254 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -1152,7 +1152,7 @@ فایل محلی برای نگهداری تغییرات POI وجود ندارد و قابل‌ایجاد نیست. فایل‌های نقشهٔ موجود در سایت با نسخهٔ فعلی نرم‌افزار سازگار نیست. لطفاً برای دانلود و استفاده از نقشه‌ها، نرم‌افزار را به نسخهٔ جدیدتر ارتقا دهید. - جست‌وجو با نامی‌ناتیم + جست‌وجوی آنلاین با Nominatim داده‌های آفلاین نقشه روی کارت حافظه وجود ندارد. لطفاً برای استفاده از نقشه‌های آفلاین، آن را دانلود کنید. " @@ -2596,7 +2596,7 @@ ذخیره شد نشانه‌هایتان را در یک فایل ذخیره کنید. نام فایل را بنویسید: فرستادن به سابقه - گروه بعد از راه‌اندازی مجدد حذف می‌شود + گروه با راه‌اندازی مجدد برنامه حذف می‌شود. نزولی مسافت تا نشانه‌ها و جهت‌گیری به‌سمت آن‌ها چگونه روی نقشه نشان داده شود: آستانهٔ تغییر جهت نقشه From d7570706a23338c62df07ac1047c70d1a1b627f3 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Mon, 20 Nov 2017 11:46:30 +0000 Subject: [PATCH 136/157] Translated using Weblate (Russian) Currently translated at 96.0% (2403 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 185 +++++++++++++++++-------------- 1 file changed, 102 insertions(+), 83 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 0b0a866fc6..97c68fd938 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -51,7 +51,7 @@ OsmAnd собирает информацию о том, какие вы используете части приложения. Ваше местоположение никогда не отправляется, как и все, что вы вводите, какие области читаете, что ищете или скачиваете. Не отсылать анонимную статистику использования Авто - Правосторонняя навигация + Правостороннее движение Видимые Восстановить покупки Шрифты для карты @@ -292,21 +292,23 @@ Планируемые объекты - "Этот плагин обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.\n\nГлобальные данные (между 70 градусами на севере и 70 градусами на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer) — инструментом визуализации Terra, флагманского спутника Системы Наблюдения Земли NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), а также Космических Систем Японии (J-spacesystems). " + Этот плагин обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта. +\n +\nГлобальные данные (между 70 градусами на севере и 70 градусами на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer) — инструментом визуализации Terra, флагманского спутника Системы Наблюдения Земли NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), а также Космических Систем Японии (J-spacesystems). Рассмотрите, пожалуйста, покупку плагина \"Линии высот\" в Google Play, чтобы поддержать последующую разработку. Линии высот Запись видео Запись аудио - Выбрать действие по умолчанию для виджета + Выбрать действие по умолчанию для виджета. Действие по умолчанию для виджета - Выбрать формат видео + Выбрать формат видео. Формат видео - Использовать системную программу для записи видео + Использовать системное приложение для записи видео. Использовать системную программу - Настройка аудио и видео + Настройка аудио и видео. Произошла ошибка при записи Камера недоступна - Аудио-видео записывается. Для остановки нажмите \"стоп\". + Аудио/видео записывается. Для остановки нажмите AV виждет. Проигрывается аудио.\n%1$s Открыть внешний проигрыватель Вы хотите удалить эту запись? @@ -322,7 +324,7 @@ Аудио заметки OsmAnd плагин для линий высот Измерение расстояний - Текущее местоположение для заметки ещё не определено. Используйте контекстное меню для привязки заметки к определённой точке + Текущее местоположение для заметки ещё не определено. Используйте контекстное меню для привязки заметки к определённой точке. Аудио заметки Плагин аудио/видео заметки предоставляет функциональные возможности по созданию аудио/фото/видео записей во время поездки, либо с помощью кнопки на экране карты, либо непосредственно через контекстное меню для любой позиции на карте. Аудио-видео заметки @@ -330,7 +332,7 @@ Линии высот Линии высот Границы - Скрыть региональные границы (admin levels 5-9) + Скрыть региональные границы (admin levels 5-9). Здания не найдены. Выберите город Поиск по деревням и почт. индексу @@ -362,14 +364,18 @@ Использовать онлайн карты (загрузка и кэширование на SD-карте) Онлайн карты Настройки источников онлайн карт и слоёв - "С помощью этого плагина можно получить доступ ко множеству видов онлайн-карт (тайловых или растровых), от предопределенных тайловых OpenStreetMap (Mapnik) до спутниковых снимков и слоев специального назначения, таких как карты погоды, климатические карты, геологических карты, слои затемнения высот и т. д.\n\nЛюбая из этих карт может быть использована в качестве основной (базовой) карты для отображения на экране OsmAnd или в виде наложения или подложки к другой базовой карте (например стандартной офлайн-карте OsmAnd). Чтобы сделать какую-либо подложку лучше видимой, некоторые элементы векторной карты OsmAnd могут быть по желанию легко скрыты через меню «Настройка карты».\n\nТайловые карты можно получить непосредственно с помощью онлайн-источников или подготовить для использования в автономном режиме (и вручную скопировать в папку данных OsmAnd) в виде базы данных sqlite, которая может быть создана с помощью различных инструментов подготовки карт сторонних производителей. " + С помощью этого плагина можно получить доступ ко множеству видов онлайн-карт (тайловых или растровых), от предопределенных тайловых OpenStreetMap (Mapnik) до спутниковых снимков и слоев специального назначения, таких как карты погоды, климатические карты, геологических карты, слои затемнения высот и т. д. +\n +\nЛюбая из этих карт может быть использована в качестве основной (базовой) карты для отображения на экране OsmAnd или в виде наложения или подложки к другой базовой карте (например стандартной офлайн-карте OsmAnd). Чтобы сделать какую-либо подложку лучше видимой, некоторые элементы векторной карты OsmAnd могут быть по желанию легко скрыты через меню «Настройка карты». +\n +\nТайловые карты можно получить непосредственно с помощью онлайн-источников или подготовить для использования в автономном режиме (и вручную скопировать в папку данных OsmAnd) в виде базы данных sqlite, которая может быть создана с помощью различных инструментов подготовки карт сторонних производителей. Этот плагин предоставляет навигацию и запись маршрутов в энергосберегающем режиме. Плагин работает в фоновом режиме и периодически активизирует GPS для записи маршрута или воспроизведения голосовых команд. "Плагин добавляет поддержку специальных возможностей устройства непосредственно в OsmAnd. Это облегчает, например, регулировку скорости речи для голоса TTS, настройку направленности экрана навигации, управление масштабом при помощи трекбола или использование голосовых команд обратной связи для авто аннотации вашего местоположения." Плагин отображает параметры для разработки и отладки функций, таких как, проверка или моделирование маршрута, отображение производительности отрисовки, проверка голосовых подсказок. Эти настройки предназначены для разработчиков и не требуются для обычного пользователя. Плагины Плагины активируют дополнительные возможности приложения Плагины - Плагин для работы с OSM. Позволяет создавать и редактировать POI, создавать и комментировать неточности OSM Bugs, выгружать треки GPX (требует учётные данные OSM). + С помощью этого плагина OsmAnd может быть использован для улучшения OSM через создание или изменение объектов OSM POI, открытие или комментирование OSM заметок, а также отправку записанные GPX файлов. OSM развивается обществом, глобальный проект создания карты общей собственности. Для получения дополнительной информации, пожалуйста, обращайтесь на https://openstreetmap.org. Активное участие ценится, и взносы могут быть сделаны непосредственно через OsmAnd, если вы укажете свои учетные данные OSM в настройках. Векторные карты могут отображаться быстрее. Поддерживается не всеми устройствами. Воспроизвести команды выбранным голосом Отладка и разработка @@ -476,7 +482,9 @@ Не нужно Отсутствует базовая карта, покрывающая весь мир на мелком масштабе. Пожалуйста загрузите World_basemap_x.obf для полноценный работы приложения. Локальные данные отсутствуют на SD-карте. Пожалуйста, загрузите их для того, чтобы использовать приложение без Интернета. - \n\nНажать и удерживать для вызова меню + " +\n +\nДолго удерживайте для настроек" Загружено %1$d из %2$d объектов успешно архивированы. %1$d из %2$d объектов успешно удалены. @@ -711,7 +719,7 @@ Фильтр Звук Без звука - Выберите язык голосовых инструкции для навигации + Выберите язык голосовых инструкции для навигации. Голосовые данные Инициализируются голосовые данные… Голосовые данные не поддерживаются текущей версией приложения @@ -834,14 +842,14 @@ Настройка данных: язык, обновление данных Данные Редактирование OSM - Автоматически изменять масштаб карты при изменении скорости + Автоматически изменять масштаб карты при изменении скорости (пока карта синхронизирована с текущей позицией). Автомасштаб Дополнительные настройки - Сохранить текущий трек на SD-карту сейчас + Сохранить текущий трек на SD-карту сейчас. Сохранить текущий трек GPX - Выберите интервал для записи трека во время навигации + Выберите интервал для записи трека во время навигации. Интервал записи во время навигации - Во время навигации треки будут автоматически сохранены в папку с треками в формате GPX + Во время навигации треки GPX будут автоматически сохранены в папку с треками. Автозапись трека во время навигации Обновить карту Обновить часть карты @@ -1058,7 +1066,8 @@ PM AM Точка парковки - Плагин парковочное место позволит вам легко запомнить, когда автомобиль был припаркован и сколько времени осталось, если парковка ограничена по времени. Вы можете найти место и время парковки на карточке домашней страницы и на карте с помощью виджета.\nТак же он добавляет уведомление в календарь, в случае, если вы хотите получить напоминание о нём. + Плагин парковочное место позволит вам легко запомнить, когда автомобиль был припаркован и сколько времени осталось, если парковка ограничена по времени. +\nВы можете найти место и время парковки на карточке домашней страницы и на карте с помощью виджета. Для напоминания в календарь может быть добавлено уведомление. Парковочное место Пометить место парковки Удалить метку места парковки @@ -1072,7 +1081,7 @@ Часов Минут Машина припаркована в - Использовать навигацию по компасу, если направление не определено + Использовать компас, если невозможно иначе определить направление. Использовать компас Маршрут будет пересчитан после определения местоположения Предыдущий маршрут не был закончен. Продолжить следование по нему? (%1$s секунд) @@ -1109,7 +1118,7 @@ Избегать паромов Избегать при прокладке маршрута… Избегать платных и просёлочных дорог, паромов - Показывать ограничения скорости, камеры и искусственные неровности + Настройка оповещений (ограничения скорости, вынужденные остановки, искусственные неровности), камеры скорости, информацию о полосах. Флуоресцентные маршруты Показывать сигналы… Линейка @@ -1131,7 +1140,7 @@ OsmAnd - это навигационное приложение для путешествий с открытым исходным кодом " OsmAnd+ (Open Street Maps Automated Navigation Directions) OsmAnd+ - это навигационное приложение с открытым исходным кодом и доступом к картам и данным на основе (OpenStreetMap). Все данные карт (векторные или растровые) могут быть сохранены на карту памяти устройства для использования без подключения к Интернет. OsmAnd также предоставляет оффлайн и онлайн средства построения маршрута включая голосовые инструкции по маршруту. OsmAnd+ оплаченная версия программы, означает, что вы поддерживаете проект, финансируя разработку нового функционала и получаете последние обновления. Некоторые из основных возможностей приложения: - работа с векторными и растровыми картами без доступа в Интернет (для этого нужно предварительно сохранить карты на карту памяти устройства); - доступность компактных векторных карт для всех стран мира; - неограниченная загрузка векторных и растровых карт для страны или области из самого приложения; - достопримечательности из Wikipedia без доступа в Интернет (необходимо предварительно загрузить Wikipedia POI); - отображение дополнительной информации (слоёв) на карте, такой как GPX или навигационные маршруты, объекты (POI), избранные местоположения, линии высот, остановки общественного транспорта; наложение дополнительных карт с настраиваемой прозрачностью; - поиск адресов и объектов (POI) без доступа в Интернет; - построение маршрутов на небольшие расстояния без доступа в Интернет (экспериментальная функция); - режимы автомобиля, велосипеда и пешехода с возможностями: - автоматического переключения на дневной/ночной режим отрисовки карты; - изменения масштабы карты в зависимости от скорости; - вращения карты по компасу или направлению движения; - использования голосовых команд (воспроизводимых записанными или TTS голосами) при движении по маршруту; - предупреждения о превышении допустимой скорости движения. " Избегать автомагистралей - Привязывать текущую позицию к дороге + Привязывать текущую позицию к дороге. Привязка к дороге Промежуточный пункт %1$s слишком далеко от ближайшей дороги. Вы достигли промежуточного пункта @@ -1178,7 +1187,9 @@ Сделать фото Плагин Dropbox позволяет синхронизировать треки и видео/аудио заметки с вашим аккаунтом Dropbox. Плагин Dropbox - "Плагин обеспечивает наложение контурных линии и (рельефа) затемняющего слоя, которые будут отображаться поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.\n\nГлобальные данные (между 70 градусов на севере и 70 градусов на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), инструментом визуализации Terra, флагманского спутника Земли системы наблюдения NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), космических систем Японии (J-spacesystems). " + Плагин обеспечивает наложение контурных линии и (рельефа) затемняющего слоя, которые будут отображаться поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта. +\n +\nГлобальные данные (между 70 градусов на севере и 70 градусов на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), инструментом визуализации Terra, флагманского спутника Земли системы наблюдения NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), космических систем Японии (J-spacesystems). Фото %1$s %2$s Аудио/Видео данные Вы уверены, что хотите остановить навигацию? @@ -1187,12 +1198,12 @@ Пожертвуйте, чтобы увидеть новые опции реализованными в приложении Включите, для расчёта точных маршрутов без затруднений. Всё ещё ограниченн расстоянием и медленный. Затенение рельефа - Использовать системную программу для фото + Использовать системное приложение для фото. Использовать приложение Камера OpenMaps - Европа Предпочитать автомагистрали Предпочитать… - Предпочитать автомагистрали + Предпочитать автомагистрали. отмечено не отмечено Время прибытия @@ -1204,7 +1215,7 @@ В настоящее время нет соединения по Wi-Fi. Хотите использовать текущее интернет-соединение для загрузки? Запись поездок Настройки записи поездок - Выбор темы приложения + Выбор темы приложения. Тема приложения Настройка специальных возможностей Выбор адреса @@ -1213,11 +1224,11 @@ Выберите по запросу OsmAnd карты и навигация OsmAnd+ карты и навигация - Уменьшает \"шум\" компаса, но добавляет инерцию + Уменьшает \"шум\" компаса, но добавляет инерцию. Использовать фильтр Калмана Прекратить навигацию Использовать датчик магнитного поля - Удалить пункт + Удалить точку время скорость точность @@ -1243,11 +1254,11 @@ Сохранение POI в OsmChange-файл высота OsmChange-файл создан за %1$s - * Нажмите, чтобы отметить точку. -\n* Нажмите и удерживайте на карте, чтобы удалить предыдущую точку. -\n* Нажмите и удерживайте на точке, чтобы просмотреть и добавить описание. + * Нажмите, чтобы отметить точку. +\n* Долго удерживайте на карте, чтобы удалить предыдущую точку. +\n* Долго удерживайте на точке, чтобы просмотреть и добавить описание. \n* Нажмите на виджет измерения, чтобы увидеть больше действий. - Использовать магнитный датчик вместо датчика ориентации + Использовать магнитный датчик вместо датчика ориентации. Другие Контурные линии Загрузка @@ -1278,12 +1289,12 @@ У вас уже установлены промежуточные пункты. Названия улиц (TTS) Объявлять… - Настройка озвучивания названий улиц, предупреждений (лежачих полицейских, знаков \"Движение без остановки запрещено\"), камер контроля скорости, ограничений скорости + Настройка озвучивания названий улиц, предупреждений (лежачих полицейских, знаков \"Движение без остановки запрещено\"), камер контроля скорости, ограничений скорости. Маршрутные точки GPX Пожалуйста, укажите в настройках пароль и имя пользователя OSM Карта: Пароль OSM (опционально) - Выберите регион вождения: США, Европа, Великобритания, Азия и другие + Выберите регион вождения: США, Европа, Великобритания, Азия и другие. Регион вождения Япония США @@ -1321,31 +1332,31 @@ К крупному плану К среднему плану К дальнему плану - Избегать автомагистралей + Избегать автомагистралей. Избегать автомагистралей Предпочитать автомагистрали - Предпочитать автомагистрали + Предпочитать автомагистрали. Избегать платных дорог - Избегать платных дорог + Избегать платных дорог. Избегать грунтовых дорог - Избегать грунтовых дорог + Избегать грунтовых дорог. Избегать паромов - Избегать паромов + Избегать паромов. Максимальная масса - Укажите массу автомобиля для учёта при построении маршрута + Укажите массу автомобиля для учёта при построении маршрута. Отображение карты Навигационные знаки (водоемы) Отключить сложную маршрутизацию - Укажите скорость произношения для TTS + Укажите скорость произношения для TTS. Настройки навигации Настройки маршрутизации Грузовик Рассчитать оффлайновый маршрут OsmAnd Копирование файлов данных OsmAnd… Скорость произношения - Выберите профили, видимые в приложении + Выберите профили, видимые в приложении. Профили приложения Выберите существующий… Задать/отредактировать … @@ -1354,7 +1365,7 @@ \n Примечание 2: При переносе файлов в новое хранилище совместное использование файлов OsmAnd и OsmAnd+ не возможно. Копирование файла (%s) на новое место… Копирование файлов данных OsmAnd на новое место (%s)… - Отключение 2-фазной маршрутизации для автомобильной навигации + Отключение 2-фазной маршрутизации для автомобильной навигации. Быстрое построение маршрута не удалось (%s), отмените для возврата к медленному построению. Масштаб Выберите GPX… @@ -1420,11 +1431,11 @@ Голос Разное Локализация - Прерывание музыки во время объявления навигации + Голосовые подсказки приостанавливают музыку, а не только приглушают ее. Прерывание музыки Поделиться маршрутом используя файл GPX Ключ доступа - Настройка параметров мониторинга и установка персонального канала мониторинга + Настройка параметров мониторинга и установка персонального канала мониторинга. Этот плагин предоставляет некоторые функциональные возможности для мониторинга OpenStreetMap см. https://osmo.mobi \n \nВы можете отслеживать все устройства, включенные в группу в режиме реального времени. Вы также можете увидеть точки и маршруты, загруженные в вашу группу. @@ -1474,7 +1485,7 @@ дней Интервал отправки Группа OsMo - Выберите временной интервал для отправки местоположения + Выберите временной интервал для отправки позиции. OpenStreetMap Мониторинг Поделиться текущей сессией в браузере Поделиться сессией @@ -1508,7 +1519,7 @@ Пользователь %1$s присоединился к группе %2$s Пользователь %1$s покинул группу %2$s Показывать извещения группы - Показывать сообщения, когда пользователь присоединяется или покидает группу + Показывать сообщения, когда пользователь присоединяется или покидает группу. Правила Быстрый доступ к OsMo Отменить движущуюся цель @@ -1535,12 +1546,14 @@ Сохранить как группу избранных Выберите пункты назначения Метки точек - \n\nНажать и удерживать для просмотра на карте + " +\n +\nДолго удерживайте для просмотра на карте" Путевые точки: %1$s %1$s точек Точка %1$s %1$s \nМаршрутных точек %2$s - Показывать кнопки изменения масштаба во время навигации + Показывать кнопки изменения масштаба во время навигации. Кнопки масштаба Сортировать по дистанции Сортировать по имени @@ -1561,14 +1574,14 @@ Отображать ограничения доступа Отображать веломаршруты Сбой авторизации - Предпочтительный язык для меток на карте (если он не доступен, то английский язык или местные названия) + Предпочтительный язык для меток на карте (если он не доступен, то английский язык или местные названия). Предпочтительный язык на карте Суахили Иврит Вперёд Домашняя страница Пожалуйста, прочтите перед созданием группы! - Автоматическое подключение к сервису при запуске приложения + Автоматическое подключение к сервису при запуске приложения. Автоматическое подключение Сервис OsMo Местные названия @@ -1605,8 +1618,8 @@ Пожалуйста, укажите ID Продолжить навигацию Приостановить навигацию - Визуализация пути по шкале SAC - Визуализация пути согласно трассам OSMC + Визуализация пути по шкале SAC. + Визуализация пути согласно трассам OSMC. Пораньше Как обычно Попозже @@ -1642,12 +1655,13 @@ Продолжительность Запись трека в файл GPX Интервал записи - Общие положения записи в файл GPX могут быть включены или выключены с помощью виджета записи GPX на экране карты - "Плагин активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на экране карты, или также автоматически записывает все ваши маршруты навигации в файл GPX. -\n\nЗаписанными треками можно поделиться с вашими друзьями или использовать их для вклада в OSM. Спортсмены могут использовать записанные треки для контроля за тренировками. Некоторый базовый анализ треков может быть выполнен непосредственно в OsmAnd, например, время прохождения круга, средняя скорость и т.д., треки, конечно, позднее также могут быть проанализированы в специальных инструментах анализа сторонних производителей. " + Общая запись позиции в файл GPX может быть включена или выключена с помощью виджета записи GPX на экране карты. + "Плагин активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на экране карты, или также автоматически записывает все ваши маршруты навигации в файл GPX. +\n +\nЗаписанными треками можно поделиться с вашими друзьями или использовать их для вклада в OSM. Спортсмены могут использовать записанные треки для контроля за тренировками. Некоторый базовый анализ треков может быть выполнен непосредственно в OsmAnd, например, время прохождения круга, средняя скорость и т.д., треки, конечно, позднее также могут быть проанализированы в специальных инструментах анализа сторонних производителей." Online OSM карта с картинками Всегда спрашивать - Выберите интервал для записи трека (включается через виджет записи GPX на карте) + Выберите интервал для записи трека (включается через виджет записи GPX на карте). Общий интервал записи трека Ограничение скорости Пограничный контроль @@ -1690,14 +1704,14 @@ Избегать дороги… %1$s необходимо это разрешение, чтобы выключить экран для экономии энергии. Авто-включение экрана перед поворотом - Включать экран устройства (если отключён) при приближении к повороту + Включать экран устройства (если отключён) при приближении к повороту. Карты доступные для обновления: %1$s Координаты Домой Поиск Все файлы обновлены Использовать OpenGL для рендеринга - Использовать аппаратное ускорение OpenGL для рендеринга (может не работать на некоторых устройствах) + Использовать аппаратное ускорение OpenGL для рендеринга (может не работать на некоторых устройствах). Загрузка невозможна. Проверьте подключение к Интернет. Загрузки Обновления @@ -1720,7 +1734,7 @@ Атлас дорог Германии Атлас дорог Америки Не использовать маршрутизацию версии 1.9 - Не использовать для построение маршрута алгоритм представленный в версии 1.9 + Не использовать для построения маршрута алгоритм представленный в версии 1.9. Показывать ж/д переезды Показывать пешеходные переходы Железнодорожный переезд @@ -1730,16 +1744,16 @@ Вы можете выбрать альтернативный маршрут, выбрав дороги, которые стоит избегать Запись трека по требованию Прокси-сервер - Настройка интернет соединения через прокси-сервер + Настройка интернет соединения через прокси-сервер. Приватность Включить HTTP прокси-сервер - Настройка HTTP прокси-сервера для всех сетевых запросов + Настройка HTTP прокси-сервера для всех сетевых запросов. Адрес прокси-сервера - Настройте имя хоста вашего прокси-сервера (например, 127.0.0.1) + Настройте имя хоста вашего прокси-сервера (например, 127.0.0.1). Порт прокси-сервера - Настройте номер порта вашего прокси-сервера (например, 8118) + Настройте номер порта вашего прокси-сервера (например, 8118). Уличное освещение - Скачать ночные сборки + Скачать ночные сборки. Сборки Моё местоположение Статус GPS @@ -1757,7 +1771,7 @@ Для отображения лыжных карт необходимо загрузить данные специализированные карты Для отображения морских карт необходимо загрузить данные специализированные карты Память устройства - "Свободно %1$s " + Свободно %1$s Только дороги Онлайн карта Не удалось переименовать. @@ -1848,11 +1862,16 @@ Укажите время задержки на экране планирования маршрута. Задержка начала навигации… Поехали - "Плагин расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта. -\n\nСпециальная дополнительная карта для OsmAnd добавляет морские навигационные и условные знаки как для внутренней, так и для прибрежной навигации. Описание навигационных отметок содержит информацию, необходимую для их идентификации, а также их характеристики (категория, форма, цвет, последовательность мерцания огней и т.д.).\n\nЧтобы вернуться к одному из традиционных стилей карт в OsmAnd, просто деактивируйте этот плагин или измените на желаемый \"Стиль карты\" в разделе \"Настройка карты\". " + Плагин расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта. +\n +\nСпециальная дополнительная карта для OsmAnd добавляет морские навигационные и условные знаки как для внутренней, так и для прибрежной навигации. Описание навигационных отметок содержит информацию, необходимую для их идентификации, а также их характеристики (категория, форма, цвет, последовательность мерцания огней и т.д.). +\n +\nЧтобы вернуться к одному из традиционных стилей карт в OsmAnd, просто деактивируйте этот плагин или измените на желаемый \"Стиль карты\" в разделе \"Настройка карты\". Вы собираетесь отправить %1$d изменений в OSM. Вы уверены? Вы хотите очистить историю? - "Плагин обеспечивает вам доступ к данным о горнолыжных трассах, маршрутах для беговых лыж, альпийских спусках, фуникулерах и горнолыжных подъемниках. Маршруты и спуски отмечены разными цветами в зависимости от их сложности и изображены с использованием специального \"зимнего\" стиля карты, который заключается в том, что используются \"снежные\" цвета зимнего пейзажа.\n\nВ случае активации этого вида, стиль карты меняется на \"Winter and ski\", показывая все детали пейзажа так, как они выглядят зимой. Такой (зимний) вид может быть отменен либо путем деактивации здесь, либо если вы поменяете \"Стиль карты\" в меню \"Настройка карты\" на желаемый вид. " + Плагин обеспечивает вам доступ к данным о горнолыжных трассах, маршрутах для беговых лыж, альпийских спусках, фуникулерах и горнолыжных подъемниках. Маршруты и спуски отмечены разными цветами в зависимости от их сложности и изображены с использованием специального \"зимнего\" стиля карты, который заключается в том, что используются \"снежные\" цвета зимнего пейзажа. +\n +\nВ случае активации этого вида, стиль карты меняется на \"Winter and ski\", показывая все детали пейзажа так, как они выглядят зимой. Такой (зимний) вид может быть отменен либо путем деактивации здесь, либо если вы поменяете \"Стиль карты\" в меню \"Настройка карты\" на желаемый вид. Имя группы должно быть минимум 3 символа! Текущий маршрут Скачать карты @@ -1891,9 +1910,9 @@ Напечатайте для поиска Номера домов - Избегать пересечения границы с другой страной + Избегать пересечения границы с другой страной. Ограничение высоты - Укажите высоту автомобиля для учёта при построении маршрута + Укажите высоту автомобиля для учёта при построении маршрута. Умный перерасчет маршрута Перерасчет только начальной части маршрута для длительных поездок Удалить правки OSM @@ -2110,7 +2129,7 @@ Удалить точку GPX? Редактировать точку GPX Избегать лестниц - Избегать лестниц + Избегать лестниц. Избегать пересечения границы Обновлять каждые Загружать только через WiFi @@ -2256,7 +2275,7 @@ Интеллектуальное автооповещение Уведомлять только при изменении направления на целевую точку. Период автооповещений - Минимальное время между оповещениями + Минимальное время между оповещениями. Не пересчитывать маршрут при сходе с него Предотвращает автоматический пересчет маршрута после того, как вы покинули его. Не пересчитывать маршрут при обратном направлении движения @@ -2314,7 +2333,7 @@ Начать от Подписывайтесь на нас - Она нужна нам, чтобы предоставить вам информацию о взносах + Необходимо предоставить информацию о взносах. Скачать {0} файл (ов)? Используется {3} Мб временной и {1} Мб постоянной памяти. (Свободного места - {2} Мб.) Найти мою позицию Прокладывайте маршруты и открывайте новые для себя места без подключения к интернету @@ -2524,7 +2543,7 @@ Ввод координат Сохранить как трек Переместить в историю - Группа будет удалена после перезагрузки + Группа будет удалена после следующего перезапуска приложения. Показывать стрелки на карте по убыванию по возрастанию @@ -2555,9 +2574,9 @@ Маркер карты перемещен в действующие Указатель расстояния • Полностью переработанные маркеры карты, с направляющими линиями и планированием маршрута -\n -\n• Инструмент измерения расстояния, с привязкой к дороге и сохранением точек в качестве трека -\n +\n +\n• Инструмент измерения расстояния, с привязкой к дороге и сохранением точек в качестве трека +\n \n• OsmAnd Live: исправления ошибок, обновление данных на сервере каждые 30 минут, обновления учитываются в навигации \n \n @@ -2565,7 +2584,7 @@ Вы должны добавить по крайней мере один маркер, чтобы использовать эту функцию. Произошло исключение: заметка не изменена Дорога - Показывать направляющую линию + Показывать направляющие линии Темно-желтый Osmand это активно развивающийся проект с открытым исходным кодом. Благодаря открытости каждый может внести свой вклад в приложение сообщая об ошибках, улучшая перевод или кодируя новые функции. Проект находится в оживленном состоянии непрерывного совершенствования всеми этими формами взаимодействия разработчиков и пользователей. Прогресс проекта также зависит от денежных взносов для финансирования написания и тестирования новых функций. Примерная карта покрытия и качество: • Западная Европа: **** • Восточная Европа: *** • Россия: *** • Северная Америка: *** • Южная Америка: ** • Азия ** • Япония & Корея: *** • Ближний Восток: ** • Африка: ** • Антарктида: * Большинство стран по всему миру доступны для скачивания! Получите надежный навигатор в вашей стране - будь то Франция, Германия, Мексика, Великобритания, Испания, Нидерланды, США, Россия, Бразилия или любая другая. Примерная карта покрытия и качество: • Западная Европа: **** • Восточная Европа: *** • Россия: *** • Северная Америка: *** • Южная Америка: ** • Азия ** • Япония & Корея: *** • Ближний Восток: ** • Африка: ** • Антарктида: * Большинство стран по всему миру доступны в виде загрузок! От Афганистана до Зимбабве, от Австралии до США. Аргентина, Бразилия, Канада, Франция, Германия, Мексика, Великобритания, Испания, … @@ -2589,19 +2608,19 @@ Выберите категорию избранных для добавления к маркерам. Категория избранных Добавить группу - Вы можете добавить группу из избранных или путевых точек. + Вы можете импортировать группу из избранных или путевых точек. Создайте маркеры карт! - Отмечайте места на карте нажатием. + Нажмите на нужное место и затем нажмите кнопку флажка маркера. Импорт групп Вы можете импортировать группы избранных или путевых точек как маркеры. На этом экране появятся маркеры, отмеченные как пройденные. Два Один - Отображать направление от вашей позиции до активного маркера. + Отображать направляющие линии от вашего позиции до активных мест маркеров. Отображать одну или две стрелки, указывающие направление на активные маркеры. Выберите способ отображения расстояния до активных маркеров. Выберите сколько отображать индикаторов направления. - Количество цифр + Количество десятичных цифр Вставить Автопереход на следующее поле после ввода %1$d цифр после десятичной точки. %1$d цифр @@ -2610,7 +2629,7 @@ Полноэкранный режим Отметить пройденным Файл %1$s не содержит путевых точек, импортировать его как трек? - Выберите трек для добавления путевых точек к маркерам. (Показаны только треки с путевыми точками). + Выберите трек для добавления путевых точек. (Показаны только треки с путевыми точками.) Трек путевых точек \@string/shared_string_history Направо From e33a77045de32f10452b13e2e685a6bd66624df3 Mon Sep 17 00:00:00 2001 From: ace shadow Date: Sun, 19 Nov 2017 20:09:44 +0000 Subject: [PATCH 137/157] Translated using Weblate (Slovak) Currently translated at 99.2% (2482 of 2502 strings) --- OsmAnd/res/values-sk/strings.xml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index c0ea0fe791..abeabe8122 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -1543,7 +1543,7 @@ Chcete pokračovať v novej registrácii? Stiahli ste %1$s máp Stiahnuť novú mapu Spravovať - Štýl cesty + Štýl ciest Predvolené Oranžová Nemecký atlas ciest @@ -2015,7 +2015,7 @@ Dĺžka %2$s Farba GPX Šírka GPX - Štýl cesty + Štýl ciest Znovuotvoriť @@ -2895,8 +2895,8 @@ Zodpovedá oblasti: %1$s x %2$s Exportovať vaše značky do súboru, ktorý môžete určiť tu: Uložiť ako stopu Presunúť do histórie - Skupina bude odstránená po reštarte - Zobraziť vodiacu čiaru + Skupina bude odstránená po nasledujúcom reštarte aplikácie. + Zobraziť vodiace čiary Zobraziť šípky na mape Zobraziť prešlé Skryť prešlé @@ -2916,10 +2916,10 @@ Zodpovedá oblasti: %1$s x %2$s Pridať kópiu počiatočného bodu ako cieľ. Vytvoriť okružnú trasu Navigovať - \\022 Prepracované mapové značky s usmerneniami a plánovaním trasy -\n -\n • Nástroj na meranie vzdialeností má funkciu prichytenia k ceste a uloženie bodov ako stopu -\n + \\022 Prepracované mapové značky s vodiacimi čiarami a plánovaním trasy +\n +\n • Nástroj na meranie vzdialeností má funkciu prichytenia k ceste a uloženie bodov ako stopu +\n \n • OsmAnd Live: opravy chýb, nové dáta na serveri každých 30 minút, aktualizácie začlenené do navigácie \n \n @@ -2939,22 +2939,22 @@ Zodpovedá oblasti: %1$s x %2$s Režim na celú obrazovku Zobraziť na hornej lište Značka prejdená - Počet číslic + Počet desatinných miest Vpravo Vľavo Zobraziť numerickú klávesnicu Prilepiť - Automaticky prepnúť na ďalšie pole po zadaní %1$d číslic za desatinnou čiarkou. + Automaticky prepnúť na ďalšie pole po zadaní %1$d desatinných miest. %1$d číslic Prejsť na ďalšie pole Premenovať značku Vzhľad na mape - Zvoľte body stopy, z ktorých má OsmAnd vytvoriť značky - Zvoľte skupinu obľúbených bodov, z ktorých majú byť vytvorené značky. Zobrazuj[ sa iba stopy s waypointami + Zvoľte stopy, ktorých waypointy má OsmAnd pridať ako značky. (Zobrazujú sa len stopy s waypointami.) + Zvoľte skupinu obľúbených bodov, ktoré majú byť pridané k značkám. Body stopy - Skupina obľúbených bodov + Kategória obľúbených bodov Pridať skupinu - Môžete pridať skupinu obľúbených bodov alebo bodov trasy. + Môžete importovať skupinu obľúbených bodov alebo waypointy stopy. Vytvoriť mapové značky! Stlačením označte miesta na mape, potom stlačte tlačidlo s vlajkou značky. Importovať skupiny @@ -2962,7 +2962,7 @@ Zodpovedá oblasti: %1$s x %2$s Značky označené ako prejdené sa zobrazia na tejto obrazovke. Dve Jedna - Zobraziť smerovníky z vašej polohy k aktívnym značkám. + Zobraziť vodiace čiary z vašej polohy k aktívnym značkám. Zobraziť jednu alebo dve šípky smerujúce k aktívnym značkám. Zvoľte ako chcete zobraziť vzdialenosť k aktívnym značkám. Zvoľte koľko ukazovateľov smeru chcete zobraziť. From 270459cd6cb4fd97e87e9d1c68308ea81e460387 Mon Sep 17 00:00:00 2001 From: Franco Date: Mon, 20 Nov 2017 04:07:07 +0000 Subject: [PATCH 138/157] Translated using Weblate (Spanish (American)) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-es-rUS/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index e6d0f12344..8f3adeec64 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -2774,7 +2774,7 @@ Proporciona un código completo Finalizar Planificar ruta Ordenar - Ingreso de coordenadas + Ingresar coordenadas está guardado Exporta los marcadores a un archivo que puedes nombrar aquí: Guardar como traza @@ -2834,7 +2834,7 @@ Proporciona un código completo Puntos de referencia de la traza Categoría de favoritos Añadir un grupo - Puedes importar grupos desde favoritos o puntos de referencia de la traza. + Puedes importar grupos desde «Favoritos» o puntos de referencia de la traza. ¡Crea marcadores del mapa! Haz una pulsación corta o larga sobre los lugares, luego pulsa la bandera del marcador. Importar grupos @@ -2849,5 +2849,5 @@ Proporciona un código completo Aspecto en el mapa Búsqueda de trazas con puntos de referencia Más - \@string/shared_string_history + From fd2fb1a7fdaf08372b3c06845a89511e3af9a79f Mon Sep 17 00:00:00 2001 From: Franco Date: Mon, 20 Nov 2017 04:06:25 +0000 Subject: [PATCH 139/157] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (2502 of 2502 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 5ce8a8e7b2..9c28f79803 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -2773,7 +2773,7 @@ Proporciona un código completo Finalizar Planificar ruta Ordenar - Ingreso de coordenadas + Ingresar coordenadas está guardado Exporta los marcadores a un archivo que puedes nombrar aquí: Guardar como traza @@ -2833,7 +2833,7 @@ Proporciona un código completo Puntos de referencia de la traza Categoría de favoritos Añadir un grupo - Puedes importar grupos desde favoritos o puntos de referencia de la traza. + Puedes importar grupos desde «Favoritos» o puntos de referencia de la traza. ¡Crea marcadores del mapa! Haz una pulsación corta o larga sobre los lugares, luego pulsa la bandera del marcador. Importar grupos From d1c7e3db594de3656e93c71b46c9c1348a82ed26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Ny=C4=8Da?= Date: Sun, 19 Nov 2017 18:31:23 +0000 Subject: [PATCH 140/157] Translated using Weblate (Upper Sorbian) Currently translated at 55.0% (1825 of 3315 strings) --- OsmAnd/res/values-b+hsb/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-b+hsb/phrases.xml b/OsmAnd/res/values-b+hsb/phrases.xml index 41dca8e31d..ae94c43d92 100644 --- a/OsmAnd/res/values-b+hsb/phrases.xml +++ b/OsmAnd/res/values-b+hsb/phrases.xml @@ -1450,7 +1450,7 @@ hodowna pyramida hodowny wobchod hodowny štom - Kuchnja + kuchnja pizza kofej sandwich From ab9771b2b1500e3bb3ecb4a2a22b8c5a2b750fe6 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 15:57:16 +0200 Subject: [PATCH 141/157] Fix icons --- .../osmand/plus/osmedit/OsmEditsAdapter.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 2c46593fa2..1ab8a33e43 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -11,12 +11,14 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; +import net.osmand.osm.PoiType; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.render.RenderingIcons; import net.osmand.util.Algorithms; import java.util.List; +import java.util.Map; public class OsmEditsAdapter extends ArrayAdapter { @@ -119,15 +121,26 @@ public class OsmEditsAdapter extends ArrayAdapter { private Drawable getIcon(OsmPoint point) { if (point.getGroup() == OsmPoint.Group.POI) { OpenstreetmapPoint osmPoint = (OpenstreetmapPoint) point; - String type = osmPoint.getType(); - String subtype = osmPoint.getSubtype(); - int iconResId = RenderingIcons.getBigIconResourceId(type); - if (iconResId == 0) { - iconResId = RenderingIcons.getBigIconResourceId(type + "_" + subtype); - if (iconResId == 0) { - iconResId = R.drawable.ic_type_info; + int iconResId = 0; + String poiTranslation = osmPoint.getEntity().getTag(EditPoiData.POI_TYPE_TAG); + if (poiTranslation != null) { + Map poiTypeMap = app.getPoiTypes().getAllTranslatedNames(false); + PoiType poiType = poiTypeMap.get(poiTranslation.toLowerCase()); + if (poiType != null) { + String id = null; + if (RenderingIcons.containsBigIcon(poiType.getIconKeyName())) { + id = poiType.getIconKeyName(); + } else if (RenderingIcons.containsBigIcon(poiType.getOsmTag() + "_" + poiType.getOsmValue())) { + id = poiType.getOsmTag() + "_" + poiType.getOsmValue(); + } + if (id != null) { + iconResId = RenderingIcons.getBigIconResourceId(id); + } } } + if (iconResId == 0) { + iconResId = R.drawable.ic_type_info; + } int colorResId = R.color.color_distance; if (point.getAction() == OsmPoint.Action.CREATE) { colorResId = R.color.color_osm_edit_create; From f76910574babb1c4ef0fab9a5f9510642bdb36eb Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 15:57:44 +0200 Subject: [PATCH 142/157] Fix empty view background color --- OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index d8f8c04944..435478137d 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -101,6 +101,8 @@ public class NotesFragment extends OsmAndListFragment { int icRes = getMyApplication().getSettings().isLightContent() ? R.drawable.ic_empty_state_av_notes_day : R.drawable.ic_empty_state_av_notes_night; ((ImageView) emptyView.findViewById(R.id.empty_state_image_view)).setImageResource(icRes); + emptyView.setBackgroundColor(getResources().getColor(getMyApplication().getSettings() + .isLightContent() ? R.color.ctx_menu_info_view_bg_light : R.color.ctx_menu_info_view_bg_dark)); return view; } From f61c434b0ddc2c4a39d68b5c6e4af5b32101dad8 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 16:03:41 +0200 Subject: [PATCH 143/157] Change colors --- OsmAnd/res/values/colors.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values/colors.xml b/OsmAnd/res/values/colors.xml index 3d16d4ae95..3ce6338481 100644 --- a/OsmAnd/res/values/colors.xml +++ b/OsmAnd/res/values/colors.xml @@ -305,8 +305,8 @@ #9fadfc #ed5421 - #73b825 - #FDD835 - #e53935 + #78cc5c + #fac403 + #ee5622 \ No newline at end of file From 1856bc24c1c2133cee3ddb88e11a5def1213412e Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 16:19:13 +0200 Subject: [PATCH 144/157] Add snackbar --- OsmAnd/res/values/strings.xml | 1 + .../net/osmand/plus/views/MapMarkersLayer.java | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 1a678afc6d..fb99df2849 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,7 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Marker %s activated. Tap on marker on the map, move it to the first place in active markers, without opening context menu. One tap active Looking for tracks with waypoints diff --git a/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java b/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java index 93f80d5a35..44194aff2a 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapMarkersLayer.java @@ -14,9 +14,11 @@ import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.view.GestureDetector; import android.view.MotionEvent; +import android.view.View; import net.osmand.Location; import net.osmand.data.LatLon; @@ -487,7 +489,18 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi || !map.getMyApplication().getSettings().SELECT_MARKER_ON_SINGLE_TAP.get()) { return false; } - map.getMyApplication().getMapMarkersHelper().moveMarkerToTop((MapMarker) o); + final MapMarkersHelper helper = map.getMyApplication().getMapMarkersHelper(); + final MapMarker old = helper.getMapMarkers().get(0); + helper.moveMarkerToTop((MapMarker) o); + String title = map.getString(R.string.marker_activated, helper.getMapMarkers().get(0).getName(map)); + Snackbar.make(map.findViewById(R.id.bottomFragmentContainer), title, Snackbar.LENGTH_LONG) + .setAction(R.string.shared_string_cancel, new View.OnClickListener() { + @Override + public void onClick(View v) { + helper.moveMarkerToTop(old); + } + }) + .show(); return true; } From 2ef34c8f678a160898f9b94f818424fe8a0f3153 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 17:16:48 +0200 Subject: [PATCH 145/157] Merge branch 'master' of ssh://github.com/osmandapp/Osmand into new_edits_ui # Conflicts: # OsmAnd/res/layout/list_item_header.xml # OsmAnd/res/layout/note_list_item.xml # OsmAnd/res/layout/update_index.xml # OsmAnd/res/values/strings.xml --- OsmAnd/res/layout/note_list_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml index 55d874ade2..c0faa3a780 100644 --- a/OsmAnd/res/layout/note_list_item.xml +++ b/OsmAnd/res/layout/note_list_item.xml @@ -1,4 +1,4 @@ -?xml version="1.0" encoding="utf-8"?> + Date: Mon, 20 Nov 2017 17:31:36 +0200 Subject: [PATCH 146/157] Fix typo --- OsmAnd/res/layout/update_index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/layout/update_index.xml b/OsmAnd/res/layout/update_index.xml index a09d3a14ff..d637d3c31e 100644 --- a/OsmAnd/res/layout/update_index.xml +++ b/OsmAnd/res/layout/update_index.xml @@ -36,7 +36,7 @@ android:layout_marginRight="0dp" android:layout_marginTop="0dp" android:layout_weight="1"/> -` + Date: Mon, 20 Nov 2017 17:58:47 +0200 Subject: [PATCH 147/157] Change empty view background color --- OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 607ff72020..0ab69b4764 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -110,6 +110,8 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo int icRes = getMyApplication().getSettings().isLightContent() ? R.drawable.ic_empty_state_osm_edits_day : R.drawable.ic_empty_state_osm_edits_night; ((ImageView) emptyView.findViewById(R.id.empty_state_image_view)).setImageResource(icRes); + emptyView.setBackgroundColor(getResources().getColor(getMyApplication().getSettings() + .isLightContent() ? R.color.ctx_menu_info_view_bg_light : R.color.ctx_menu_info_view_bg_dark)); Fragment optionsFragment = getChildFragmentManager().findFragmentByTag(OsmEditOptionsBottomSheetDialogFragment.TAG); if (optionsFragment != null) { From 26f46472653c9c4efc2c32719f45c449bb259843 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 20 Nov 2017 18:12:20 +0200 Subject: [PATCH 148/157] Fix status bar color updating --- OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java index 9784a70658..13c5472ca6 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java @@ -803,8 +803,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis } removeMapillaryFiltersFragment(); - mapActivity.updateStatusBarColor(); - if (visible) { mapActivity.dismissCardDialog(); mapActivity.getContextMenu().hideMenues(); @@ -899,6 +897,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis settings.MAPILLARY_FIRST_DIALOG_SHOWN.set(true); } } + mapActivity.updateStatusBarColor(); } public void updateDashboard() { From bf94937ee11b55da9e6c63d7192d6573ba9c4225 Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 18:19:20 +0200 Subject: [PATCH 149/157] Add comment for bug and add text margin --- OsmAnd/res/layout/note_list_item.xml | 3 ++- OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/layout/note_list_item.xml b/OsmAnd/res/layout/note_list_item.xml index c0faa3a780..91f89197c9 100644 --- a/OsmAnd/res/layout/note_list_item.xml +++ b/OsmAnd/res/layout/note_list_item.xml @@ -58,8 +58,9 @@ android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" + android:layout_marginTop="@dimen/map_widget_icon_margin" android:textColor="?android:textColorSecondary" - android:textSize="@dimen/default_sub_text_size" + android:textSize="@dimen/default_desc_text_size" tools:text="Oct 13, 2017 * 3 MB * 01:14"/> diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java index 1ab8a33e43..ece0f7147f 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsAdapter.java @@ -175,12 +175,20 @@ public class OsmEditsAdapter extends ArrayAdapter { category = ((OpenstreetmapPoint) point).getEntity().getTag(EditPoiData.POI_TYPE_TAG); } + String comment = ""; + if (point.getGroup() == OsmPoint.Group.BUG) { + comment = getContext().getString(R.string.osn_bug_name); + } + String prefix = OsmEditingPlugin.getPrefix(point); String description = ""; if (!Algorithms.isEmpty(action)) { description += action + " • "; } + if (!Algorithms.isEmpty(comment)) { + description += comment + " • "; + } if (!Algorithms.isEmpty(category)) { description += category + " • "; } From aa68cf5094a273ca32f66e6ff489f00e19a44f0c Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Mon, 20 Nov 2017 18:37:11 +0200 Subject: [PATCH 150/157] Reformat code --- .../net/osmand/plus/osmedit/OsmEditsFragment.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java index 0ab69b4764..b0ee0f0ae3 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsFragment.java @@ -159,8 +159,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo } ((ActionBarProgressActivity) getActivity()).updateListViewFooter(footerView); - MenuItem item = menu.add(R.string.local_openstreetmap_uploadall). - setIcon(R.drawable.ic_action_export); + MenuItem item = menu.add(R.string.local_openstreetmap_uploadall).setIcon(R.drawable.ic_action_export); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -170,8 +169,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo }); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - item = menu.add(R.string.local_osm_changes_backup). - setIcon(R.drawable.ic_action_gshare_dark); + item = menu.add(R.string.local_osm_changes_backup).setIcon(R.drawable.ic_action_gshare_dark); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override @@ -181,8 +179,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo return true; } }); - item = menu.add(R.string.shared_string_delete_all). - setIcon(R.drawable.ic_action_delete_dark); + item = menu.add(R.string.shared_string_delete_all).setIcon(R.drawable.ic_action_delete_dark); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override @@ -293,8 +290,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo private void updateSelectionTitle(ActionMode m) { if (osmEditsSelected.size() > 0) { - m.setTitle(osmEditsSelected.size() + " " - + getMyApplication().getString(R.string.shared_string_selected_lowercase)); + m.setTitle(osmEditsSelected.size() + " " + getString(R.string.shared_string_selected_lowercase)); } else { m.setTitle(""); } From 1dd89dec7e8024e5f078f61e83aa8b9c6aa9f555 Mon Sep 17 00:00:00 2001 From: iman Date: Tue, 21 Nov 2017 08:36:18 +0000 Subject: [PATCH 151/157] Translated using Weblate (Persian) Currently translated at 99.9% (2501 of 2502 strings) --- OsmAnd/res/values-fa/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 41ca045254..8827d60f70 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -800,7 +800,7 @@ ارسال به OSM برخی جزئیات نقشهٔ بُرداری را در زوم‌های پایین‌تر نشان می‌دهد (جاده‌ها و...). نقطه(های) برگزیده حذف شد. - دارید %1$d نقطهٔ برگزیده و %2$d گروه را پاک می‌کنید. آیا مطمن هستید؟ + دارید %1$d نقطهٔ برگزیده و %2$d گروه را پاک می‌کنید. آیا مطمئن هستید؟ نقشه پایهٔ جهان (که تمام دنیا را در زوم‌های پایین پوشش می‌دهد) پیدا نشد. برای داشتن نمای جهانی لطفاً فایل World_basemap_x.obf را دانلود کنید. نسخهٔ محلی @@ -1811,7 +1811,7 @@ تغییرات OSM به بستهٔ تغییرات محلی اضافه شد برای حذف‌کردن علامت بزنید نام گروه باید حداقل ۳حرفی باشد! - دارید تعداد %1$d تغییر را به OSM ارسال می‌کنید. مطمئنید؟ + دارید تعداد %1$d تغییر را به OSM ارسال می‌کنید. مطمئن هستید؟ آیا سوابق را پاک می‌کنید؟ زمان انتظار برای باقی‌ماندن در صفحهٔ طراحی مسیر را مشخص کنید. مسیریابی مرحله‌به‌مرحله را بعد از … شروع کن @@ -2140,7 +2140,7 @@ ترجیح‌دادن بیراهه اولویت ساختار زمین: هموار یا پرتپه. شیب - دارید %1$d نقطه را حذف می‌کنید؛ مطمئنید؟ + دارید %1$d نقطه را حذف می‌کنید؛ مطمئن هستید؟ نقاط مهم این مسیر مسیر مدت‌زمان @@ -2420,7 +2420,7 @@ به این برنامه امتیاز بدهید لطفاً در فروشگاه Play به OsmAnd امتیاز بدهید لطفاً علتش به ما بگویید. - لطفاً به ما بگویید دوست دارید چه چیزی در این برنامه تغییر بکند. + دوست دارید این برنامه چه تغییری بکند؟ لطفاً به ما بگویید. آپلود نشد حذف تغییر {0} مورد از {1} مورد آپلود شد @@ -2461,7 +2461,7 @@ بعداً نسخهٔ کامل دانلودها - آیا بااینکه نقشهٔ استاندارد (کامل) را دارید، هنوز می‌خواهید نقشهٔ فقط-جاده را دانلود کنید؟ + آیا با اینکه نقشهٔ استاندارد (کامل) را دارید، نقشهٔ فقط-جاده را هم دانلود می‌کنید؟ %1$.1f از %2$.1f مگابایت %.1f مگابایت به‌روزرسانی همه (%1$s مگابایت) @@ -2955,7 +2955,7 @@ افزودن گروه می‌توانید گروهی از نقاط برگزیده یا نقاط بین‌راهی را وارد کنید. روی نقشه نشانه‌گذاری کنید! - مکان‌ها به‌صورت کوتاه یا طولانی لمس کنید و سپس دکمهٔ پرچم را بزنید. + مکان‌ها را به‌صورت کوتاه یا طولانی لمس کنید و سپس دکمهٔ پرچم را بزنید. واردکردن گروه‌ها می‌توانید گروه‌های نقاط برگزیده یا نقاط بین‌راهی را به‌عنوان نشانه وارد کنید. نشانه‌هایی که به‌عنوان عبورکرده مشخص شده‌اند در این صفحه نشان داده می‌شوند. From d170e943577f095dbfd3b6bb2ff1f8767b2dc3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20R=C3=BCdinger?= Date: Mon, 20 Nov 2017 20:45:24 +0000 Subject: [PATCH 152/157] Translated using Weblate (German) Currently translated at 98.0% (2454 of 2502 strings) --- OsmAnd/res/values-de/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 95cbe63e2a..799b215fc1 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -2909,4 +2909,5 @@ Abgedeckte Fläche: %1$s x %2$s Zum nächsten Feld Markierung umbenennen Markierung passiert + Track-Wegpunkte From b0505c1eaa5cc0835d1087d495cfb33c6e45c614 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Mon, 20 Nov 2017 16:10:19 +0000 Subject: [PATCH 153/157] Translated using Weblate (Hebrew) Currently translated at 71.5% (1789 of 2502 strings) --- OsmAnd/res/values-he/strings.xml | 182 ++++++++++++++++++++++++++++++- 1 file changed, 178 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index 88a36b9abe..dd5653a167 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -700,7 +700,7 @@ שניות דקות הגדרת הפסקות שינה שמשמשות את שירות מצב השינה - הפרשי התעוררות + הפרשי התעוררות GPS אירעה שגיאה בעת עדכון רשימת הנ״ע המקומית אירעה שגיאה בעת טעינת הנתונים מהשרת לא נמצאו נתוני נ״ע בלתי מקוונים עבור אזור זה @@ -1493,12 +1493,12 @@ הצגת חץ או שניים המציינים את כיוון הסמנים הפעילים. ניתן לבחור כיצד להציג את המרחק עד לסמנים הפעילים. נא לבחור כמה מחווני כיוון יופיעו. - כמות הספרות + כמות הספרות העשרוניות ימין שמאל הצגת מקלדת ספרות הדבקה - מעבר אוטומטי לשדה הבא לאחר הזנת %1$d ספרות אחרי הנקודה העשרונית. + מעבר אוטומטי לשדה הבא לאחר הקלדת %1$d ספרות עשרונית. %1$d ספרות מעבר לשדה הבא נוספו נקודות דרך לסמני המפה @@ -1510,7 +1510,7 @@ ניתן להוסיף המיקום שלך כנקודה ראשונה כדי לתכנן מסלול מושלם. קלט נקודות ציון ייצוא הסמנים שלך לקובץ שניתן לציין כאן: - הקבוצה תוסר לאחר הפעלה מחדש + הקבוצה תוסר לאחר ההפעלה הבאה מחדש של היישומון. הצגת קווים מנחים ניווט חי של OsmAnd לא הוגדר יעד @@ -2003,4 +2003,178 @@ סגירת הערה ההערה נוצרה בהצלחה אירעה שגיאה: ההערה לא נוצרה + נא לבחור כיצד לציין את המרחק והכיוון לסמני המפה במסך המפה: + סף כיווניות מפה + כל סמני המפה הועברה להיסטוריה + סמן המפה הועבר להיסטוריה + סמן המפה הועבר למצב פעיל + רשימה + קבוצות + שימוש אחרון: %1$s + הגדרה כפעיל + היום + אתמול + נגיעה בכפתור הפעולה יכבה/יפעיל את התקריב במפה בהתאם למהירות שלך. + נגיעה בכפתור הפעולה תוסיף יעד למיקום מרכזי במסך. היעד שהוגדר קודם לכן הופך להיות יעד הביניים האחרון. + נגיעה בכפתור הפעולה יחליף את היעד במיקום מרכזי במסך. + נגיעה בכפתור הפעולה תוסיף נקודת ביניים ראשונה במקום מרכזי במסך. + אין שכבת על + אין שכבה תחתונה + סיום הניווט + התעלמות מדרך + זיכרון שיתופי + סרגל עליון + דוח מלא + חישוב המסלול מחדש + שם וססמה ב־OpenStreetMap + תרומות + מספר הנמענים + דירוגי עורכים ב־OSM + עריכת מינוי + נדרש לצורך שליחת עדכונים על תרומות. + שם ציבורי + לא להציג את השם שלי בדוחות + אזור תמיכה + עלות חודשית + תודה לך על המינוי לעדכונים חיים! + חלק מהתרומות שלך תישלחנה למשתמשי OSM שעורכים שינויים במפה באזור הזה. + הגדרות מינוי + בחירת סמן מפה + העלאה אלמונית + ההערה נסגרה בהצלחה + אירעה שגיאה: ההערה לא נסגרה + ססמה ל־OSM (רשות) + הגשה + למחוק נקודת דרך GPX? + עריכת נקודת דרך GPX + מיקום + עריכות ב־OSM ששותפו דרך OsmAnd + גרמנית תחתית + מקדונית + פריזית + אלבנית (טוסק) + מידע נוסף + מה חדש עם + עצמים מוצעים + עדכון + העלאה + נוצרו נקודות עניין ב־OSM + קוד QR + מפה התקבלה + המפה של %1$s התקבלה, כעת ניתן להתחיל להשתמש בה. + הצגת המפה + הגדרת הדגל שמציין את הפעלת היישומון לראשונה, כל שאר ההגדרות נותרו ללא שינוי. + הדמיית הפעלה ראשונה של יישומון + שיתוף מיקום + שליחה + שם הקטגוריה שצוין כבר קיים. נא להשתמש בשם אחר. + שם הקטגוריה + הוספת קטגוריה חדשה + אזורים + מפות אזוריות + מפות עולמיות + קווי מתאר מושבתים + הוספת חדש + בחירת קטגוריה + הגדרת יחידת מהירות. + יחידת מהירות + מילים ימיים + קילומטרים לשעה + מילים לשעה + מטרים לשנייה + דקות לקילומטר + דקות למיל + מיל ימי לשעה (קשר) + nmi/שע׳ + מ/שנ׳ + הקלטת טיול + ניווט + רץ ברקע + הפרשי השכמת GPS + מידע מועדף + הפסקת הדמיית המיקום שלך. + הדמיית המיקום שלך באמצעות נתיב מחושב או מסלול GPX מוקלט. + הכתובת בחיפוש + קובץ GPX עם מיקומי הערות. + התעלמות מרכבות שאטל + התעלמות מרכבות שאטל + קו מתאר מודגש + נווארית / נפאל בהאסה + יש לך נתונים מיושנים של ויקיפדיה שאינם נתמכים. להעביר אותם לארכיון? + להוריד נתונים נוספים מוויקיפדיה (%1$s מ״ב)? + שירות המיקום אינו פעיל. להפעיל אותו? + מניעת רישום עצמאי + ייבוא ל־OsmAnd + קריאת הכתבה המלאה (מקוון) + ויקיפדיה + ויקיפדיה + הצגת פרטים + מחיקת עריכת OSM + מושבת + צבע לפי שיוך לרשת + יציאה + מספרי בתים + האם על OsmAnd להעתיק את קובצי הנתונים שלו ליעד החדש? + לא ניתן ליצור מפות בתיקייה שצוינה + העתקת הקבצים נכשלה + אחסון חיצוני + אחסון למגוון משתמשים + זיכרון פנימי של היישומון + ציון ידני + זיכרון פנימי + אחסון המפה + העתקה + סינון לפי שם + סוג לחיפוש הכול + פתיחה כעת + מסייע מיפוי OSM + מידע A-GPS + ניהול + עריכה + מיקומים + חיפוש + הצגת תיאור. + הודעה + הפעם האחרונה שהתקבלו נתוני A-GPS:‏ %1$s + בארצות רבות (גרמניה, צרפת, איטליה ואחרות) השימוש באזהרה מפני מצלמות אסורה על פי חוק. צוות OsmAnd אינו אחראי במקרה של הפרת החוק. נא ללחוץ על כן אם מותר לך להשתמש בתכונה זו באופן חוקי. + הורדת מפות + כדי לשקף את חוקי התנועה והתמרורים, נא לבחור את אזור הנהיגה: + ב־OsmAnd יש אפשרות לגלישה גלובלית במפות ללא אינטרנט וניווט גלובלי ללא אינטרנט! + ברוך בואך + הנתיב הנוכחי + השינויים ב־OSM נוספו לערכת השינויים המקומית + סימון למחיקה + אורך שם הקבוצה חייב להיות באורך 3 תווים לפחות! + פעולה זו תוביל למחיקת %1$d הערות. להמשיך? + פעולה זו תעלה %1$d שינויים ל־OSM. להמשיך? + לפנות את ההיסטוריה? + להוריד מפות בלתי מקוונות? + הורדת %1$s מפות + אזור + שימוש בעיבוד OpenGL בהאצת חומרה (עשוי לא לעבוד על חלק מההתקנים). + לא נמצא מעקף + בית + קיימים עדכונים ל־%1$s מפות + נתיבי אוטובוס, טרוליבוס, שאטל + נתיבי רכבת ורכבת קלה + ל־%1$s נדרשת ההרשאה הזאת כדי לכבות את המסך לטובת התכונה לחיסכון באנרגיה. + הדלקת מסך ההתקן (אם הוא כבוי) עם הגעה לפנייה. + התעלמות מדרכים… + מסלולי רכבת קלה + נתיבי מוניות שירות + נתיבי טרוליבוס + נא לבחור סף סובלנות להגבלת מהירות, מעל הסף הזה תושמע אזהרה קולית. + שם המועדף שצוין כבר בשימוש, השתנה לשם %1$s כדי להימנע מכפילות. + הגדרת גודל הטקסט במפה. + הפרשי רישום באופן כללי + השהיית מוזיקה + שיתוף מסלול כקובץ GPX + מסלול שותף דרך OsmAnd + מוקדם + רגיל + מאוחר + במטרים האחרונים + הכרזת הגעה + אירופה - הולנד + ידני בלבד (נגיעה בחץ) From 5a348fe0f48d2a7cd7f5161b47039aa95e7183b9 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Tue, 21 Nov 2017 08:42:06 +0000 Subject: [PATCH 154/157] Translated using Weblate (Russian) Currently translated at 98.4% (2462 of 2502 strings) --- OsmAnd/res/values-ru/strings.xml | 113 ++++++++++++++++--------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 97c68fd938..30a64b3511 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -358,12 +358,12 @@ Ничего не было найдено. Вы можете создать карту самостоятельно (смотрите на osmand.net). Онлайн и кэшированные карты (растровые) Стандартные карты (векторные) - Загрузка и управление локальными файлами карт на вашем устройстве + Загрузка и управление локальными файлами карт на вашем устройстве. Активируйте плагин онлайн карт, чтобы выбирать различные источники карт Онлайн карты - Использовать онлайн карты (загрузка и кэширование на SD-карте) + Использовать онлайн карты (загрузка и кэширование на SD-карте). Онлайн карты - Настройки источников онлайн карт и слоёв + Настройки источников онлайн или кэшированных растровых карт. С помощью этого плагина можно получить доступ ко множеству видов онлайн-карт (тайловых или растровых), от предопределенных тайловых OpenStreetMap (Mapnik) до спутниковых снимков и слоев специального назначения, таких как карты погоды, климатические карты, геологических карты, слои затемнения высот и т. д. \n \nЛюбая из этих карт может быть использована в качестве основной (базовой) карты для отображения на экране OsmAnd или в виде наложения или подложки к другой базовой карте (например стандартной офлайн-карте OsmAnd). Чтобы сделать какую-либо подложку лучше видимой, некоторые элементы векторной карты OsmAnd могут быть по желанию легко скрыты через меню «Настройка карты». @@ -373,7 +373,7 @@ "Плагин добавляет поддержку специальных возможностей устройства непосредственно в OsmAnd. Это облегчает, например, регулировку скорости речи для голоса TTS, настройку направленности экрана навигации, управление масштабом при помощи трекбола или использование голосовых команд обратной связи для авто аннотации вашего местоположения." Плагин отображает параметры для разработки и отладки функций, таких как, проверка или моделирование маршрута, отображение производительности отрисовки, проверка голосовых подсказок. Эти настройки предназначены для разработчиков и не требуются для обычного пользователя. Плагины - Плагины активируют дополнительные возможности приложения + Плагины активируют дополнительные возможности приложения. Плагины С помощью этого плагина OsmAnd может быть использован для улучшения OSM через создание или изменение объектов OSM POI, открытие или комментирование OSM заметок, а также отправку записанные GPX файлов. OSM развивается обществом, глобальный проект создания карты общей собственности. Для получения дополнительной информации, пожалуйста, обращайтесь на https://openstreetmap.org. Активное участие ценится, и взносы могут быть сделаны непосредственно через OsmAnd, если вы укажете свои учетные данные OSM в настройках. Векторные карты могут отображаться быстрее. Поддерживается не всеми устройствами. @@ -386,15 +386,15 @@ Видимость Теги Описание - Укажите пользователя OSM и его пароль для выгрузки GPX файлов в OpenStreetMap. + Пожалуйста, укажите имя и пароль пользователя OSM для выгрузки GPX файлов. Поддержка Поддержать разработку новых функций Показывать масштаб Информация Флуоресцентные цвета - Использовать флуоресцентные цвета для отображения треков + Использовать флуоресцентные цвета для отображения треков и маршрутов. Локальное редактирование - Всегда использовать локальное редактирование + Всегда использовать локальное редактирование. Изменение POI в приложении не меняет POI загруженные из интернета, однако все изменения сохраняются в локальный файл. Выгрузка… {0} POI/заметки выгружены @@ -403,16 +403,16 @@ Удалить созданные Offline дополнение: Локально сохраненные OSM POI/заметки - Просмотр и управление OSM POI/заметками в локальной базе данных - Укажите интервал онлайн слежения + Просмотр и управление OSM POI/заметками в локальной базе данных. + Укажите интервал онлайн слежения. Интервал онлайн слежения - Укажите веб-адрес со следующими параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6} + Укажите веб-адрес со следующими параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}. Web адрес онлайн слежения Записать трек можно с помощью GPX виджета или выбрав \"Запись поездки\" в Настройках. Показывать текущий путь - Бесплатная версия OsmAnd ограничена %1$s загрузками и не поддерживает геостатьи из wikipedia. + Бесплатная версия OsmAnd ограничена %1$s загрузками (добавлениями или обновлениями карт) и не поддерживает геостатьи из Википедии. Бесплатная версия - Показать POI описание + Показать описание POI. Северная Америка - США Северная Америка Центральная Америка @@ -442,7 +442,7 @@ Нативная библиотека не поддерживается на этом устройстве. Инициализация нативной библиотеки… Настройки автовозврата карты - Выберите время, через которое карта вернётся к текущей позиции + Выберите время, через которое карта вернётся к текущей позиции. Автовозврат карты только при следовании по маршруту Возвращать карту в текущее положение только при следовании по маршруту. @@ -468,11 +468,11 @@ Маршрут успешно сохранён в \"%1$s\". Имя файла: Файл с таким именем уже существует. - Поделиться файлами GPX с сообществом OSM. Они будут использованы для улучшения карты и загружены в osm.org. + Выгрузить GPX файлы в сообщество OSM. Они будут использованы для улучшения карты. %1$d из %2$d объект(ов) успешно загружены. Отправить в OSM Детализированная карта - Показывать детали (дороги и др.), начиная с мелких масштабов + Показывать детали (дороги и др.), начиная с мелких масштабов. Избранные точки удалены. Вы собираетесь удалить %1$d избранных и %2$d групп. Вы уверены? Дом @@ -491,7 +491,7 @@ %1$d из %2$d объектов успешно активированы. Нет объектов, чтобы %1$s Вы собираетесь %1$s %2$s объектов. Вы уверены? - Управление картами + Управление картами. Активировать Архивировать Перечитать с SD-накопителя @@ -506,7 +506,7 @@ Данные POI Голос TTS Новый поиск - Выберите размер текста для наименований на карте + Выберите размер текста для наименований на карте. Размер текста Распаковываются новые данные… Вы собираетесь использовать Интернет-маршрутизацию, но у Вас нет активного Интернет соединения. @@ -519,37 +519,37 @@ Пройти весь путь Для этой позиции доступны локальные векторные карты.\n\t\n\tДля их использования выберите в \"Меню\" → \"Настройка карты\" → \"Источник карты…\" → \"Векторные карты\". Голосовые инструкции - Выберите канал для голосовых инструкций + Выберите канал для голосовых инструкций. Поток голосовых звонков Поток уведомлений Поток музыки Слой карты %1$s не может быть загружен приложением, попробуйте установить его заново. - Изменить прозрачность карты покрытия + Изменить прозрачность карты покрытия. Прозрачность покрытия - Изменить прозрачность основной карты + Изменить прозрачность основной карты. Прозрачность карты Карта подложки… Карта подложки - Выберите слой подложки для основной карты + Выберите слой подложки для основной карты. Карта покрытия… Карта покрытия - Выберите слой для покрытия основной карты - Карта уже установлена, настройки будут обновлены - Выберите карты для установки или обновления - Требуется Интернет-соединение для данной операции, но оно недоступно + Выберите слой для покрытия основной карты. + Карта уже установлена, настройки будут обновлены. + Выберите карты для установки или обновления. + Требуется Интернет соединение для данной операции, но оно недоступно. Загрузить ещё… - Максимальный масштаб для использования векторных карт вместо растровых + Минимальный масштаб для использования векторных карт. Масштаб векторных карт - Ошибка автономного поиска - Невозможно разобрать запрос: \"%s\" + Ошибка автономного поиска. + Невозможно разобрать запрос: \"%s\". Поиск по адресу в локальных картах Системная - Выбор языка программы (перезапустите OsmAnd после изменения) + Выбор языка приложения (перезапустите OsmAnd после изменения). Локализация Далее Предыдущий - Единицы измерения длины и скорости - Единицы измерения + Выберите единицы измерения расстояния. + Единицы измерения расстояния Мили/футы Мили/ярды Километры/метры @@ -618,44 +618,44 @@ Выберите одну из сборок OsmAnd для установки Голосовая навигация недоступна. Перейдите в \"Настройки\" → \"Общие\" → \"Голосовые данные\" и укажите голосовые данные или загрузите их. Голосовые данные не выбраны - Отображает производительность рендеринга + Отображать производительность рендеринга. Отладочная информация о рендеринге Дневной Ночной Восход/закат Датчик освещённости - Выберите режим переключения дневного/ночного вида карты + Выберите правило переключения дневного/ночного режима. Дневной/ночной режим Загрузить {0} файл(ов) ({1} MB)? Было выбрано {0} Загруженные - Настройки экрана, локализации, единиц измерения и другие + Настройки экрана, локализации, единиц измерения и другие. Общие Управление картами Фоновый режим Запустить OsmAnd в фоновом режиме для записи трека и навигации Скоростной маршрут - Расчёт скоростного маршрута вместо кратчайшего + Расчёт скоростного маршрута вместо кратчайшего. На масштабе {0} загрузить {1} тайлов ({2} Mb ) Загрузить карту Выберите максимальный масштаб для загрузки видимой области Выбранная карта не может быть загружена Непрерывный рендеринг - Выберите способ отрисовки карты + Показывать непрерывную отрисовку вместо изображения полностью. Во время отображения карты произошла непредвиденная ошибка Ошибка : недостаточно памяти процесса, чтобы отобразить карту Контекстное меню… Стиль успешно загружен Произошла ошибка во время загрузки данного стиля Стиль отрисовки векторной карты - Выберите стиль для рендеринга карты + Выберите стиль отрисовки карты. Просмотреть веб-сайт POI Показать телефон POI веб-сайт телефон фильтровать Дисплей высокого разрешения - Не растягивать (с размытием) растровые карты на дисплеях высокого разрешения + Не растягивать (с размытием) растровые карты на дисплеях высокого разрешения. Искать общественный транспорт Искать транспорт на остановке Результат поиска транспорта (нет пункта назначения): @@ -674,7 +674,7 @@ По направлению компаса По направлению движения Не вращать (север сверху) - Выберите способ вращения карты + Выберите способ вращения карты. Ориентация карты Показать маршрут Избранные точки успешно импортированы @@ -696,7 +696,7 @@ Источник карты… Слои Искать POI - Использовать трекбол, чтобы перемещать карту + Использовать трекбол, чтобы перемещать карту. Использовать трекбол Выберите максимальное время поиска позиции сервиса Время ожидания @@ -712,7 +712,7 @@ Запускает OsmAnd в фоновом режиме для отслеживания местоположения при выключенном экране Запуск приложения в фоновом режиме Сервис маршрутизации OsmAnd включён, если отключить позиционирование, он перестанет вести по маршруту. - Настройки навигации + Укажите настройки для навигации. Навигация Скрыть фильтр Показать фильтр @@ -853,8 +853,8 @@ Автозапись трека во время навигации Обновить карту Обновить часть карты - Укажите имя пользователя (требуется для работы с OSM) - Имя пользователя + Необходимы для авторизации на openstreetmap.org. + Имя пользователя OSM Цель Использовать английские названия вместо местных Использовать английские названия @@ -957,7 +957,7 @@ Фильтр {0} удалён Фильтр {0} создан Режим специальных возможностей - Включает дополнительные возможности для невизуального доступа + Включает дополнительные возможности для невизуального доступа. Включён Отключён Использовать системную настройку @@ -997,13 +997,13 @@ По сторонам света (8 секторов) По циферблату (12 секторов) Стиль указания направлений - Выберите стиль указания относительных направлений во время движения + Выберите стиль указания относительных направлений во время движения. Включить автооповещение Выключить автооповещение Я здесь - Менять масштаб карты горизонтальными движениями трекбола + Менять масштаб карты горизонтальными движениями трекбола. Использовать трекбол для изменения масштаба - Настройки для невизуального доступа + Настройки для невизуального доступа. Специальные возможности Настройки векторного рендеринга Дополнительные слои @@ -1025,7 +1025,7 @@ Навигационный сервис OsmAnd Локальная навигация OsmAnd временно недоступна. Левосторонняя навигация - Включите, если пользуетесь навигацией в странах с левосторонним движением + Выбрать для стран с левосторонним движением. Данные роутинга Формат Поиск POI @@ -1076,7 +1076,8 @@ Укажите скорость анимации маршрута Выделено памяти %1$s MB (Ограничение Android %2$s MB, Dalvik %3$s MB). Выделено памяти - Всего физической памяти выделено приложению %1$s MB (Dalvik %2$s MB, другое %3$s MB). Proportional memory %4$s MB (Ограничение Android %5$s MB, Dalvik %6$s MB). + Всего физической памяти выделено приложению %1$s MB (Dalvik %2$s MB, другое %3$s MB). +\nПропорциональная память %4$s MB (Ограничение Android %5$s MB, Dalvik %6$s MB). Всего физической памяти Часов Минут @@ -1117,7 +1118,7 @@ Избегать просёлочных дорог Избегать паромов Избегать при прокладке маршрута… - Избегать платных и просёлочных дорог, паромов + Избегать платных и просёлочных дорог, паромов. Настройка оповещений (ограничения скорости, вынужденные остановки, искусственные неровности), камеры скорости, информацию о полосах. Флуоресцентные маршруты Показывать сигналы… @@ -1136,9 +1137,9 @@ email Восход/закат OsmAnd - это навигационное приложение для путешествий с открытым исходным кодом - " OsmAnd (Open Street Maps Automated Navigation Directions) OsmAnd - это навигационное приложение с открытым исходным кодом и доступом к картам и данным на основе (OpenStreetMap). Все данные карт (векторные или растровые) могут быть сохранены на карту памяти устройства для использования без подключения к Интернет. OsmAnd также предоставляет оффлайн и онлайн средства построения маршрута включая голосовые инструкции по маршруту. Некоторые из основных возможностей приложения: - работа с векторными и растровыми картами без доступа в Интернет (для этого нужно предварительно сохранить карты на карту памяти устройства); - доступность компактных векторных карт для всех стран мира; - загрузка векторных и растровых карт для страны или области из самого приложения; - отображение дополнительной информации (слоёв) на карте, такой как GPX или навигационные маршруты, объекты (POI), избранные местоположения, линии высот, остановки общественного транспорта; наложение дополнительных карт с настраиваемой прозрачностью; - поиск адресов и объектов (POI) без доступа в Интернет; - построение маршрутов на небольшие расстояния без доступа в Интернет (экспериментальная функция); - режимы автомобиля, велосипеда и пешехода с возможностями: - автоматического переключения на дневной/ночной режим отрисовки карты; - изменения масштабы карты в зависимости от скорости; - вращения карты по компасу или направлению движения; - использования голосовых команд (воспроизводимых записанными или генерированными голосами) при движении по маршруту; - предупреждения о превышении допустимой скорости движения. Ограничения бесплатной версии OsmAnd: - ограниченное число загрузок карт; - нет возможности просматривать описание достопримечательностей из Wikipedia без использования Интернет. OsmAnd продолжает активно развиваться. Но так как проект финансируется только взносами пользователей, то дальнейшее развитие проекта и появление новых функциональных возможностей зависит от наличия этого финансирования. Поэтому если вам нравится приложение, подумайте о покупке OsmAnd+. Также на сайте osmand.net Вы можете профинансировать конкретную функциональную возможность или внести общий финансовый вклад в развитие проекта. " + "OsmAnd (Open Street Maps Automated Navigation Directions) OsmAnd - это навигационное приложение с открытым исходным кодом и доступом к картам и данным на основе (OpenStreetMap). Все данные карт (векторные или растровые) могут быть сохранены на карту памяти устройства для использования без подключения к Интернет. OsmAnd также предоставляет оффлайн и онлайн средства построения маршрута включая голосовые инструкции по маршруту. Некоторые из основных возможностей приложения: - работа с векторными и растровыми картами без доступа в Интернет (для этого нужно предварительно сохранить карты на карту памяти устройства); - доступность компактных векторных карт для всех стран мира; - загрузка векторных и растровых карт для страны или области из самого приложения; - отображение дополнительной информации (слоёв) на карте, такой как GPX или навигационные маршруты, объекты (POI), избранные местоположения, линии высот, остановки общественного транспорта; наложение дополнительных карт с настраиваемой прозрачностью; - поиск адресов и объектов (POI) без доступа в Интернет; - построение маршрутов на небольшие расстояния без доступа в Интернет (экспериментальная функция); - режимы автомобиля, велосипеда и пешехода с возможностями: - автоматического переключения на дневной/ночной режим отрисовки карты; - изменения масштабы карты в зависимости от скорости; - вращения карты по компасу или направлению движения; - использования голосовых команд (воспроизводимых записанными или генерированными голосами) при движении по маршруту; - предупреждения о превышении допустимой скорости движения. Ограничения бесплатной версии OsmAnd: - ограниченное число загрузок карт; - нет возможности просматривать описание достопримечательностей из Wikipedia без использования Интернет. OsmAnd продолжает активно развиваться. Но так как проект финансируется только взносами пользователей, то дальнейшее развитие проекта и появление новых функциональных возможностей зависит от наличия этого финансирования. Поэтому если вам нравится приложение, подумайте о покупке OsmAnd+. Также на сайте osmand.net Вы можете профинансировать конкретную функциональную возможность или внести общий финансовый вклад в развитие проекта." OsmAnd - это навигационное приложение для путешествий с открытым исходным кодом - " OsmAnd+ (Open Street Maps Automated Navigation Directions) OsmAnd+ - это навигационное приложение с открытым исходным кодом и доступом к картам и данным на основе (OpenStreetMap). Все данные карт (векторные или растровые) могут быть сохранены на карту памяти устройства для использования без подключения к Интернет. OsmAnd также предоставляет оффлайн и онлайн средства построения маршрута включая голосовые инструкции по маршруту. OsmAnd+ оплаченная версия программы, означает, что вы поддерживаете проект, финансируя разработку нового функционала и получаете последние обновления. Некоторые из основных возможностей приложения: - работа с векторными и растровыми картами без доступа в Интернет (для этого нужно предварительно сохранить карты на карту памяти устройства); - доступность компактных векторных карт для всех стран мира; - неограниченная загрузка векторных и растровых карт для страны или области из самого приложения; - достопримечательности из Wikipedia без доступа в Интернет (необходимо предварительно загрузить Wikipedia POI); - отображение дополнительной информации (слоёв) на карте, такой как GPX или навигационные маршруты, объекты (POI), избранные местоположения, линии высот, остановки общественного транспорта; наложение дополнительных карт с настраиваемой прозрачностью; - поиск адресов и объектов (POI) без доступа в Интернет; - построение маршрутов на небольшие расстояния без доступа в Интернет (экспериментальная функция); - режимы автомобиля, велосипеда и пешехода с возможностями: - автоматического переключения на дневной/ночной режим отрисовки карты; - изменения масштабы карты в зависимости от скорости; - вращения карты по компасу или направлению движения; - использования голосовых команд (воспроизводимых записанными или TTS голосами) при движении по маршруту; - предупреждения о превышении допустимой скорости движения. " + "OsmAnd+ (Open Street Maps Automated Navigation Directions) OsmAnd+ - это навигационное приложение с открытым исходным кодом и доступом к картам и данным на основе (OpenStreetMap). Все данные карт (векторные или растровые) могут быть сохранены на карту памяти устройства для использования без подключения к Интернет. OsmAnd также предоставляет оффлайн и онлайн средства построения маршрута включая голосовые инструкции по маршруту. OsmAnd+ оплаченная версия программы, означает, что вы поддерживаете проект, финансируя разработку нового функционала и получаете последние обновления. Некоторые из основных возможностей приложения: - работа с векторными и растровыми картами без доступа в Интернет (для этого нужно предварительно сохранить карты на карту памяти устройства); - доступность компактных векторных карт для всех стран мира; - неограниченная загрузка векторных и растровых карт для страны или области из самого приложения; - достопримечательности из Wikipedia без доступа в Интернет (необходимо предварительно загрузить Wikipedia POI); - отображение дополнительной информации (слоёв) на карте, такой как GPX или навигационные маршруты, объекты (POI), избранные местоположения, линии высот, остановки общественного транспорта; наложение дополнительных карт с настраиваемой прозрачностью; - поиск адресов и объектов (POI) без доступа в Интернет; - построение маршрутов на небольшие расстояния без доступа в Интернет (экспериментальная функция); - режимы автомобиля, велосипеда и пешехода с возможностями: - автоматического переключения на дневной/ночной режим отрисовки карты; - изменения масштабы карты в зависимости от скорости; - вращения карты по компасу или направлению движения; - использования голосовых команд (воспроизводимых записанными или TTS голосами) при движении по маршруту; - предупреждения о превышении допустимой скорости движения." Избегать автомагистралей Привязывать текущую позицию к дороге. Привязка к дороге @@ -1195,7 +1196,7 @@ Вы уверены, что хотите остановить навигацию? Вы уверены, что хотите удалить пункт назначения (и промежуточные пункты)? Точный маршрут (alpha) - Пожертвуйте, чтобы увидеть новые опции реализованными в приложении + Пожертвуйте, чтобы увидеть новые опции реализованными в приложении. Включите, для расчёта точных маршрутов без затруднений. Всё ещё ограниченн расстоянием и медленный. Затенение рельефа Использовать системное приложение для фото. @@ -1448,7 +1449,7 @@ " OsmAnd - открытый источник и активно развивается. Все могут способствовать развитию, сообщая об ошибках, улучшая переводы или программируя новые дополнения. Проект находится в живом состоянии непрерывного улучшения всеми этими формами взаимодействия разработчика и пользователя. Прогресс проекта также полагается на финансовые взносы, чтобы финансировать развитие, кодирование и тестирование новых функциональностей. Покупая OsmAnd+ Вы помогаете приложению быть ещё лучше! Также возможно финансировать определенные новые особенности или сделать общее пожертвование на osmand.net. Приблизительное покрытие карты и качество: - Западная Европа: **** - Восточная Европа: *** - Россия: *** - Северная Америка: *** - Южная Америка: ** - Азия: ** - Япония & Корея: *** - Ближний Восток: ** - Африка: ** - Антарктида: * Список поддерживаемых стран (в основном по всему миру!):↵ Афганистан, Албания, Алжир, Андорра, Ангола, Ангилья, Антигуа и Барбуда, Аргентина, Армения, Аруба, Австралия, Австрия, Азербайджан, Багамы, Бахрейн, Бангладеш, Барбадос, Белоруссия, Бельгия, Белиз, Бенин, Бермуды, Бутан, Боливия, Бонэйр, Босния и Герцеговина, Ботсвана, Бразилия, Британские Виргинские острова, Бруней, Болгария, Буркина-Фасо, Бурунди, Камбоджа, Камерун, Канада, Кабо-Верде, Центральноафриканская Республика, Чад, Чили, Китай, Колумбия, Коморские острова, Конго, Коста-Рика, Кот-д\"Ивуар, Хорватия, Куба, Кюрасао, Кипр, Чешская Республика, Дания, Джибути, Доминика, Доминиканская Республика, Эквадор, Египет, Сальвадор, Экваториальная Гвинея, Эритрея, Эстония, Эфиопия, Фиджи, Финляндия, Франция, Французская Гвиана, Французская Полинезия, Габон, Гамбия, Грузия, Германия, Гана, Гибралтар, Греция, Гренландия, Гренада, Гваделупа, Гуам, Гватемала, Гернси, Гвинея, Гвинея-Бисау, Гайана, Гаити, Ватикан, Гондурас, Гонконг, Венгрия, Исландия, Индия, Индонезия, Иран, Ирак, Ирландия, Остров Мэн, Израиль, Италия, Ямайка, Япония, Джерси, Иордания, Казахстан, Кения, Кирибати, Северная Корея и Южная Корея, Кувейт, Кыргызстан, Лаос, Латвия, Ливан, Лесото, Либерия, Ливия, Лихтенштейн, Литва, Люксембург, Макао, Македония, Мадагаскар, Малави, Малайзия, Мальдивы, Мали, Мальта, Мартиника, Мавритания, Маврикий, Майотта, Мексика, Микронезия, Молдова, Монако, Монголия, Черногория, Монтсеррат, Марокко, Мозамбик, Мьянма, Намибия, Науру, Непал, Нидерланды, Нидерландские Антильские острова, Новая Каледония, Новая Зеландия, Никарагуа, Нигер, Нигерия, Норвегия, Оман, Пакистан, Палау, палестинская Территория, Панама, Папуа-Новая Гвинея, Парагвай, Перу, Филиппины, Польша, Португалия, Пуэрто-Рико, Катар, Румыния, Россия, Руанда, Сен-Бартелеми, Остров Святой Елены, Сент-Китс и Невис, Сент-Люсия, Сен-Мартен, Сен-Пьер и Микелон, Сент-Винсент и Гренадины, Самоа, Сан-Марино, Саудовская Аравия, Сенегал, Сербия, Сейшельские острова, Сьерра-Леоне, Сингапур, Словакия, Словения, Сомали, Южная Африка, Южная Георгия, Южный Судан, Испания, Шри-Ланка, Судан, Суринам, Свазиленд, Швеция, Швейцария, Сирия, Тайвань, Таджикистан, Танзания, Таиланд, Тимор-Leste, Того, Токелау, Тонга, Тринидад и Тобаго, Тунис, Турция, Туркмения, Тувалу, Уганда, Украина, Объединенные Арабские Эмираты, Соединенное Королевство (UK), Соединенные Штаты Америки (США), Уругвай, Узбекистан, Вануату, Венесуэла, Вьетнам, Уоллис и Футуна, Западная Сахара, Йемен, Замбия, Зимбабве. " Только вручную (нажатием \"стрелочки\") - Повторять навигационные инструкции с регулярными интервалами + Повторять навигационные инструкции с регулярными интервалами. Повторять навигационные инструкции Объявление прибытия Как скоро вы хотите объявить о прибытии? @@ -1659,7 +1660,7 @@ "Плагин активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на экране карты, или также автоматически записывает все ваши маршруты навигации в файл GPX. \n \nЗаписанными треками можно поделиться с вашими друзьями или использовать их для вклада в OSM. Спортсмены могут использовать записанные треки для контроля за тренировками. Некоторый базовый анализ треков может быть выполнен непосредственно в OsmAnd, например, время прохождения круга, средняя скорость и т.д., треки, конечно, позднее также могут быть проанализированы в специальных инструментах анализа сторонних производителей." - Online OSM карта с картинками + Online OSM карта с изображениями. Всегда спрашивать Выберите интервал для записи трека (включается через виджет записи GPX на карте). Общий интервал записи трека @@ -1678,7 +1679,7 @@ Указанное название избранной точки уже используется, для предотвращения дублирования имен название было изменено на %1$s. Установите размер текста для карты. Размер текста - Нажмите на любой элемент списка для просмотра более подробной информации, нажмите и удерживайте, чтобы поместить в архив или удалить. Текущие данные на устройстве (%1$s свободно): + Нажмите на любой элемент списка для просмотра более подробной информации, долго удерживайте, чтобы поместить в архив или удалить. Текущие данные на устройстве (%1$s свободно): Устройство не обнаружено Анонимный пользователь Сервис OsMo не доступен:\n- проверьте интернет соединение;\n- проверьте настройки;\n- проверьте наш Twitter: https://twitter.com/OsMomobi From c581953c15525460638b62d3664a36b4b38d9ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D1=96=D0=B9=20=D0=94=D1=83=D0=B1?= =?UTF-8?q?=D0=B8=D0=BA?= Date: Mon, 20 Nov 2017 21:00:53 +0000 Subject: [PATCH 155/157] Translated using Weblate (Ukrainian) Currently translated at 99.2% (2484 of 2502 strings) --- OsmAnd/res/values-uk/strings.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 8aefa8ed9e..b5832b33f2 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -26,7 +26,7 @@ Увімкніть для країн з лівостороннім рухом. Початкове місцезнаходження не визначено - Позиція ще не визначена + Розташування ще не визначено Змінити прозорість (0 - прозорий, 255 - непрозорий) Перервати завантаження файлу? Дякуємо вам за використання OsmAnd. Для роботи більшості основних можливостей програми потрібні детальні мапи регіонів, які можна завантажити з Інтернету за допомогою пункту меню \'Налаштування\' → \'Управління мапами\'. Після завантаження цих мап Ви зможете здійснювати пошук за адресою, POI і зупинками громадського транспорту. @@ -176,8 +176,8 @@ Користувацькі Файл зі закладками вже існує. Чи Ви хочете його замінити? Налаштування профілю - Профіль - Виберіть профіль роботи програми (кожен профіль зберігає налаштування окремо). + Типовий профіль + Вид мапи й налаштування навігації зберігаються для кожного окремого профілю. Встановіть Ваш типовий профіль. Навігація @@ -215,7 +215,7 @@ Автоцентрування мапи тільки під час навігації Повертати мапу в поточну позицію тільки при навігації за маршрутом. - Центрування мапи увімкнене. + Використовується режим автоматичного центрування мапи. Налаштування векторного рендерінгу Додаткові шари Налаштування онлайн мап @@ -3099,4 +3099,6 @@ Виберіть, скільки індикаторів напрямків ви хотіли б бачити. Направо Наліво + Пошук треків з шляховими точками + Більше From a3c5841777c137c3fee3c96b8bbff7216ea55307 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Mon, 20 Nov 2017 16:25:49 +0000 Subject: [PATCH 156/157] Translated using Weblate (Hebrew) Currently translated at 32.0% (1063 of 3315 strings) --- OsmAnd/res/values-he/phrases.xml | 71 ++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/OsmAnd/res/values-he/phrases.xml b/OsmAnd/res/values-he/phrases.xml index d2bee40db4..a2023fa4bd 100644 --- a/OsmAnd/res/values-he/phrases.xml +++ b/OsmAnd/res/values-he/phrases.xml @@ -1074,4 +1074,75 @@ כרטיסי סיבוס אינם מכובדים העברות בינלאומיות העברות בינלאומיות אינן מכובדות + כרטיס מזומן (Geldkarte) + כרטיס מזומן (Geldkarte) אינו מכובד + Proton + כרטיסי Proton אינם מכובדים + AvantCard + AvantCard אינו מכובד + MEP + MEP אינו מכובד + Minipay + Minipay אינו מכובד + MiniCash + MiniCash אינו מכובד + Moneo + Moneo אינו מכובד + Monedero 4B + Monedero 4B אינו מכובד + Monedero + Monedero אינו מכובד + BankAxess + BankAxess אינו מכובד + Coinkite + מטבעות Coinkite אינם מכובדים + Roadrunner + כרטיסי Roadrunner אינם מכובדים + SVG + SVG אינו מכובד + תשלומים ב־SMS + תשלומים ב־SMS אינם מכובדים + OV-Chipkaart + OV-Chipkaart אינו מכובד + Oyster + כרטיסי Oyster אינם מכובדים + SUBE + כרטיסי SUBE אינם מכובדים + Via Verde + Via Verde אינו מכובד + שוברי מזון + שוברי מזון אינם מכובדים + PayPal + PayPal אינו מכובד + U-Key + U-Key אינו מכובד + אסימונים + אסימונים אינם מכובדים + כרטיסי שי + כרטיסי שי אינם מכובדים + Golden Crown + כרטיסי Golden Crown אינם מכובדים + PRO100 + כרטיסי PRO100 אינם מכובדים + Yandex.Money + Yandex.Money אינו מכובד + תיאור התשלום + + מקום לאירועים + + צמחונות + צמחונות (מעט) + צמחונות בלבד + צמחונות + תזונה צמחונית: אין + טבעונות + טבעונות בלבד + טבעונות + תזונה טבעונית: אין + נטול גלוטן + נטול גלוטן בלבד + נטול גלוטן + תזונה נטולת גלוטן: אין + כשר + שקע: NEMA 14-50: פלט From f099a33257d2cf5951a5bb0a9553482dd21627c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Ny=C4=8Da?= Date: Mon, 20 Nov 2017 22:06:57 +0000 Subject: [PATCH 157/157] Translated using Weblate (Upper Sorbian) Currently translated at 56.1% (1863 of 3315 strings) --- OsmAnd/res/values-b+hsb/phrases.xml | 52 ++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-b+hsb/phrases.xml b/OsmAnd/res/values-b+hsb/phrases.xml index ae94c43d92..697df6e39f 100644 --- a/OsmAnd/res/values-b+hsb/phrases.xml +++ b/OsmAnd/res/values-b+hsb/phrases.xml @@ -428,8 +428,8 @@ Kanu: haj Kanu: ně -typ ćěriwa - typ +družina ćěriwa + družina ćěriwa (avia) typ typ typ @@ -1504,7 +1504,7 @@ nabožinske twory policija - wohnjowa wobora + wohnjostraža nuzowy telefon hydrant woheńhašak @@ -1962,4 +1962,48 @@ čisło mosta čisło tunla - + Reparatura elektroniki: ličaki + Reparatura elektroniki: domjacnostne nastroje + Reparatura elektroniki: telefony + Reparatura elektroniki: telewizory + + wuchowanska rynka + + majkanski zwěrjenc + dźiwinowy park + hajnišćo + woljera + sokolnistwo + stejnišća + + předań + předań: ně + předań: haj; trjebane + předań: trjebane + narunanki + narunanki: ně + stejišćo: wonka + stejišćo: nutřka + stejišćo: platforma + stejišćo: kiosk + stejišćo: móst + stejišćo: sćěna + stejišćo: zachod + + widźomnosć: dom + widźomnosć: dróha + wočinjene + začinjene + wobmjezowane + wobškodźene + reparatura trěbna + + koleso: haj + koleso: ně + Parkowanski popłatk: haj + Parkowanski popłatk: ně + Parkowanski popłatk + + nabiwanska stacija + +