Merge branch 'master' of ssh://github.com/osmandapp/Osmand into my_places_favourites

This commit is contained in:
PavelRatushny 2017-08-03 12:49:31 +03:00
commit e22361495d
52 changed files with 791 additions and 102 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/add_gpx_waypoint_bottom_sheet"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?attr/bottom_menu_view_bg"
android:clickable="true"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:src="@drawable/ic_action_photo_dark"/>
<LinearLayout
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/add_gpx_waypoint_bottom_sheet_title"
style="@style/TextAppearance.ContextMenuTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
android:text="@string/add_gpx_waypoint_bottom_sheet_title"/>
<TextView
android:id="@+id/description"
style="@style/TextAppearance.ContextMenuSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp"
tools:text="Lat: 50.45375 Lon: 30.48693"/>
</LinearLayout>
<android.support.v7.widget.AppCompatButton
android:id="@+id/create_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/shared_string_create"/>
<android.support.v7.widget.AppCompatButton
android:id="@+id/cancel_button"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_gravity="center_vertical"
android:text="@string/shared_string_cancel"/>
</LinearLayout>

View file

@ -261,4 +261,11 @@
android:layout_gravity="bottom|left"
tools:visibility="visible"/>
<include
layout="@layout/add_gpx_waypoint_bottom_sheet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|left"
tools:visibility="visible"/>
</LinearLayout>

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/add_gpx_waypoint_bottom_sheet"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?attr/bottom_menu_view_bg"
android:clickable="true"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:src="@drawable/ic_action_photo_dark"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/add_gpx_waypoint_bottom_sheet_title"
style="@style/TextAppearance.ContextMenuTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
android:text="@string/add_gpx_waypoint_bottom_sheet_title"/>
<TextView
android:id="@+id/description"
style="@style/TextAppearance.ContextMenuSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp"
tools:text="Lat: 50.45375\nLon: 30.48693"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp">
<Button
android:id="@+id/create_button"
style="@style/DialogActionButton"
android:layout_marginRight="8dp"
android:text="@string/shared_string_create"/>
<Button
android:id="@+id/cancel_button"
style="@style/DialogCancelButton"
android:text="@string/shared_string_cancel"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -22,7 +22,7 @@
android:paddingBottom="12dp"
android:paddingTop="12dp">
<ImageButton
<ImageView
android:id="@+id/ruler_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -37,7 +37,7 @@
tools:src="@drawable/ic_action_ruler"/>
<ImageButton
android:id="@+id/up_down_icon"
android:id="@+id/up_down_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
@ -70,9 +70,9 @@
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/measurement_distance_text_view"
android:layout_toLeftOf="@id/up_down_icon"
android:layout_toLeftOf="@id/up_down_button"
android:layout_toRightOf="@id/measurement_distance_text_view"
android:layout_toStartOf="@id/up_down_icon"
android:layout_toStartOf="@id/up_down_button"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_list_text_size"
tools:text="points: 3"/>
@ -88,7 +88,7 @@
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/previous_dot_icon"
android:id="@+id/undo_point_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
@ -102,14 +102,14 @@
tools:src="@drawable/ic_action_undo_dark"/>
<ImageButton
android:id="@+id/next_dot_icon"
android:id="@+id/redo_point_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_toEndOf="@id/previous_dot_icon"
android:layout_toRightOf="@id/previous_dot_icon"
android:layout_toEndOf="@id/undo_point_button"
android:layout_toRightOf="@id/undo_point_button"
android:background="@null"
tools:src="@drawable/ic_action_redo_dark"/>

View file

@ -223,6 +223,9 @@
<include layout="@layout/move_marker_bottom_sheet"
tools:visibility="gone"/>
<include layout="@layout/add_gpx_waypoint_bottom_sheet"
tools:visibility="gone"/>
<FrameLayout
android:id="@+id/bottomFragmentContainer"
android:layout_width="match_parent"

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/MainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ExpandableListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:divider="@null"
android:dividerHeight="0dp"
android:drawSelectorOnTop="false"
android:groupIndicator="@android:color/transparent" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="16dp"
android:src="@drawable/ic_action_plus"
android:contentDescription="@string/quick_action_new_action"
app:backgroundTint="@color/dashboard_blue"/>
</RelativeLayout>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_save_as_gpx"
android:icon="@drawable/ic_action_polygom_dark"
android:title="@string/shared_string_save_as_gpx"/>
<item
android:id="@+id/action_clear_all"
android:icon="@drawable/ic_action_reset_to_default_dark"
android:title="@string/shared_string_clear_all"/>
</menu>

View file

@ -1559,4 +1559,8 @@
<string name="poi_direction_all">الاتجاه: الكل</string>
<string name="poi_direction_exit">الاتجاه: مخرج</string>
</resources>
<string name="poi_piste_grooming">تعبيد الطريق الثلجي</string>
<string name="poi_animal_shelter_type">الحيوانات مسموح بها</string>
<string name="poi_animal_shelter_purpose">الغرض</string>
</resources>

View file

@ -2718,4 +2718,8 @@
<string name="live_monitoring_max_interval_to_send_desrc">تحديد الوقت الإضافي المخزن للحفاظ على المواقع وإرسالها دون اتصال</string>
<string name="mappilary_no_internet_desc">أنت بحاجة إلى إنترنت لعرض الصور من Mapillary</string>
<string name="retry">اعد المحاولة</string>
<string name="measurement_tool_action_bar">حدد موقعا على الخريطة وانقر على إضافة لإضافة نقطة إلى المسطرة.</string>
<string name="measurement_tool">أداة القياس</string>
<string name="add_gpx_waypoint_bottom_sheet_title">إضافة إحداثية وجهة gpx</string>
<string name="shared_string_create">إنشاء</string>
</resources>

View file

@ -1699,4 +1699,7 @@
<string name="pref_vector_map">Vektor xəritə parametrləri</string>
<string name="file_with_name_already_exists">Bu adda fayl artıq mövcuddur.</string>
<string name="gpx_navigation">GPX marşrut</string>
</resources>
<string name="measurement_tool">Ölçmə aləti</string>
<string name="add_gpx_waypoint_bottom_sheet_title">GPX yol nöqtəsi əlavə et</string>
<string name="shared_string_create">Yarat</string>
</resources>

View file

@ -2419,8 +2419,8 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd
<string name="full_version_thanks">Dziakuj Vam za nabyćcio poŭnaj versii OsmAnd!</string>
<string name="routing_attr_relief_smoothness_factor_hills_name">Ŭzhorysty</string>
<string name="routing_attr_relief_smoothness_factor_more_plains_name">Raŭninny</string>
<string name="routing_attr_driving_style_safety_name">Biaśpiečny</string>
<string name="routing_attr_driving_style_speed_name">Chutkasny</string>
<string name="routing_attr_driving_style_safety_name">Addavać pieravahu vakolnym daroham</string>
<string name="routing_attr_driving_style_speed_name">Bolš za karotkija maršruty</string>
<string name="routing_attr_driving_style_balance_name">Zbałansavany</string>
<string name="shared_string_slope">Schił</string>
<string name="add_new_folder">Dadać novuju tečku</string>
@ -2750,7 +2750,7 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd
<string name="range_min_max">Adliehlasć = Min./Maks.</string>
<string name="min_max">Min./Maks.</string>
<string name="release_2_7">\\022 Dadatak Mapillary z vuličnymi vyjavami
<string name="release_2_7">• Dadatak Mapillary z vuličnymi vyjavami
\n
\n • Vidžet-liniejka dlia vymiarenniaŭ dystancyj
\n
@ -2760,4 +2760,17 @@ U vypadku, kali vy lubіcie OsmAnd і OSM і chočacie padtrymać jaho, heta іd
\n
\n</string>
<string name="rendering_value_translucent_pink_name">Paŭprazrysty ružovy</string>
<string name="measurement_tool">Vymiareńnie</string>
<string name="quick_action_resume_pause_navigation">Adnavić/Prypynić Navihacyju</string>
<string name="quick_action_resume_pause_navigation_descr">Naciśnicie hetuju knopku, kab prypynić navihacyju ci adnavić jaje, kali jana ŭžo była prypynienaja.</string>
<string name="quick_action_show_navigation_finish_dialog">Pakazvać dyjałoh Zaviaršeńnie navihacyi</string>
<string name="quick_action_start_stop_navigation">Start/Finiš Navihacyi</string>
<string name="quick_action_start_stop_navigation_descr">Naciśnicie hetuju knopku, kab pačać navihacyju ci spynić jaje, kali jana ŭžo pačałasia.</string>
<string name="mappilary_no_internet_desc">Vam patrebien Internet dla prahladu fatahrafij z Mapillary</string>
<string name="retry">Paŭtaryć sprobu</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Dadać GPX šlach</string>
<string name="shared_string_create">Stvaryć</string>
<string name="measurement_tool_action_bar">Vyłučycie miesća na mapie i naćisnicie knopku Dadać, kab dadać kropku da liniejcy.</string>
<string name="live_monitoring_max_interval_to_send">Čas bufieryzacyi dlia anlajn sačennia</string>
<string name="live_monitoring_max_interval_to_send_desrc">Zadaje čas bufieryzacyi dlia zbieražennia miescaŭ dlia adpraŭki biez zlučennia</string>
</resources>

View file

@ -3464,4 +3464,30 @@
<string name="poi_spaceport">Касмадром</string>
<string name="poi_direction_n">Напрамак: поўнач</string>
<string name="poi_direction_nne">Напрамак: паўночна-паўночны ўсход</string>
<string name="poi_direction_ne">Напрамак: паўночны ўсход</string>
<string name="poi_direction_ene">Напрамак: усходне-паўночны ўсход</string>
<string name="poi_direction_e">Напрамак: усход</string>
<string name="poi_direction_ese">Напрамак: усходне-паўднёвы ўсход</string>
<string name="poi_direction_se">Напрамак: паўднёвы ўсход</string>
<string name="poi_direction_sse">Напрамак: паўднёва-паўднёвы ўсход</string>
<string name="poi_direction_s">Напрамак: поўдзень</string>
<string name="poi_direction_ssw">Напрамак: паўднёва-паўднёвы захад</string>
<string name="poi_direction_sw">Напрамак: паўднёвы захад</string>
<string name="poi_direction_wsw">Напрамак: заходне-паўднёвы захад</string>
<string name="poi_direction_w">Напрамак: захад</string>
<string name="poi_direction_wnw">Напрамак: заходне-паўночны захад</string>
<string name="poi_direction_nw">Напрамак: паўночны захад</string>
<string name="poi_direction_nnw">Напрамак: паўночна-паўночны захад</string>
<string name="poi_direction_forward">Напрамак: уперад</string>
<string name="poi_direction_backward">Напрамак: назад</string>
<string name="poi_direction_clockwise">Напрамак: па гадзіннікавай стрэлцы</string>
<string name="poi_direction_anticlockwise">Напрамак: супраць гадзіннікавай стрэлцы</string>
<string name="poi_direction_up">Напрамак: уверх</string>
<string name="poi_direction_down">Напрамак: уніз</string>
<string name="poi_direction_entrance">Напрамак: уваход</string>
<string name="poi_direction_exit">Напрамак: выхад</string>
<string name="poi_direction_all">Напрамак: на ўсе бакі</string>
</resources>

View file

@ -2637,9 +2637,9 @@
<string name="routing_attr_relief_smoothness_factor_hills_name">Гарысты</string>
<string name="routing_attr_relief_smoothness_factor_plains_name">Пагорысты</string>
<string name="routing_attr_relief_smoothness_factor_more_plains_name">Раўнінны</string>
<string name="routing_attr_driving_style_speed_name">Швыдкі</string>
<string name="routing_attr_driving_style_speed_name">Кароткія маршруты</string>
<string name="routing_attr_driving_style_balance_name">Збалансаваны</string>
<string name="routing_attr_driving_style_safety_name">Бяспечны</string>
<string name="routing_attr_driving_style_safety_name">Аддаваць перавагу завулкам</string>
<string name="do_not_send_anonymous_app_usage">На адсылаць ананімнай статыстыкі выкарыстання</string>
<string name="do_not_send_anonymous_app_usage_desc">OsmAnd збірае інфармацыю аб тым, які часткі праграмы выкарыстоўваюцца вамі. Ваша месцазнаходжанне ніколі не адпраўляецца, як і ўсё, што вы ўводзіце, якія вобласці праглядаеце, што шукаеце ці спампоўваеце.</string>
<string name="do_not_show_startup_messages">Не паказваць паведамленні пры старце</string>
@ -2809,4 +2809,17 @@
\n • Іншыя паляпшэнні і выпраўленні хібаў
\n
\n</string>
</resources>
<string name="measurement_tool_action_bar">Вылучыце месца на мапе і націсніце кнопку Дадаць, каб дадаць кропку да лінейкі.</string>
<string name="measurement_tool">Вымярэнне</string>
<string name="quick_action_resume_pause_navigation">Аднавіць/прыпыніць навігацыю</string>
<string name="quick_action_resume_pause_navigation_descr">Націсніце гэтую кропку, каб прыпыніць навігацыю ці аднавіць яе, калі яна ўжо была прыпынена.</string>
<string name="quick_action_show_navigation_finish_dialog">Паказаць дыялог завяршэння навігацыі</string>
<string name="quick_action_start_stop_navigation">Пачаць/спыніць навігацыю</string>
<string name="quick_action_start_stop_navigation_descr">Націсніце гэтую кнопку, каб пачаць навігацыю ці спыніць яе, калі яна ўжо пачалася.</string>
<string name="live_monitoring_max_interval_to_send">Час буферызацыі для анлайн сачэння</string>
<string name="live_monitoring_max_interval_to_send_desrc">Задае час буферызацыі для зберажэння месцаў для адпраўкі без злучэння</string>
<string name="mappilary_no_internet_desc">Вам патрэбен Інтэрнэт для прагляду фатаграфій з Mapillary</string>
<string name="retry">Паўтарыць</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Дадаць GPX-кропку</string>
<string name="shared_string_create">Стварыць</string>
</resources>

View file

@ -2814,4 +2814,8 @@ Tidligere destination bliver sidste mellemliggende punkt.</string>
<string name="live_monitoring_max_interval_to_send_desrc">Angiv en buffer for hvor lang tid positioner skal gemmes, når der ingen internetforbindelse er</string>
<string name="retry">Prøv igen</string>
<string name="mappilary_no_internet_desc">Internetforbindelse er nødvendig for at se fotos fra Mapillary</string>
</resources>
<string name="measurement_tool">Måleværktøj</string>
<string name="measurement_tool_action_bar">Vælg en placering på kortet og klik på Tilføj for at føje et punkt til linealen.</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Tilføj gpx rutepunkt</string>
<string name="shared_string_create">Opret</string>
</resources>

View file

@ -79,7 +79,7 @@
<string name="poi_boutique">Galanteriejo</string>
<string name="poi_camera">Fotiloj-k-lensoj vendejo</string>
<string name="poi_carpet">Tapiŝ-vendejo</string>
<string name="poi_chemist">Drogejo</string>
<string name="poi_chemist">Purigaĵ-vendejo</string>
<string name="poi_charity">Almoza vendejo</string>
<string name="poi_clothes">Vest-vendejo</string>
<string name="poi_clothes_children">Infanvest-vendejo</string>
@ -1775,19 +1775,19 @@
<string name="poi_bin_yes">Kun rubujo</string>
<string name="poi_bin_no">Sen rubujo</string>
<string name="poi_shelter_type_public_transport">Publik-transporta</string>
<string name="poi_shelter_type_public_transport">publik-transporta</string>
<string name="poi_shelter_type_tent">Ŝirmeja-speco: tendo</string>
<string name="poi_shelter_type_abandoned">Ŝirmeja-speco: forlasita objekto</string>
<string name="poi_shelter_type_sun_shelter">Kontraŭ-suna</string>
<string name="poi_shelter_type_building">Konstruaĵo</string>
<string name="poi_shelter_type_wildlife_hide">Best-observejo</string>
<string name="poi_shelter_type_rock_shelter">Groto</string>
<string name="poi_shelter_type_picnic_shelter">Senflankmura (piknika)</string>
<string name="poi_shelter_type_lean_to">Duon-ferma</string>
<string name="poi_shelter_type_weather_shelter">Budo kontraŭ-vetera</string>
<string name="poi_shelter_type_basic_hut">Kabano</string>
<string name="poi_shelter_type_field_shelter">Best-ŝirmejo</string>
<string name="poi_shelter_type_sun_shelter">kontraŭsuna</string>
<string name="poi_shelter_type_building">konstruaĵo</string>
<string name="poi_shelter_type_wildlife_hide">best-observejo</string>
<string name="poi_shelter_type_rock_shelter">groto</string>
<string name="poi_shelter_type_picnic_shelter">senflankmura (piknika)</string>
<string name="poi_shelter_type_lean_to">duon-ferma</string>
<string name="poi_shelter_type_weather_shelter">budo kontraŭvetera</string>
<string name="poi_shelter_type_basic_hut">kabano</string>
<string name="poi_shelter_type_field_shelter">best-ŝirmejo</string>
<string name="poi_internet_access_type_wlan">sendrata</string>
<string name="poi_internet_access_type_terminal">terminalo</string>
<string name="poi_internet_access_type_wired">drata</string>

View file

@ -2734,4 +2734,10 @@ Indikas lokon: %1$s x %2$s"</string>
<string name="quick_action_start_stop_navigation_descr">Premu tiun ĉi butonon por ekigi navigadon aŭ por ĉesigi ĝin se ĝi estas jam aktivigita.</string>
<string name="live_monitoring_max_interval_to_send">Temp-bufro por enreta registrado</string>
<string name="live_monitoring_max_interval_to_send_desrc">Difini temp-bufron por konservi sendendajn poziciojn seninterrete</string>
</resources>
<string name="measurement_tool">Mezurilo</string>
<string name="mappilary_no_internet_desc">Vi bezonas interret-konekton por vidi fotojn de Mapillary</string>
<string name="retry">Reprovi</string>
<string name="measurement_tool_action_bar">Elektu pozicion sur la mapo kaj premu Aldoni por aldoni punkton al mezuri.</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Aldoni GPX-navigadpunkton</string>
<string name="shared_string_create">Krei</string>
</resources>

View file

@ -2698,4 +2698,8 @@ Proporciona un código completo</string>
<string name="live_monitoring_max_interval_to_send_desrc">Especifica el tiempo que el búfer mantendrá los lugares para enviar sin conexión</string>
<string name="mappilary_no_internet_desc">Debes tener conexión a Internet para ver fotos de Mapillary</string>
<string name="retry">Reintentar</string>
<string name="measurement_tool_action_bar">Elige una ubicación en el mapa y pulsa «Añadir» para añadir un punto en la regla.</string>
<string name="measurement_tool">Herramienta de medición</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Añadir punto de ruta GPX</string>
<string name="shared_string_create">Crear</string>
</resources>

View file

@ -2699,4 +2699,8 @@ Proporciona un código completo</string>
<string name="live_monitoring_max_interval_to_send_desrc">Especifica el tiempo que el búfer mantendrá los lugares para enviar sin conexión</string>
<string name="mappilary_no_internet_desc">Debes tener conexión a Internet para ver fotos de Mapillary</string>
<string name="retry">Reintentar</string>
<string name="measurement_tool_action_bar">Elige una ubicación en el mapa y pulsa «Añadir» para añadir un punto en la regla.</string>
<string name="measurement_tool">Herramienta de medición</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Añadir punto de ruta GPX</string>
<string name="shared_string_create">Crear</string>
</resources>

View file

@ -2748,4 +2748,8 @@ Area honi dagokio: %1$s x %2$s</string>
<string name="live_monitoring_max_interval_to_send_desrc">Zehaztu bidaltzeke dauden kokalekuak gordetzeko denbora-buffer bat</string>
<string name="mappilary_no_internet_desc">Internet behar duzu Mapillary-ko argazkiak ikusteko</string>
<string name="retry">Saiatu berriro</string>
<string name="measurement_tool">Neurtzeko tresna</string>
<string name="measurement_tool_action_bar">Hautatu kokaleku bat mapan eta egin klik Gehitu botoian erregelan puntu bat gehitzeko.</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Gehitu gpx bide-puntua</string>
<string name="shared_string_create">Sortu</string>
</resources>

View file

@ -2763,4 +2763,5 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
<string name="moving_time">Judėjimo laikas</string>
<string name="max_min">Maks/Min</string>
<string name="min_max">Min/Maks</string>
<string name="osmand_plus_extended_description_part8">Apytikslė žemėlapių aprėptis ir kokybė: • Vakarų Europa: **** • Rytų Europa: *** • Rusija: *** • Šiaurės Amerika: *** • Pietų Amerika: ** • Azija: ** • Japonija ir Korėja: *** • Artimieji Rytai: ** • Afrika: ** • Antarktika: * Daugelį šalių visame pasaulyje galima atsisiųsti! Nuo Afganistano iki Zimbabvės, nuo Australijos iki JAV. Argentina, Brazilija, Kanada, Prancūzija, Vokietija, Meksika, Jungtinė Karalystė, Ispanija…</string>
</resources>

View file

@ -638,7 +638,7 @@
<string name="osmand_accessibility_description">Umożliwia korzystanie ze specjalnych ułatwień dostępu urządzenia bezpośrednio w OsmAnd. Pozwala na np. dostosowanie szybkości mowy syntezowanych komunikatów głosowych, skonfigurowanie poruszania się po ekranie za pomocą pada kierunkowego, użycie trackballa do zmiany przybliżenia lub użycie syntezowanych komunikatów głosowych np. do automatycznego powiadamiania o położeniu.</string>
<string name="osmand_development_plugin_description">Wyświetla ustawienia dotyczące rozwoju i diagnozowania błędów. Dodaje możliwość symulacji nawigacji, wyświetlania informacji o wydajności renderowania, czy też testowania wskazówek głosowych. Te funkcje oraz ustawienia przeznaczone są dla twórców oprogramowania. Zwykły użytkownik nie potrzebuje ich do prawidłowego działania programu.</string>
<string name="osmand_development_plugin_description">Wyświetla ustawienia dotyczące rozwoju i diagnozowania błędów. Dodaje możliwość symulacji nawigacji, wyświetlania informacji o wydajności renderowania, czy też testowania komunikatów głosowych. Te funkcje oraz ustawienia przeznaczone są dla twórców oprogramowania. Zwykły użytkownik nie potrzebuje ich do prawidłowego działania programu.</string>
<string name="plugins_screen">Wtyczki</string>
<string name="prefs_plugins_descr">Aktywuje zaawansowane ustawienia i dodatkową funkcjonalność</string>
@ -859,7 +859,7 @@ Miejsce parkowania oraz czas można znaleźć na karcie w panelu oraz na widżec
<string name="map_widget_speed">Prędkość</string>
<string name="map_widget_distance">Cel trasy</string>
<string name="map_widget_altitude">Wysokość</string>
<string name="map_widget_time">Czas do celu</string>
<string name="map_widget_time">Czas do osiągnięcia celu</string>
<string name="map_widget_next_turn">Następny zakręt</string>
<string name="map_widget_next_turn_small">Następny zakręt (mały)</string>
<string name="map_widget_next_next_turn">Drugi zakręt</string>
@ -946,26 +946,24 @@ OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej
<string name="poi_filter_accomodation">Zakwaterowanie</string>
<string name="poi_filter_restaurants">Restauracje</string>
<string name="poi_filter_sightseeing">Zwiedzanie</string>
<string name="osmand_plus_long_description_1000_chars">"
OsmAnd+ (OSM Automatyczne Nawigowanie Do celu)
OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej gamy globalnych map OpenStreetMap (OSM). Wszystkie dane map (wektorowe lub kafelkowe) mogą być przechowywane na karcie pamięci telefonu w użycia offline. OsmAnd oferuje również funkcjonalność wyznaczania tras w trybie offline i online z zapowiedziami głosowymi.
OsmAnd+ jest płatną wersją programu, kupując program wspierasz projekt, nowe funkcje i otrzymujesz najnowsze uaktualnienia.
Niektóre z podstawowych funkcji:
- Działa trybie offline (przechowuje pobrane mapy wektorowych lub kafelkowe w pamięci urządzenia)
- Dostępne kompaktowe mapy w trybie offlinie dla całego świata
- Pobieranie map kraju lub regionu bezpośrednio z aplikacji
- Możliwość nakładania kilku warstw map, takich jak GPX lub tras nawigacji, ciekawe miejsc, ulubionych, linii konturu, przystanków komunikacji miejskiej, dodatkowe mapy z konfigurowalną przejrzystością
- Wyszukiwanie Offline adresów i miejsc (POI)
- Wyznaczanie w trybie Offline tras na średnich dystansach
- Tryby samochodowy, rowerowy i pieszy z:
- opcjonalnym automatycznym przełączaniem widoku dzień/noc
- opcjonalnie skalowanie map w zależności od prędkości
- opcjonalne wyrównanie map według kompasu lub kierunku ruchu
- opcjonalne wyświetlanie wskazywanie pasów, ograniczeń prędkości, nagrane i syntezowane komunikaty głosowe.
"</string>
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automatyczne Nawigowanie Do celu)
\n
\n OsmAnd jest otwarto-źródłowym programem do nawigacji z dostępem do szerokiej gamy globalnych map OpenStreetMap (OSM). Wszystkie dane map (wektorowe lub kafelkowe) mogą być przechowywane na karcie pamięci telefonu do użycia bez połączenia z siecią. OsmAnd umożliwia również wyznaczanie tras zarówno w trybie offline i online z komunikatami głosowymi.
\n
\nOsmAnd+ jest płatną wersją programu, kupując program wspierasz projekt, nowe funkcje i otrzymujesz najnowsze uaktualnienia.
\n
\nNiektóre z podstawowych funkcji:
\n - Działa trybie offline (przechowuje pobrane mapy wektorowych lub kafelkowe w pamięci urządzenia)
\n - Dostępne kompaktowe mapy w trybie offlinie dla całego świata
\n - Pobieranie map kraju lub regionu bezpośrednio z aplikacji
\n - Możliwość nakładania kilku warstw map, takich jak GPX lub tras nawigacji, ciekawe miejsc, ulubionych, linii konturu, przystanków komunikacji miejskiej, dodatkowe mapy z konfigurowalną przejrzystością
\n - Wyszukiwanie Offline adresów i miejsc (POI)
\n - Wyznaczanie w trybie Offline tras na średnich dystansach
\n - Tryby samochodowy, rowerowy i pieszy z:
\n - opcjonalnym automatycznym przełączaniem widoku dzień/noc
\n - opcjonalnie skalowanie map w zależności od prędkości
\n - opcjonalne wyrównanie map według kompasu lub kierunku ruchu
\n - opcjonalne wyświetlanie wskazywanie pasów, ograniczeń prędkości, nagrane i syntezowane komunikaty głosowe.</string>
<string name="select_navigation_mode">Wybierz tryb poruszania się</string>
@ -1010,7 +1008,7 @@ Niektóre z podstawowych funkcji:
<string name="map_widget_max_speed">Ograniczenie prędkości</string>
<string name="monitoring_control_start">GPX</string>
<string name="monitoring_control_start">Ślad GPX</string>
<string name="download_srtm_maps">Poziomice</string>
<string name="download_select_map_types">Inne mapy</string>
@ -1138,8 +1136,8 @@ Niektóre z podstawowych funkcji:
<string name="plugin_distance_point_ele">wysokość</string>
<string name="plugin_distance_point">Punkt</string>
<string name="gpx_file_name">Nazwa pliku GPX</string>
<string name="gpx_saved_sucessfully">Plik GPX został pomyślnie zapisany do {0}</string>
<string name="osmand_distance_planning_plugin_description">Dodaje widżet za pomocą, którego można tworzyć ślady klikając na mapie. Dostarcza również możliwość użycia lub modyfikacji istniejących już plików GPX, co przydaje się do planowania wycieczek lub mierzenia odległości pomiędzy punktami. Wynik może zostać zapisany jako plik GPX i użyty ponownie.</string>
<string name="gpx_saved_sucessfully">Zapisano plik GPX do {0}</string>
<string name="osmand_distance_planning_plugin_description">Dodaje widżet za pomocą, którego można tworzyć ślady klikając na mapie. Dostarcza również możliwość użycia lub modyfikowania istniejących już plików GPX, co przydaje się do planowania wycieczek lub mierzenia odległości pomiędzy punktami. Wynik może zostać zapisany jako plik GPX i użyty ponownie.</string>
<string name="osmand_distance_planning_plugin_name">Kalkulator odległości i narzędzie planowania</string>
<string name="use_distance_measurement_help">* Naciśnij, aby zaznaczyć punkt.
\n * Naciśnij i przytrzymaj mapę, aby usunąć poprzedni punkt.
@ -1205,7 +1203,7 @@ Niektóre z podstawowych funkcji:
<string name="driving_region_descr">Wybiera region poruszania się: Stany Zjednoczone, Europa, Wielka Brytania, Azja oraz inne</string>
<string name="driving_region">Region ruchu</string>
<string name="driving_region_canada">Kanada</string>
<string name="map_widget_fps_info">Informacje diagnozowania błędów FPS</string>
<string name="map_widget_fps_info">Diagnozowanie błędów FPS</string>
<string name="local_index_tile_data_zooms">Pobrane stopnie przybliżenia: %1$s</string>
<string name="local_index_tile_data_expire">Wygaśnięcie (minuty): %1$s</string>
<string name="local_index_tile_data_downloadable">Do pobrania: %1$s</string>
@ -1294,7 +1292,7 @@ Niektóre z podstawowych funkcji:
<string name="routing_attr_avoid_motorway_description">Omijanie autostrad</string>
<string name="routing_attr_weight_name">Ograniczenie wagi</string>
<string name="routing_attr_weight_description">Określa maksymalną, dozwoloną masę pojazdu</string>
<string name="select_gpx">Wybierz GPX…</string>
<string name="select_gpx">Wybierz ślad GPX…</string>
<string name="route_descr_select_destination">Proszę wybrać cel trasy</string>
<string name="shared_string_select_on_map">Wskaż na mapie</string>
<string name="shared_string_favorite">Ulubione</string>
@ -1395,7 +1393,7 @@ Niektóre z podstawowych funkcji:
<string name="osmo_auth_pending">Oczekiwanie na uwierzytelnienie…</string>
<string name="osmo_conn_successfull">Nawiązano połączenie: %1$s</string>
<string name="osmo_mode_restart">Uruchom ponownie sesję OsMo</string>
<string name="osmo_settings_debug">Informacje diagnozowania błędów</string>
<string name="osmo_settings_debug">Diagnozowanie błędów</string>
<string name="hours_ago">godzin temu</string>
<string name="minutes_ago">minut temu</string>
<string name="seconds_ago">sekund temu</string>
@ -1462,7 +1460,7 @@ Niektóre z podstawowych funkcji:
<string name="osmo_user_left">Użytkownik %1$s opuścił grupę %2$s</string>
<string name="osmo_show_group_notifications">Wyświetlanie powiadomień grup</string>
<string name="osmo_show_group_notifications_descr">Wyświetla powiadomienia, gdy użytkownik dołącza do grupy lub opuszcza grupę</string>
<string name="gpx_file_is_empty">Plik GPX jest pusty</string>
<string name="gpx_file_is_empty">Ślad GPX jest pusty</string>
<string name="shared_string_my_tracks">Ślady</string>
<string name="shared_string_my_favorites">Ulubione</string>
@ -1545,8 +1543,8 @@ Niektóre z podstawowych funkcji:
<string name="live_monitoring_m">Śledzenie online (wymagane GPX)</string>
<string name="live_monitoring_start">Rozpocznij śledzenie online</string>
<string name="live_monitoring_stop">Zatrzymaj śledzenie online</string>
<string name="gpx_monitoring_start">Rozpocznij rejestrowanie GPX</string>
<string name="gpx_monitoring_stop">Zatrzymaj rejestrowanie GPX</string>
<string name="gpx_monitoring_start">Rozpocznij rejestrowanie śladu GPX</string>
<string name="gpx_monitoring_stop">Zatrzymaj rejestrowanie śladu GPX</string>
<string name="gpx_start_new_segment">Rozpocznij nowy segment</string>
<string name="rendering_attr_hideBuildings_name">Budynki</string>
<string name="rendering_attr_hideNonVehicleHighways_name">Trasy niedostępne dla aut</string>
@ -1610,9 +1608,9 @@ Niektóre z podstawowych funkcji:
<string name="save_track_interval_globally">Częstość rejestrowania</string>
<string name="record_plugin_description">Aktywuje funkcje rejestrowania i zapisywania śladów za pomocą widżetu rejestrowania śladów GPX na ekranie mapy lub automatyczne rejestruje przebiegi wszystkich tras do plików GPX.
\n
\nNagrane ślady można udostępnić znajomym lub wykorzystać na rzecz rozwoju mapy OpenStreetMap. Sportowcy mogą korzystać z nagranych śladów do monitorowania treningów. W tym celu OsmAnd udostępnia podstawowe informacje takie jak czasy okrążeń, średnia prędkość itp. Ślady mogą być później analizowane w specjalnych narzędziach do analizy przygotowanych przez innych dostawców.</string>
\nZarejestrowane ślady można udostępnić znajomym lub wykorzystać na rzecz rozwoju mapy OpenStreetMap. Sportowcy mogą korzystać ze śladów do monitorowania treningów. W tym celu OsmAnd udostępnia podstawowe informacje takie jak czasy okrążeń, średnia prędkość itp. Ślady mogą być później analizowane w specjalnych narzędziach do analizy przygotowanych przez innych dostawców oprogramowania.</string>
<string name="confirm_every_run">Ponawianie pytania</string>
<string name="save_global_track_interval_descr">Wybierz tempo rejestrowania dla nagrywania ścieżki (włączonego poprzez widżet rejestrowania GPX na mapie)</string>
<string name="save_global_track_interval_descr">Wybierz tempo rejestrowania śladu (włączonego poprzez widżet rejestrowania GPX na mapie)</string>
<string name="save_global_track_interval">Ogólna częstość rejestrowania</string>
<string name="traffic_warning_speed_limit">Ograniczenie prędkości</string>
<string name="traffic_warning_border_control">Kontrola graniczna</string>
@ -1957,7 +1955,7 @@ Długość %2$s</string>
<string name="poi_dialog_poi_type">Rodzaj użytecznego miejsca</string>
<string name="poi_action_delete">usuń</string>
<string name="building_number">Numer budynku</string>
<string name="av_locations_descr">Plik GPS z notatkami o położeniach</string>
<string name="av_locations_descr">Plik śladu GPX z notatkami o położeniach</string>
<string name="rendering_value_boldOutline_name">Pogrubione kontury</string>
<string name="download_live_updates">Aktualizowanie na bieżąco</string>
<string name="commit_poi">Wyślij użyteczne miejsce</string>
@ -2100,7 +2098,7 @@ Długość %2$s</string>
<string name="osn_reopen_dialog_title">Otwórz notatkę ponownie</string>
<string name="osn_close_dialog_title">Zamknij notatkę</string>
<string name="osn_add_dialog_success">Utworzono uwagę</string>
<string name="context_menu_item_delete_waypoint">Usunąć punkt GPX?</string>
<string name="context_menu_item_delete_waypoint">Usunąć punkt śladu GPX?</string>
<string name="shared_string_location">Położenie</string>
<string name="share_osm_edits_subject">Edycje OSM udostępnione przez OsmAnd</string>
<string name="lang_fy">Fryzyjski</string>
@ -2124,7 +2122,7 @@ Długość %2$s</string>
<string name="osn_close_dialog_error">Wystąpił błąd: nie zamknięto uwagi</string>
<string name="shared_string_commit">Zatwierdź</string>
<string name="context_menu_item_edit_waypoint">Edytuj punkt GPX</string>
<string name="context_menu_item_edit_waypoint">Edytuj punkt śladu GPX</string>
<string name="lang_nds">Dolno Saksoński</string>
<string name="lang_mk">Macedoński</string>
<string name="lang_als">Albański (Tosk)</string>
@ -2777,4 +2775,13 @@ Reprezentuje obszar: %1$s x %2$s</string>
<string name="quick_action_start_stop_navigation">Rozpocznij/zakończ nawigowanie</string>
<string name="quick_action_start_stop_navigation_descr">Rozpoczyna lub zatrzymuje rozpoczęte nawigowanie.</string>
<string name="quick_action_show_navigation_finish_dialog">Wyświetl ekran kończenia nawigowania</string>
<string name="release_2_7">• Wtyczka Mapillary z obrazami miejsc
\n
\n • Widżet linijki do mierzenia odległości
\n
\n • Interwały podziału śladu GPX ze szczegółowymi informacjami na temat śladu
\n
\n • Inne ulepszenia i naprawione błędy
\n
\n</string>
</resources>

View file

@ -2719,4 +2719,8 @@ Pro praghere iscrie su còdighe intreu</string>
<string name="live_monitoring_max_interval_to_send_desrc">Dislinda un\'intervallu de tempus pro mantènnere sas positziones de imbiare cando non b\'est connessione</string>
<string name="mappilary_no_internet_desc">Tenes bisòngiu de ìnternet pro bìdere sas fotografias de Mapillary</string>
<string name="retry">Torra a proare</string>
<string name="measurement_tool_action_bar">Issèbera una positzione in sa mapa e incarca Annanghe pro annànghere unu puntu a su righellu.</string>
<string name="measurement_tool">Aina de medidura</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Annanghe unu puntu de coladòrgiu gpx</string>
<string name="shared_string_create">Crea</string>
</resources>

View file

@ -2807,4 +2807,7 @@ OsmAnd (Automated Navigation Directions) 是一個地圖和導航的應用程式
<string name="mappilary_no_internet_desc">您需要網際網路才能從 Mapillary 檢視照片</string>
<string name="retry">重試</string>
<string name="measurement_tool">測量工具</string>
</resources>
<string name="measurement_tool_action_bar">在地圖上選擇一個位置,然後輕點增加以便增加一個標點到尺規。</string>
<string name="add_gpx_waypoint_bottom_sheet_title">增加 gpx 航點</string>
<string name="shared_string_create">建立</string>
</resources>

View file

@ -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
-->
<string name="measurement_tool_action_bar">Select a location on the map and click "Add" to add a point to the ruler.</string>
<string name="measurement_tool">Measurement tool</string>
<string name="quick_action_resume_pause_navigation">Resume/Pause Navigation</string>
<string name="quick_action_resume_pause_navigation_descr">Press this button to pause the navigation, or to resume it if it was already paused.</string>
@ -2659,4 +2660,6 @@
<string name="shared_string_action_name">Action name</string>
<string name="mappilary_no_internet_desc">You need internet to view photos from Mapillary</string>
<string name="retry">Retry</string>
<string name="add_gpx_waypoint_bottom_sheet_title">Add gpx waypoint</string>
<string name="shared_string_create">Create</string>
</resources>

View file

@ -102,6 +102,18 @@ public class GPXUtilities {
public float speed;
}
public static class NewGpxWaypoint {
private GPXFile gpx;
public NewGpxWaypoint(GPXFile gpx) {
this.gpx = gpx;
}
public GPXFile getGpx() {
return gpx;
}
}
public static class WptPt extends GPXExtensions implements LocationPoint {
public boolean firstPoint = false;
public boolean lastPoint = false;

View file

@ -57,6 +57,8 @@ import net.osmand.plus.AppInitializer;
import net.osmand.plus.AppInitializer.AppInitializeListener;
import net.osmand.plus.AppInitializer.InitEvents;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.NewGpxWaypoint;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.MapMarkersHelper.MapMarker;
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
@ -916,6 +918,9 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
} else if (toShow instanceof QuadRect) {
QuadRect qr = (QuadRect) toShow;
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);
} else if (toShow instanceof NewGpxWaypoint) {
NewGpxWaypoint newGpxWaypoint = (NewGpxWaypoint) toShow;
getMapLayers().getContextMenuLayer().enterAddGpxWaypointMode(newGpxWaypoint);
} else {
mapContextMenu.show(latLonToShow, mapLabelToShow, toShow);
}

View file

@ -884,7 +884,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
newMenuTopViewHeight = menuTopViewHeightExcludingTitle + titleHeight + titleButtonHeight + downloadButtonsHeight + titleProgressHeight;
dy = Math.max(0, newMenuTopViewHeight - menuTopViewHeight - (newMenuTopShadowAllHeight - menuTopShadowAllHeight));
} else {
menuTopViewHeightExcludingTitle = newMenuTopViewHeight - line1.getMeasuredHeight() - line2MeasuredHeight;
menuTopViewHeightExcludingTitle = newMenuTopViewHeight - line1.getMeasuredHeight() - line2MeasuredHeight - titleButtonHeight - downloadButtonsHeight - titleProgressHeight;
menuTitleTopBottomPadding = (line1.getMeasuredHeight() - line1.getLineCount() * line1.getLineHeight())
+ (line2MeasuredHeight - line2LineCount * line2LineHeight);
}
@ -1128,8 +1128,13 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
RotatedTileBox box = map.getCurrentRotatedTileBox().copy();
box.setCenterLocation(0.5f, map.getMapPosition() == OsmandSettings.BOTTOM_CONSTANT ? 0.15f : 0.5f);
box.setZoom(zoom);
int markerMapCenterX = (int) box.getPixXFromLatLon(mapCenter.getLatitude(), mapCenter.getLongitude());
int markerMapCenterY = (int) box.getPixYFromLatLon(mapCenter.getLatitude(), mapCenter.getLongitude());
boolean hasMapCenter = mapCenter != null;
int markerMapCenterX = 0;
int markerMapCenterY = 0;
if (hasMapCenter) {
markerMapCenterX = (int) box.getPixXFromLatLon(mapCenter.getLatitude(), mapCenter.getLongitude());
markerMapCenterY = (int) box.getPixYFromLatLon(mapCenter.getLatitude(), mapCenter.getLongitude());
}
float cpyOrig = box.getCenterPixelPoint().y;
box.setCenterLocation(0.5f, 0.5f);
@ -1146,7 +1151,7 @@ public class MapContextMenuFragment extends Fragment implements DownloadEvents {
float origMarkerY = this.origMarkerY + cpyDelta;
LatLon latlon;
if (center) {
if (center || !hasMapCenter) {
latlon = reqMarkerLocation;
} else {
latlon = box.getLatLonFromPixel(markerMapCenterX, markerMapCenterY);

View file

@ -5,20 +5,29 @@ import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import net.osmand.AndroidUtils;
import net.osmand.plus.IconsCache;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
import net.osmand.plus.widgets.IconPopupMenu;
public class MeasurementToolFragment extends Fragment {
public static final String TAG = "MeasurementToolFragment";
private MeasurementToolBarController toolBarController;
private TextView distanceTv;
private TextView pointsTv;
private String pointsSt;
@ -28,11 +37,12 @@ public class MeasurementToolFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
MapActivity mapActivity = (MapActivity) getActivity();
final MapActivity mapActivity = (MapActivity) getActivity();
final MeasurementToolLayer measurementLayer = mapActivity.getMapLayers().getMeasurementToolLayer();
IconsCache iconsCache = mapActivity.getMyApplication().getIconsCache();
final boolean nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightModeForMapControls();
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
pointsSt = mapActivity.getString(R.string.points).toLowerCase();
@ -46,23 +56,101 @@ public class MeasurementToolFragment extends Fragment {
((ImageView) mainView.findViewById(R.id.ruler_icon))
.setImageDrawable(iconsCache.getIcon(R.drawable.ic_action_ruler, R.color.color_myloc_distance));
((ImageView) mainView.findViewById(R.id.up_down_icon))
.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_arrow_up));
((ImageView) mainView.findViewById(R.id.previous_dot_icon))
.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_undo_dark));
((ImageView) mainView.findViewById(R.id.next_dot_icon))
.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_redo_dark));
final ImageButton upDownBtn = ((ImageButton) mainView.findViewById(R.id.up_down_button));
upDownBtn.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_arrow_up));
upDownBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(), "Up / Down", Toast.LENGTH_SHORT).show();
}
});
final ImageButton undoBtn = ((ImageButton) mainView.findViewById(R.id.undo_point_button));
final ImageButton redoBtn = ((ImageButton) mainView.findViewById(R.id.redo_point_button));
undoBtn.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_undo_dark));
undoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (measurementLayer.undoPointOnClick()) {
enable(undoBtn);
} else {
disable(undoBtn);
}
enable(redoBtn);
updateText();
}
});
redoBtn.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_action_redo_dark));
redoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (measurementLayer.redoPointOnClick()) {
enable(redoBtn);
} else {
disable(redoBtn);
}
enable(undoBtn);
updateText();
}
});
mainView.findViewById(R.id.add_point_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
measurementLayer.addPointOnClick();
enable(undoBtn);
disable(redoBtn);
updateText();
}
});
disable(undoBtn, redoBtn);
enterMeasurementMode();
if (portrait) {
toolBarController = new MeasurementToolBarController();
toolBarController.setTitle(mapActivity.getString(R.string.measurement_tool_action_bar));
toolBarController.setOnBackButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mapActivity.onBackPressed();
}
});
toolBarController.setOnCloseButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IconPopupMenu popup = new IconPopupMenu(mapActivity, mapActivity.findViewById(R.id.widget_top_bar_close_button));
popup.getMenuInflater().inflate(R.menu.measurement_tool_menu, popup.getMenu());
final Menu menu = popup.getMenu();
IconsCache ic = mapActivity.getMyApplication().getIconsCache();
menu.findItem(R.id.action_save_as_gpx).setIcon(ic.getThemedIcon(R.drawable.ic_action_polygom_dark));
menu.findItem(R.id.action_clear_all).setIcon(ic.getThemedIcon(R.drawable.ic_action_reset_to_default_dark));
popup.setOnMenuItemClickListener(new IconPopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_save_as_gpx:
Toast.makeText(mapActivity, "Save as gpx", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_clear_all:
measurementLayer.clearPoints();
disable(undoBtn, redoBtn);
updateText();
return true;
}
return false;
}
});
popup.show();
}
});
mapActivity.showTopToolbar(toolBarController);
}
return view;
}
@ -84,6 +172,20 @@ public class MeasurementToolFragment extends Fragment {
return null;
}
private void enable(View... views) {
for (View view : views) {
view.setEnabled(true);
view.setAlpha(1);
}
}
private void disable(View... views) {
for (View view : views) {
view.setEnabled(false);
view.setAlpha(.5f);
}
}
private void updateText() {
MeasurementToolLayer measurementLayer = getMeasurementLayer();
if (measurementLayer != null) {
@ -119,6 +221,9 @@ public class MeasurementToolFragment extends Fragment {
MapActivity mapActivity = getMapActivity();
MeasurementToolLayer measurementLayer = getMeasurementLayer();
if (mapActivity != null && measurementLayer != null) {
if (toolBarController != null) {
mapActivity.hideTopToolbar(toolBarController);
}
measurementLayer.setInMeasurementMode(false);
mapActivity.refreshMap();
mapActivity.enableDrawer();
@ -146,4 +251,26 @@ public class MeasurementToolFragment extends Fragment {
}
}
}
private static class MeasurementToolBarController extends TopToolbarController {
MeasurementToolBarController() {
super(MapInfoWidgetsFactory.TopToolbarControllerType.MEASUREMENT_TOOL);
setBackBtnIconClrIds(0, 0);
setCloseBtnIconClrIds(0, 0);
setTitleTextClrIds(R.color.primary_text_dark, R.color.primary_text_dark);
setDescrTextClrIds(R.color.primary_text_dark, R.color.primary_text_dark);
setBgIds(R.drawable.gradient_toolbar, R.drawable.gradient_toolbar,
R.drawable.gradient_toolbar, R.drawable.gradient_toolbar);
setCloseBtnIconIds(R.drawable.ic_overflow_menu_white, R.drawable.ic_overflow_menu_white);
setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
setSingleLineTitle(false);
}
@Override
public void updateToolbar(MapInfoWidgetsFactory.TopToolbarView view) {
super.updateToolbar(view);
view.getShadowView().setVisibility(View.GONE);
}
}
}

View file

@ -25,6 +25,7 @@ public class MeasurementToolLayer extends OsmandMapLayer {
private OsmandMapTileView view;
private boolean inMeasurementMode;
private LinkedList<WptPt> measurementPoints = new LinkedList<>();
private LinkedList<WptPt> cacheMeasurementPoints;
private Bitmap centerIconDay;
private Bitmap centerIconNight;
private Bitmap pointIcon;
@ -78,6 +79,8 @@ public class MeasurementToolLayer extends OsmandMapLayer {
void clearPoints() {
measurementPoints.clear();
cacheMeasurementPoints.clear();
view.refreshMap();
}
@Override
@ -133,10 +136,31 @@ public class MeasurementToolLayer extends OsmandMapLayer {
WptPt pt = new WptPt();
pt.lat = l.getLatitude();
pt.lon = l.getLongitude();
measurementPoints.add(pt);
if (measurementPoints.size() > 0) {
if (!measurementPoints.get(measurementPoints.size() - 1).equals(pt)) {
measurementPoints.add(pt);
}
} else {
measurementPoints.add(pt);
}
cacheMeasurementPoints = new LinkedList<>(measurementPoints);
view.refreshMap();
}
boolean undoPointOnClick() {
measurementPoints.remove(measurementPoints.size() - 1);
WptPt pt = measurementPoints.get(measurementPoints.size() - 1);
view.getAnimatedDraggingThread().startMoving(pt.getLatitude(), pt.getLongitude(), view.getZoom(), true);
return measurementPoints.size() > 0;
}
boolean redoPointOnClick() {
WptPt pt = cacheMeasurementPoints.get(measurementPoints.size());
measurementPoints.add(pt);
view.getAnimatedDraggingThread().startMoving(pt.getLatitude(), pt.getLongitude(), view.getZoom(), true);
return cacheMeasurementPoints.size() > measurementPoints.size();
}
@Override
public void destroyLayer() {

View file

@ -187,7 +187,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment {
allGpxAdapter.notifyDataSetChanged();
}
asyncProcessor = new ProcessGpxTask();
asyncProcessor.execute();
asyncProcessor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
updateCurrentTrack();

View file

@ -8,6 +8,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.view.ActionMode;
@ -29,13 +30,16 @@ import android.widget.ListView;
import android.widget.TextView;
import net.osmand.AndroidUtils;
import net.osmand.Location;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.GPXDatabase.GpxDataItem;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.WptPt;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.NewGpxWaypoint;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
@ -89,6 +93,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment {
private Set<Integer> selectedGroups = new LinkedHashSet<>();
private ActionMode actionMode;
private SearchView searchView;
private FloatingActionButton fab;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@ -106,10 +111,30 @@ public class TrackPointFragment extends OsmandExpandableListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.favorites_tree, container, false);
View view = inflater.inflate(R.layout.points_tree, container, false);
ExpandableListView listView = (ExpandableListView) view.findViewById(android.R.id.list);
setHasOptionsMenu(true);
fab = (FloatingActionButton) view.findViewById(R.id.fabButton);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final OsmandSettings settings = app.getSettings();
GPXFile gpx = getGpx();
Location location = app.getLocationProvider().getLastKnownLocation();
if (location != null) {
settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(),
settings.getLastKnownMapZoom(),
new PointDescription(PointDescription.POINT_TYPE_WPT, getString(R.string.context_menu_item_add_waypoint)),
false,
new NewGpxWaypoint(gpx));
MapActivity.launchMapActivityMoveToTop(getActivity());
}
}
});
TextView tv = new TextView(getActivity());
tv.setText(R.string.none_selected_gpx);
tv.setTextSize(24);

View file

@ -0,0 +1,102 @@
package net.osmand.plus.views;
import android.content.Context;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.GPXUtilities.NewGpxWaypoint;
import net.osmand.plus.IconsCache;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
public class AddWaypointBottomSheetHelper {
private final View view;
private final TextView title;
private String titleText = "";
private final TextView description;
private final Context context;
private final MapContextMenu contextMenu;
private final ContextMenuLayer contextMenuLayer;
private boolean applyingPositionMode;
private NewGpxWaypoint newGpxWaypoint;
public AddWaypointBottomSheetHelper(final MapActivity activity, ContextMenuLayer ctxMenuLayer) {
this.contextMenuLayer = ctxMenuLayer;
view = activity.findViewById(R.id.add_gpx_waypoint_bottom_sheet);
title = (TextView) view.findViewById(R.id.add_gpx_waypoint_bottom_sheet_title);
description = (TextView) view.findViewById(R.id.description);
context = activity;
contextMenu = activity.getContextMenu();
ImageView icon = (ImageView) view.findViewById(R.id.icon);
IconsCache iconsCache = activity.getMyApplication().getIconsCache();
icon.setImageDrawable(iconsCache.getIcon(R.drawable.ic_action_photo_dark, R.color.marker_green));
view.findViewById(R.id.create_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
contextMenuLayer.createGpxWaypoint();
GPXFile gpx = newGpxWaypoint.getGpx();
LatLon latLon = contextMenu.getLatLon();
activity.getContextMenu().getWptPtPointEditor().add(gpx, latLon, titleText);
}
});
view.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hide();
contextMenuLayer.cancelAddGpxWaypoint();
}
});
}
public void onDraw(RotatedTileBox rt) {
PointF point = contextMenuLayer.getMovableCenterPoint(rt);
double lat = rt.getLatFromPixel(point.x, point.y);
double lon = rt.getLonFromPixel(point.x, point.y);
description.setText(PointDescription.getLocationName(context, lat, lon, true));
}
public void setTitle(String title) {
titleText = title;
this.title.setText(titleText);
}
public boolean isVisible() {
return view.getVisibility() == View.VISIBLE;
}
public void show(Drawable drawable, NewGpxWaypoint newGpxWaypoint) {
this.newGpxWaypoint = newGpxWaypoint;
exitApplyPositionMode();
view.setVisibility(View.VISIBLE);
((ImageView) view.findViewById(R.id.icon)).setImageDrawable(drawable);
}
public void hide() {
exitApplyPositionMode();
view.setVisibility(View.GONE);
}
public void enterApplyPositionMode() {
if (!applyingPositionMode) {
applyingPositionMode = true;
view.findViewById(R.id.create_button).setEnabled(false);
}
}
public void exitApplyPositionMode() {
if (applyingPositionMode) {
applyingPositionMode = false;
view.findViewById(R.id.create_button).setEnabled(true);
}
}
}

View file

@ -35,6 +35,7 @@ import net.osmand.osm.PoiFilter;
import net.osmand.osm.PoiType;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.GPXUtilities.NewGpxWaypoint;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
@ -75,12 +76,14 @@ public class ContextMenuLayer extends OsmandMapLayer {
private GestureDetector movementListener;
private final MoveMarkerBottomSheetHelper mMoveMarkerBottomSheetHelper;
private final AddWaypointBottomSheetHelper mAddWaypointBottomSheetHelper;
private boolean mInChangeMarkerPositionMode;
private IContextMenuProvider selectedObjectContextMenuProvider;
private boolean cancelApplyingNewMarkerPosition;
private LatLon applyingMarkerLatLon;
private boolean wasCollapseButtonVisible;
private boolean mInGpxDetailsMode;
private boolean mInAddGpxWaypointMode;
private List<String> publicTransportTypes;
private Object selectedObject;
@ -91,6 +94,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
multiSelectionMenu = menu.getMultiSelectionMenu();
movementListener = new GestureDetector(activity, new MenuLayerOnGestureListener());
mMoveMarkerBottomSheetHelper = new MoveMarkerBottomSheetHelper(activity, this);
mAddWaypointBottomSheetHelper = new AddWaypointBottomSheetHelper(activity, this);
}
@Override
@ -194,7 +198,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
canvas.drawBitmap(pressedBitmap, x - pressedBitmap.getWidth() / 2, y - pressedBitmap.getHeight() / 2, paint);
}
if (mapQuickActionLayer!= null && mapQuickActionLayer.isInChangeMarkerPositionMode())
if (mapQuickActionLayer!= null && mapQuickActionLayer.isInMovingMarkerMode())
return;
if (mInChangeMarkerPositionMode) {
@ -203,6 +207,10 @@ public class ContextMenuLayer extends OsmandMapLayer {
contextMarker.draw(canvas);
}
mMoveMarkerBottomSheetHelper.onDraw(box);
} else if (mInAddGpxWaypointMode) {
canvas.translate(box.getPixWidth() / 2 - contextMarker.getWidth() / 2, box.getPixHeight() / 2 - contextMarker.getHeight());
contextMarker.draw(canvas);
mAddWaypointBottomSheetHelper.onDraw(box);
} else if (menu.isActive()) {
LatLon latLon = menu.getLatLon();
int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
@ -281,7 +289,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
}
public Object getMoveableObject() {
return mInChangeMarkerPositionMode ? menu.getObject() : null;
return mInChangeMarkerPositionMode || mInAddGpxWaypointMode ? menu.getObject() : null;
}
public boolean isInChangeMarkerPositionMode() {
@ -292,6 +300,10 @@ public class ContextMenuLayer extends OsmandMapLayer {
return mInGpxDetailsMode;
}
public boolean isInAddGpxWaypointMode() {
return mInAddGpxWaypointMode;
}
public boolean isObjectMoveable(Object o) {
if (o == null) {
return true;
@ -313,7 +325,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
l.applyNewObjectPosition(o, position, callback);
}
}
} else if (mInChangeMarkerPositionMode) {
} else if (mInChangeMarkerPositionMode || mInAddGpxWaypointMode) {
callback.onApplyMovedObject(true, null);
}
}
@ -357,6 +369,45 @@ public class ContextMenuLayer extends OsmandMapLayer {
});
}
public void createGpxWaypoint() {
if (!mInAddGpxWaypointMode) {
throw new IllegalStateException("Not in add gpx waypoint mode");
}
RotatedTileBox tileBox = activity.getMapView().getCurrentRotatedTileBox();
PointF newMarkerPosition = getMovableCenterPoint(tileBox);
final LatLon ll = tileBox.getLatLonFromPixel(newMarkerPosition.x, newMarkerPosition.y);
applyingMarkerLatLon = ll;
Object obj = getMoveableObject();
cancelApplyingNewMarkerPosition = false;
mAddWaypointBottomSheetHelper.enterApplyPositionMode();
applyMovedObject(obj, ll, new ApplyMovedObjectCallback() {
@Override
public void onApplyMovedObject(boolean success, @Nullable Object newObject) {
mAddWaypointBottomSheetHelper.exitApplyPositionMode();
if (success && !cancelApplyingNewMarkerPosition) {
mAddWaypointBottomSheetHelper.hide();
quitAddGpxWaipoint();
PointDescription pointDescription = null;
if (selectedObjectContextMenuProvider != null) {
pointDescription = selectedObjectContextMenuProvider.getObjectName(newObject);
}
menu.show(ll, pointDescription, newObject);
view.refreshMap();
}
selectedObjectContextMenuProvider = null;
applyingMarkerLatLon = null;
}
@Override
public boolean isCancelled() {
return cancelApplyingNewMarkerPosition;
}
});
}
public void enterGpxDetailsMode() {
menu.updateMapCenter(null);
menu.hide();
@ -398,6 +449,39 @@ public class ContextMenuLayer extends OsmandMapLayer {
}
}
private void quitAddGpxWaipoint() {
mInAddGpxWaypointMode = false;
mark(View.VISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
if (collapseButton != null && wasCollapseButtonVisible) {
collapseButton.setVisibility(View.VISIBLE);
}
}
public void enterAddGpxWaypointMode(NewGpxWaypoint newGpxWaypoint) {
menu.updateMapCenter(null);
menu.hide();
activity.disableDrawer();
mInAddGpxWaypointMode = true;
mAddWaypointBottomSheetHelper.show(menu.getLeftIcon(), newGpxWaypoint);
mark(View.INVISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
View collapseButton = activity.findViewById(R.id.map_collapse_button);
if (collapseButton != null && collapseButton.getVisibility() == View.VISIBLE) {
wasCollapseButtonVisible = true;
collapseButton.setVisibility(View.INVISIBLE);
} else {
wasCollapseButtonVisible = false;
}
view.refreshMap();
}
private void enterMovingMode(RotatedTileBox tileBox) {
Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(VIBRATE_SHORT);
@ -445,6 +529,13 @@ public class ContextMenuLayer extends OsmandMapLayer {
applyingMarkerLatLon = null;
}
public void cancelAddGpxWaypoint() {
cancelApplyingNewMarkerPosition = true;
quitAddGpxWaipoint();
activity.getContextMenu().show();
applyingMarkerLatLon = null;
}
public boolean showContextMenu(double latitude, double longitude, boolean showUnknownLocation) {
RotatedTileBox cp = activity.getMapView().getCurrentRotatedTileBox();
float x = cp.getPixXFromLatLon(latitude, longitude);
@ -550,7 +641,14 @@ public class ContextMenuLayer extends OsmandMapLayer {
if (latLon == null) {
latLon = getLatLon(point, tileBox);
}
showContextMenu(latLon, pointDescription, selectedObj, provider);
if (mInAddGpxWaypointMode) {
if (pointDescription != null) {
mAddWaypointBottomSheetHelper.setTitle(pointDescription.getName());
}
view.getAnimatedDraggingThread().startMoving(latLon.getLatitude(), latLon.getLongitude(), view.getZoom(), true);
} else {
showContextMenu(latLon, pointDescription, selectedObj, provider);
}
return true;
} else if (selectedObjects.size() > 1) {
@ -592,7 +690,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
}
public boolean disableLongPressOnMap() {
if (mInChangeMarkerPositionMode || mInGpxDetailsMode) {
if (mInChangeMarkerPositionMode || mInGpxDetailsMode || mInAddGpxWaypointMode) {
return true;
}
boolean res = false;

View file

@ -712,7 +712,7 @@ public class MapControlsLayer extends OsmandMapLayer {
((app.accessibilityEnabled() || (System.currentTimeMillis() - touchEvent < TIMEOUT_TO_SHOW_BUTTONS)) && routeFollowingMode);
updateMyLocation(rh, routeDialogOpened || trackDialogOpened);
boolean showButtons = (showRouteCalculationControls || !routeFollowingMode)
&& !isInChangeMarkerPositionMode() && !isInGpxDetailsMode() && !isInMeasurementToolMode();
&& !isInMovingMarkerMode() && !isInGpxDetailsMode() && !isInMeasurementToolMode();
//routePlanningBtn.setIconResId(routeFollowingMode ? R.drawable.ic_action_gabout_dark : R.drawable.map_directions);
if (rh.isFollowingMode()) {
routePlanningBtn.setIconResId(R.drawable.map_start_navigation);
@ -1119,9 +1119,9 @@ public class MapControlsLayer extends OsmandMapLayer {
this.mapQuickActionLayer = mapQuickActionLayer;
}
private boolean isInChangeMarkerPositionMode(){
return mapQuickActionLayer == null ? contextMenuLayer.isInChangeMarkerPositionMode() :
mapQuickActionLayer.isInChangeMarkerPositionMode() || contextMenuLayer.isInChangeMarkerPositionMode();
private boolean isInMovingMarkerMode(){
return mapQuickActionLayer == null ? contextMenuLayer.isInChangeMarkerPositionMode() || contextMenuLayer.isInAddGpxWaypointMode():
mapQuickActionLayer.isInMovingMarkerMode() || contextMenuLayer.isInChangeMarkerPositionMode() || contextMenuLayer.isInAddGpxWaypointMode();
}
private boolean isInGpxDetailsMode() {

View file

@ -54,7 +54,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
private boolean wasCollapseButtonVisible;
private int previousMapPosition;
private boolean inChangeMarkerPositionMode;
private boolean inMovingMarkerMode;
private boolean isLayerOn;
private boolean nightMode;
@ -236,7 +236,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
double lon = rb.getLonFromPixel(tileBox.getCenterPixelX(), tileBox.getCenterPixelY());
view.setLatLon(lat, lon);
inChangeMarkerPositionMode = true;
inMovingMarkerMode = true;
mark(View.INVISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
@ -271,7 +271,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
}
view.setMapPosition(previousMapPosition);
inChangeMarkerPositionMode = false;
inMovingMarkerMode = false;
mark(View.VISIBLE, R.id.map_ruler_layout,
R.id.map_left_widgets_panel, R.id.map_right_widgets_panel, R.id.map_center_info);
@ -293,7 +293,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
@Override
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
if (isInChangeMarkerPositionMode() && !pressedQuickActionWidget(point.x, point.y)) {
if (isInMovingMarkerMode() && !pressedQuickActionWidget(point.x, point.y)) {
setLayerState(false);
return true;
} else
@ -307,7 +307,7 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
@Override
public void onDraw(Canvas canvas, RotatedTileBox box, DrawSettings settings) {
boolean nightMode = settings != null && settings.isNightMode();
if (isInChangeMarkerPositionMode()) {
if (isInMovingMarkerMode()) {
canvas.translate(box.getCenterPixelX() - contextMarker.getWidth() / 2, box.getCenterPixelY() - contextMarker.getHeight());
contextMarker.draw(canvas);
}
@ -356,8 +356,8 @@ public class MapQuickActionLayer extends OsmandMapLayer implements QuickActionRe
return new PointF(tb.getPixWidth() / 2, tb.getPixHeight() / 2);
}
public boolean isInChangeMarkerPositionMode() {
return isLayerOn && inChangeMarkerPositionMode;
public boolean isInMovingMarkerMode() {
return isLayerOn && inMovingMarkerMode;
}
public boolean isLayerOn() {

View file

@ -46,6 +46,7 @@ public class MapInfoWidgetsFactory {
CONTEXT_MENU,
TRACK_DETAILS,
DISCOUNT,
MEASUREMENT_TOOL
}
public TextInfoWidget createAltitudeControl(final MapActivity map) {