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

This commit is contained in:
Victor Shcherb 2016-03-05 21:35:27 +01:00
commit 03a23b0243
38 changed files with 832 additions and 228 deletions

View file

@ -358,6 +358,7 @@ dependencies {
compile project(path: ':OsmAnd-java', configuration: 'android')
compile project(':eclipse-compile:design')
compile project(':eclipse-compile:cardview')
compile project(':eclipse-compile:gridlayout')
// compile project(":eclipse-compile:recyclerview")
compile fileTree(include: ['*.jar'], exclude: ['QtAndroid-bundled.jar', 'QtAndroidAccessibility-bundled.jar', 'OsmAndCore_android.jar', 'OsmAndCore_wrapper.jar', 'android-support-multidex.jar'], dir: 'libs')
// compile "com.github.ksoichiro:android-observablescrollview:1.5.0"

View file

@ -15,3 +15,4 @@ dex.force.jumbo=true
android.library.reference.1=../eclipse-compile/appcompat
android.library.reference.2=../eclipse-compile/design
android.library.reference.3=../eclipse-compile/cardview
android.library.reference.4=../eclipse-compile/gridlayout

View file

@ -34,6 +34,7 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:textColor="@color/color_white"
android:textSize="12sp"
@ -44,7 +45,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:textColor="@color/color_white"

View file

@ -14,100 +14,141 @@
<include layout="@layout/card_top_divider"/>
<GridLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/bg_color"
android:columnCount="2">
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_columnSpan="2"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:gravity="center_vertical"
android:minHeight="48dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="@string/select_month_and_country"
android:textColor="?android:textColorPrimary"/>
<net.osmand.plus.widgets.ButtonEx
android:id="@+id/show_all"
style="@style/DashboardGeneralButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:text="@string/shared_string_all"
android:textColor="?attr/contextMenuButtonColor"
osmand:textAllCapsCompat="true"
osmand:typeface="@string/font_roboto_medium"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_columnSpan="2"
android:background="?attr/dashboard_divider"/>
<ImageView
android:id="@+id/calendarImageView"
android:layout_width="56dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@drawable/ic_action_data"/>
<LinearLayout
android:id="@+id/monthButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="60dp"
android:clickable="true"
android:orientation="horizontal">
<Spinner
android:id="@+id/montReportsSpinner"
android:layout_gravity="fill_horizontal|fill_vertical"
android:layout_marginRight="56dp"
android:gravity="center_vertical"/>
<ImageView
android:id="@+id/calendarImageView"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="center"
android:src="@drawable/ic_action_data"/>
<Spinner
android:id="@+id/monthReportsSpinner"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="-8dp"
android:layout_marginRight="16dp"
android:clickable="false"
android:background="@null"/>
<ImageView
android:id="@+id/monthDropDownIcon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="16dp"
android:src="@drawable/ic_action_arrow_drop_down"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_column="1"
android:layout_marginLeft="56dp"
android:background="?attr/dashboard_divider"/>
<ImageView
android:id="@+id/regionIconImageView"
android:layout_width="56dp"
android:layout_height="56dp"
android:paddingTop="4dp"
android:scaleType="center"
android:src="@drawable/ic_world_globe_dark"/>
<LinearLayout
android:id="@+id/reportsButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
android:gravity="center"
android:orientation="vertical"
android:paddingTop="4dp">
android:background="?attr/selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="60dp"
android:clickable="true"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/reports_for"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<ImageView
android:id="@+id/regionIconImageView"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="center"
android:src="@drawable/ic_world_globe_dark"/>
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:textColor="?android:textColorPrimary"
tools:text="Worldwide"/>
android:layout_weight="1"
android:layout_marginRight="16dp"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/reports_for"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
tools:text="Worldwide"/>
</LinearLayout>
<ImageView
android:id="@+id/countryDropDownIcon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="16dp"
android:src="@drawable/ic_action_arrow_drop_down"/>
</LinearLayout>
<View
android:id="@+id/divider_to_hide"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_columnSpan="2"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:background="?attr/dashboard_divider"/>
<ProgressBar
@ -115,146 +156,189 @@
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="9dp"
android:layout_columnSpan="2"
android:indeterminate="true"/>
<ImageView
android:id="@+id/numberOfContributorsIcon"
android:layout_width="56dp"
android:layout_height="56dp"
android:paddingBottom="4dp"
android:scaleType="center"
android:src="@drawable/ic_group"/>
<LinearLayout
android:id="@+id/numberOfContributorsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="4dp">
android:gravity="center_vertical"
android:minHeight="60dp"
android:background="?attr/selectableItemBackground"
android:orientation="horizontal">
<TextView
android:id="@+id/numberOfContributorsTitle"
<ImageView
android:id="@+id/numberOfContributorsIcon"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="center"
android:src="@drawable/ic_group"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_contributors"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
android:layout_marginRight="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/numberOfContributorsTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_contributors"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<TextView
android:id="@+id/contributorsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:textSize="@dimen/default_list_text_size"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
<TextView
android:id="@+id/contributorsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_column="1"
android:layout_marginLeft="56dp"
android:background="?attr/dashboard_divider"/>
<ImageView
android:id="@+id/numberOfEditsIcon"
android:layout_width="56dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@drawable/ic_world_globe_dark"/>
<LinearLayout
android:id="@+id/numberOfEditsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
android:gravity="center"
android:orientation="vertical">
android:gravity="center_vertical"
android:minHeight="60dp"
android:background="?attr/selectableItemBackground"
android:orientation="horizontal">
<TextView
android:id="@+id/numberOfEditsTitle"
<ImageView
android:id="@+id/numberOfEditsIcon"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="center"
android:src="@drawable/ic_map"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_edits"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
android:layout_marginRight="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/editsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
<TextView
android:id="@+id/numberOfEditsTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_edits"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<ImageView
android:id="@+id/donationsIcon"
android:layout_width="56dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@drawable/ic_action_message"/>
<TextView
android:id="@+id/editsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:textSize="@dimen/default_list_text_size"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
<LinearLayout
android:id="@+id/donationsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/donationsTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/donations"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<TextView
android:id="@+id/donationsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="-"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_column="1"
android:layout_marginLeft="56dp"
android:background="?attr/dashboard_divider"/>
<ImageView
android:id="@+id/numberOfRecipientsIcon"
android:layout_width="56dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@drawable/ic_group"/>
<LinearLayout
android:id="@+id/numberOfRecipientsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
android:gravity="center"
android:orientation="vertical">
android:gravity="center_vertical"
android:minHeight="60dp"
android:orientation="horizontal">
<TextView
android:id="@+id/numberOfRecipientsTitle"
<ImageView
android:id="@+id/donationsIcon"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="center"
android:src="@drawable/ic_action_bitcoin"/>
<LinearLayout
android:id="@+id/donationsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_recipients"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
android:layout_marginRight="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/donationsTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/donations"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<TextView
android:id="@+id/donationsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="-"
android:textSize="@dimen/default_list_text_size"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
<TextView
android:id="@+id/recipientsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="-"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
</GridLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="56dp"
android:background="?attr/dashboard_divider"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="60dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/numberOfRecipientsIcon"
android:layout_width="56dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@drawable/ic_group"/>
<LinearLayout
android:id="@+id/numberOfRecipientsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/numberOfRecipientsTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/number_of_recipients"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_sub_text_size"/>
<TextView
android:id="@+id/recipientsTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="-"
android:textSize="@dimen/default_list_text_size"
android:textColor="?android:textColorPrimary"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<include layout="@layout/card_bottom_divider"/>

View file

@ -30,12 +30,6 @@
app:typeface="@string/font_roboto_regular"/>
</LinearLayout>
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/progress"
android:indeterminate="true"/>
<FrameLayout
android:layout_width="match_parent"
@ -51,6 +45,13 @@
<include layout="@layout/card_bottom_divider"/>
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="9dp"
android:id="@+id/progress"
android:indeterminate="true"/>
</FrameLayout>
</LinearLayout>

View file

@ -138,14 +138,14 @@
<string name="local_indexes_cat_srtm">Ізалініі вышынь</string>
<string name="local_indexes_cat_av">Аўдыё/відэа зьвесткі</string>
<string name="stop_routing_confirm">Сапраўды спыніць навігацыю?</string>
<string name="clear_dest_confirm">Сапраўды сьцерці месца прызначэньня (і правежкавыя пункты прызначэньня)?</string>
<string name="clear_dest_confirm">Сапраўды сьцерці месца прызначэньня (і прамежкавыя пункты прызначэньня)?</string>
<string name="precise_routing_mode_descr">Дазволіць дакладную навігацыю каб шукаць шлях без памылак. Усё яшчэ абмежавана адлегласцю і павольная.</string>
<string name="precise_routing_mode">Дакладны маршрут (эксп.)</string>
<string name="recording_context_menu_show">Паказаць</string>
<string name="recording_photo_description">Фота %1$s %2$s</string>
<string name="av_def_action_picture">Сфатаграфаваць</string>
<string name="recording_context_menu_precord">Сфатаграфаваць</string>
<string name="dropbox_plugin_description">Модуль Dropbox дазваляе сынхранізаваць трэкі і аўдыё/відэа натакi з вашым рахункам Dropbox.</string>
<string name="dropbox_plugin_description">Модуль Dropbox дазваляе вам сынхранізаваць трэкі і аўдыё/відэа натакi з вашым рахункам Dropbox.</string>
<string name="dropbox_plugin_name">Модуль Dropbox</string>
<string name="intermediate_points_change_order">Зьмяніць парадак</string>
@ -214,7 +214,7 @@
<string name="background_service_is_enabled_question">Фонавы рэжым OsmAnd па-ранейшаму працуе. Хочаце спыніць яго?</string>
<string name="close_changeset">Зачыніць мноства зьмен</string>
<string name="zxing_barcode_scanner_not_found">Праграма ZXing Barcode Scanner не ўстаноўлена. Шукаць у Market?</string>
<string name="zxing_barcode_scanner_not_found">Праграма ZXing Barcode Scanner не ўстаноўлена. Шукаць у Google Play?</string>
<string name="rendering_attr_roadColors_description">Выберыце схему колераў дарог:</string>
<string name="rendering_attr_roadColors_name">Схема колераў дарог</string>
<string name="map_widget_show_destination_arrow">Паказваць напрамак да месца прызначэньня</string>
@ -560,7 +560,7 @@
<string name="download_files_not_enough_space">Няма вольнага месца каб сьцягнуць %1$s МБ (вольна: %2$s).</string>
<string name="download_files_question_space">Вольнага месца зараз {2} МБ! Сьцягнуць {0} файл(аў) ({1} МБ)?</string>
<string name="download_files_question_space">Сьцягнуць {0} файл(аў) (патрабуе {1} МБ)? Зараз ё {2} МБ вольнага месца.</string>
@ -1223,7 +1223,7 @@
<string name="index_item_world_altitude_correction">Глябальная карэкцыя вышыні</string>
<string name="index_item_world_seamarks">Навігацыйныя знакі ўсяго сьвету</string>
<string name="index_item_world_bitcoin_payments">Bitcoin плацяжы ўсяго сьвету</string>
<string name="keep_and_add_destination_point">Дадаць пунктам прызначэньня</string>
<string name="keep_and_add_destination_point">Дадаць апошнім пунктам прызначэньня</string>
<string name="route_descr_select_destination">Выбраць месца прызначэньня</string>
<string name="route_preferences">Настройкі маршрута</string>
<string name="calculate_osmand_route_gpx">Разьлічыць пазасеціўны маршрут OsmAnd</string>
@ -1324,7 +1324,7 @@
<string name="osmo_activity">Маніторынг OpenStreetMap</string>
<string name="osmo_enable_tracker">Адсылаць маё месцазнаходжаньне</string>
<string name="import_file_favourites">Захаваць кропкі як GPX файл або імпартаваць у абранае?</string>
<string name="import_file_favourites">Захаваць зьвесткі як GPX файл або імпартаваць кропкі ў абранае?</string>
<string name="osmo_track_interval">Інтэрвал адсылкі дадзеных</string>
<string name="osmo_expire_group">Тэрмін дзеяньня скончыцца праз</string>
@ -2120,7 +2120,37 @@
<string name="item_removed">Элемэнт выдалены</string>
<string name="n_items_removed">Элемэнты выдалены</string>
<string name="reports_for">Паведаміць</string>
<string name="osmand_plus_extended_description_4000_chars_v2">" Мапы й навігацыя OsmAnd - пракладайце маршруты і шукайце мясьціны на мапе без падлучэньня да Інтэрнэту. Сьцягвайце мапу краіны, перш чым адправіцца ў падарожжа, каб адшукаць мясьціны й маршруты ў незнаёмай мясцовасьці. Асноўныя магчымасьці: • Падрабязныя мапы 200 краін • Offline навігатар з галасавымі падказкамі • Адрасны пошук у аўтаномным рэжыме • Інфармацыя пра мясьціны на мапе: славутасьці, кафэ, аўтастаянкі, крамы • Даданьне мясьцін ў абранае • Аўта, роварная і пешаходная навігацыйныя • Дадатковыя опцыі: • Магчымасьць прагляду і запісу GPX сьлядоў • Апісаньне зь Вікіпедыі аб POI • Даданне фота, аўдыё і відэа нататак на мапу • Дзённы і начны рэжымы мапы для больш зручнага кіраваньня • Інфармацыя аб маршрутах грамадзкага транспарту і прыпынках • Роварныя і пешаходныя дарожкі • Пешаходныя маршруты для турызму па ўсім сьвеце • Інтэрнэт мапы са шматлікіх крыніц • Інфармацыя аб якасьці дарожнага пакрыцьця і асьвятленьні вуліц • Даданне, рэдагаванне і выдаленне POI (для карыстальнікаў OpenStreetMap.org) • OsMo - маніторынг у рэальным часе іншых прыстасаваньняў • Надзейны навігатар ў вашай краіне - няхай гэта будзе Францыя, Германія, Мэксіка, Вялікабрытанія, Гішпанія, Нідэрлянды, ЗША, РФ, Бразілія або любая іншая дзяржава. • Ізалініі вышынь і рэльеф мясцовасьці https://goo.gl/7mojP8 • Ізалініі вышынь і рэльеф мясцовасьці дадаецца да асноўнай мапы OsmAnd. • Лыжныя мапы https://goo.gl/pX6DxJ Інфармацыя аб гарналыжных трасах, трасах для бегавых лыж, фунікулёры і пад\'ёмнікі. • Марскія мапы https://goo.gl/0hEdxm Спецыяльны стыль мапы для прагляду марскіх навігацыйных знакаў для артэрыяльнай і прыбярэжнай марской навігацыі. • Месца паркоўкі https://goo.gl/6JxQXF Дапамагае адзначыць месцазнаходжаньне вашага аўтамабіля, прыпаркаванага і паглядзець, колькі часу засталося, калі паркоўка абмежаваная па часе. Сачыце за абнаўленнямі! Twitter: https://twitter.com/osmandapp Facebook: https://www.facebook.com/osmandapp Сайт: http://osmand.net Калі вам патрэбна дапамога з ужываннем OsmAnd, звярніцеся ў нашу службу падтрымкі: support@osmand.net. "</string>
<string name="osmand_plus_extended_description_4000_chars_v2">" Мапы й навігацыя OsmAnd - шукайце мясьціны і пракладайце маршруты на мапе без падлучэньня да Інтэрнэту. Сьцягвайце мапу краіны, перш чым адправіцца ў падарожжа, каб адшукаць мясьціны й маршруты ў незнаёмай мясцовасьці. Асноўныя магчымасьці: • Падрабязныя мапы 200 краін • Offline навігатар з галасавымі падказкамі • Адрасны пошук у аўтаномным рэжыме • Інфармацыя пра мясьціны на мапе: славутасьці, кафэ, аўтастаянкі, крамы • Даданьне мясьцін ў абранае • Аўта, роварная і пешаходная навігацыйныя • Дадатковыя опцыі: • Магчымасьць прагляду і запісу GPX сьлядоў • Апісаньне зь Вікіпедыі аб POI • Даданне фота, аўдыё і відэа нататак на мапу • Дзённы і начны рэжымы мапы для больш зручнага кіраваньня • Інфармацыя аб маршрутах грамадзкага транспарту і прыпынках • Роварныя і пешаходныя дарожкі • Пешаходныя маршруты для турызму па ўсім сьвеце • Інтэрнэт мапы са шматлікіх крыніц • Інфармацыя аб якасьці дарожнага пакрыцьця і асьвятленьні вуліц • Даданне, рэдагаванне і выдаленне POI (для карыстальнікаў OpenStreetMap.org) • OsMo - маніторынг у рэальным часе іншых прыстасаваньняў • Надзейны навігатар ў вашай краіне - няхай гэта будзе Францыя, Германія, Мэксіка, Вялікабрытанія, Гішпанія, Нідэрлянды, ЗША, РФ, Бразілія або любая іншая дзяржава. • Ізалініі вышынь і рэльеф мясцовасьці https://goo.gl/7mojP8 • Ізалініі вышынь і рэльеф мясцовасьці дадаецца да асноўнай мапы OsmAnd. • Лыжныя мапы https://goo.gl/pX6DxJ Інфармацыя аб гарналыжных трасах, трасах для бегавых лыж, фунікулёры і пад\'ёмнікі. • Марскія мапы https://goo.gl/0hEdxm Спецыяльны стыль мапы для прагляду марскіх навігацыйных знакаў для артэрыяльнай і прыбярэжнай марской навігацыі. • Месца паркоўкі https://goo.gl/6JxQXF Дапамагае адзначыць месцазнаходжаньне вашага аўтамабіля, прыпаркаванага і паглядзець, колькі часу засталося, калі паркоўка абмежаваная па часе. Сачыце за абнаўленнямі! Twitter: https://twitter.com/osmandapp Facebook: https://www.facebook.com/osmandapp Сайт: http://osmand.net Калі вам патрэбна дапамога з ужываннем OsmAnd, звярніцеся ў нашу службу падтрымкі: support@osmand.net. "</string>
<string name="rendering_attr_showMtbRoutes_name">Адлюстроўваць MTB маршруты</string>
<string name="donations">Ахвяраваньні</string>
<string name="storage_directory_shared">Сумесная памяць</string>
<string name="recalculate_route">Пералічыць маршрут</string>
<string name="number_of_recipients">Колькасьць атрымальнікаў</string>
<string name="osm_live_subscribe_btn">Падпісацца</string>
<string name="osm_live_hide_user_name">Не паказваць маё імя ў справаздачах</string>
<string name="osm_live_month_cost">Кошт на месяц</string>
<string name="osm_live_month_cost_desc">Штомесячны плацёж</string>
<string name="osm_live_enter_email">Калі ласка, увядзіце сапраўдны адрас электроннай пошты</string>
<string name="osm_live_subscription_settings">Парамэтры падпіскі</string>
<string name="osm_live_ask_for_purchase">Калі ласка, спачатку набудзьце падпіску OSM Live</string>
<string name="osm_live_header">Гэтая падпіска дазваляе атрымліваць штогадзіннае абнаўленьне для ўсіх мапаў сьвету. Асноўная частка даходаў перадаецца ў OSM супольнасць і выплачваецца за кожны ўнёсак у OSM. У выпадку, калі вы любіце OsmAnd і OSM і хочаце падтрымаць яго, гэта ідэальны спосаб зрабіць гэта.</string>
<string name="select_map_marker">Выберыце маркер</string>
<string name="map_markers_other">Іншыя маркеры</string>
<string name="upload_anonymously">Адаслаць ананімна</string>
<string name="download_files_error_not_enough_space">Недастаткова памяці! Гэта патрабуе {3} ГБ часовай і {1} МБ сталай памяці. На дадзены момант даступна толькі {2} МБ.</string>
<string name="download_files_question_space_with_temp">Спампаваць {0} файл(аў)? Гэта патрабуе {3} МБ часовай і {1} МБ сталай памяці. Зараз свабодна толькі {2} МБ.</string>
<string name="map_marker_1st">Першы маркер</string>
<string name="map_marker_2nd">Другі маркер</string>
<string name="shared_string_toolbar">Панэль інструмэнтаў</string>
<string name="shared_string_widgets">Віджэты</string>
<string name="shared_string_reverse_order">Зваротны парадак</string>
<string name="clear_active_markers_q">Выдаліць усе актыўныя маркеры?</string>
<string name="clear_markers_history_q">Ачысьціць гісторыю маркераў?</string>
<string name="active_markers">Актыўныя маркеры</string>
<string name="map_markers">Маркеры</string>
<string name="map_marker">Маркер</string>
<string name="consider_turning_polygons_off">Рэкамэндуецца адключыць паказ палігонаў.</string>
<string name="osm_live_subscription">Падпіска OSM Live</string>
</resources>

View file

@ -2714,4 +2714,5 @@
<string name="poi_vacuum_cleaner_no">Støvsuger: nej</string>
<string name="poi_amenity_vacuum_cleaner">Støvsuger</string>
<string name="poi_sport_free_flying">Fri flyvning (sport)</string>
</resources>

View file

@ -2323,5 +2323,6 @@
<string name="recalculate_route">Genberegn ruten</string>
<string name="shared_string_topbar">Topbjælke</string>
<string name="storage_directory_shared">Delt hukommelse</string>
<string name="storage_directory_readonly_desc">Aktuelt valgte lagerpladsmappen til Data er skrivebeskyttet. Lagermappe blev midlertidigt skifte til Intern hukommelse. Vælg gyldigt en lagerpladsmappe.</string>
<string name="storage_directory_readonly_desc">Den aktuelt valgte lagerpladsmappe til data er skrivebeskyttet. Lagermappe blev midlertidigt skifte til Intern hukommelse. Vælg en gyldig lagerpladsmappe.</string>
<string name="avoid_road">Undgå vej</string>
</resources>

View file

@ -171,7 +171,7 @@
<string name="poi_vehicle_inspection">Inspección de vehículos</string>
<string name="poi_car_wash">Lavadero de automóviles</string>
<string name="poi_fuel">Estación de servicio</string>
<string name="poi_fuel_diesel">Diésel</string>
<string name="poi_fuel_diesel">EuroDiésel</string>
<string name="poi_fuel_gtl_diesel">Diésel GTL</string>
<string name="poi_fuel_hgv_diesel">Diésel de vehículos pesados</string>
<string name="poi_fuel_biodiesel">Biodiésel</string>
@ -2685,4 +2685,5 @@
<string name="poi_vacuum_cleaner_no">Sin aspiradora</string>
<string name="poi_amenity_vacuum_cleaner">Aspiradoras</string>
<string name="poi_sport_free_flying">Vuelo libre (deporte)</string>
</resources>

View file

@ -2448,4 +2448,5 @@
<string name="poi_vacuum_cleaner_no">Sin aspiradora</string>
<string name="poi_amenity_vacuum_cleaner">Aspiradoras</string>
<string name="poi_sport_free_flying">Vuelo libre (deporte)</string>
</resources>

View file

@ -138,7 +138,7 @@
<string name="shared_string_others">Autres</string>
<string name="shared_string_no_thanks">Pas nécessaire</string>
<string name="basemap_missing">La carte mondiale de base est absente (couvrant le monde entier à faible zoom). Pensez à télécharger World_basemap_x.obf pour avoir un environnement complet.</string>
<string name="vector_data_missing">Il n\'y a pas de cartes (\'hors-ligne\') sur la carte SD. Pensez à en télécharger pour utiliser OsmAnd hors-ligne.</string>
<string name="vector_data_missing">Il n\'y a aucune carte hors-ligne sur la carte SD. Pensez à télécharger des cartes pour utiliser OsmAnd hors-ligne.</string>
<string name="local_index_installed">Version locale</string>
@ -682,7 +682,7 @@
<string name="online_map_settings_descr">Configurer la source de la carte en ligne ou en cache</string>
<string name="osmand_rastermaps_plugin_description">"Ce greffon permet d\'accéder à une grande gamme de cartes en ligne (aussi appelées tuiles ou cartes raster) qui vont de cartes OpenStreetMap (comme les tuiles Mapnik) jusqu\'aux images satellites en passant par des cartes spécialisées comme des cartes météo, des cartes de climat, des cartes géologiques, etc …\n\nChacune de ces cartes est utilisable soit comme carte principale soit comme sur ou sous couche d\'une autre carte. Afin de gérer au mieux la superposition des cartes, vous pouvez masquer certains éléments des cartes vectorielles hors ligne depuis le menu \"Configurer la carte\".\n\nCes cartes tuiles peuvent être obtenues directement en ligne et peuvent également être préparées grâce à des outils tiers puis copiées dans le dossier de données d\'OsmAnd sous forme de base de données sqlite. "</string>
<string name="osmand_rastermaps_plugin_description">"Ce greffon permet d\'accéder à une grande gamme de cartes en ligne (aussi appelées tuiles ou cartes raster) qui vont de cartes OpenStreetMap (comme les tuiles Mapnik) jusqu\'aux images satellites en passant par des cartes spécialisées comme des cartes météo, des cartes de climat, des cartes géologiques, etc …\n\nChacune de ces cartes est utilisable soit comme carte principale soit comme sur ou sous couche d\'une autre carte. Afin de gérer au mieux la superposition des cartes, vous pouvez masquer certains éléments des cartes vectorielles hors ligne depuis le menu \"Configurer la carte\".\n\nCes cartes tuiles peuvent être obtenues directement en ligne et peuvent également être préparées grâce à des outils tiers puis copiées dans le dossier de données d\'OsmAnd sous forme de base de données SQLite. "</string>
<string name="osmand_background_plugin_description">Affiche les préférences afin d\'activer le suivi et la navigation en tâche de fond (écran éteint) en réveillant périodiquement le GPS.</string>
<string name="osmand_accessibility_description">Ce greffon donne accès directement dans OsmAnd aux options d\'accessibilité de votre appareil (réglage de la vitesse des voix TTS, utilisation du trackball pour zoomer ou annonce automatique de votre position).</string>
@ -945,7 +945,7 @@
<string name="non_optimal_route_calculation">Calcule un itinéraire éventuellement non optimal pour les trajets longues distances</string>
<string name="rendering_attr_roadColors_description">Sélectionnez un thème de couleurs pour les routes :</string>
<string name="rendering_attr_roadColors_name">Thème de couleurs pour les routes</string>
<string name="zxing_barcode_scanner_not_found">Lapplication ZXing Barcode Scanner n\'est pas installée. Souhaitez-vous l\'installer depuis la boutique ?</string>
<string name="zxing_barcode_scanner_not_found">Lapplication ZXing Barcode Scanner n\'est pas installée. Souhaitez-vous l\'installer depuis Google Play ?</string>
<string name="close_changeset">Clôturer les modifications</string>
<string name="background_service_is_enabled_question">Le service OsmAnd s\'exécute toujours en tâche de fond. Voulez-vous également l\'arrêter ?</string>
@ -1024,7 +1024,7 @@
<string name="intermediate_points_change_order">Modifier l\'ordre</string>
<string name="dropbox_plugin_name">Greffon Dropbox</string>
<string name="dropbox_plugin_description">Le greffon Dropbox permet de synchroniser des pistes et des notes audio / vidéo avec votre compte Dropbox.</string>
<string name="dropbox_plugin_description">Le greffon Dropbox permet de synchroniser des itinéraires et des notes audio / vidéo avec votre compte Dropbox.</string>
<string name="recording_context_menu_show">Afficher</string>
<string name="recording_photo_description">Photo %1$s %2$s</string>
<string name="av_def_action_picture">Prendre une photo</string>
@ -2157,4 +2157,11 @@
<string name="osm_live_ask_for_purchase">Au préalable achetez un abonnement à OMS Live</string>
<string name="osm_live_region_desc">Vos dons seront distribués aux utilisateurs ayant soumis des mises à jour pour la carte de cette région</string>
<string name="avoid_road">Éviter la route</string>
<string name="osm_editors_ranking">Classement OSM</string>
<string name="osm_live_email_desc">Ces informations sont requises pour afficher les contributions</string>
<string name="osm_live_user_public_name">Nom affiché</string>
<string name="osm_live_hide_user_name">Ne pas afficher mon nom dans les signalements</string>
<string name="osm_live_support_region">Région supportée</string>
<string name="osm_live_enter_user_name">Merci de saisir le nom sous lequel vous souhaitez apparaître</string>
</resources>

View file

@ -2653,4 +2653,6 @@
<string name="poi_vacuum_cleaner_no">Без пылесоса</string>
<string name="poi_amenity_vacuum_cleaner">Пылесос</string>
<string name="poi_sport_free_flying">Свободный полёт (спорт)</string>
</resources>

View file

@ -2133,4 +2133,6 @@
<string name="recalculate_route">Beräkna om rutten</string>
<string name="shared_string_topbar">Toppfält</string>
<string name="storage_directory_shared">Delat minne</string>
<string name="avoid_road">Undvik väg</string>
<string name="storage_directory_readonly_desc">Den för tillfället valda datalagringsmappen är skrivskyddad. Lagringsmappen har tillfälligt ändrats till internminnet. Välj en giltig datalagringsmapp.</string>
</resources>

View file

@ -43,7 +43,7 @@
<string name="online_map_settings_descr">Налаштування онлайн або кешованих джерел (тайлів) мап</string>
<string name="osmand_rastermaps_plugin_description">"Цей втулок надає можливість отримати доступ до багатьох типів онлайн (так званих растрових) мап, від попередньо створених квадратів Openstreetmap (на кшталт стилю Mapnik) до супутникових знімків та спеціальних шарів, таких як погодні, кліматичні та геологічні мапи, шари рельєфу й т.і.\n\nБудь яка з цих мап може використовуватись як основна мапа в OsmAnd, або як покриття чи підкладка до іншої основної мапи (наприклад стандартна оффлайнова мапа OsmAnd). Для того, щоб зробити більш помітною будь-яку мапу-підкладку, певні елементи векторної мапи OsmAnd можна легко сховати через меню \'Налаштування Мапи\'.\n\nКвадрати мап можна отримувати безпосередньо з онлайн-джерел або підготувати їх для оффлайнового використання (та вручну скопіювати в теку даних OsmAnd) у вигляді бази даних sqlite, яку можна створити за допомогою різноманітних сторонніх інструментів підготовки мап. "</string>
<string name="osmand_rastermaps_plugin_description">"Цей втулок надає можливість отримати доступ до багатьох типів онлайн (так званих растрових) мап, від попередньо створених квадратів OpenStreetMap (на кшталт стилю Mapnik) до супутникових знімків та спеціальних шарів, таких як погодні, кліматичні та геологічні мапи, шари рельєфу й т.і.\n\nБудь яка з цих мап може використовуватись як основна мапа в OsmAnd, або як покриття чи підкладка до іншої основної мапи (наприклад стандартна оффлайнова мапа OsmAnd). Для того, щоб зробити більш помітною будь-яку мапу-підкладку, певні елементи векторної мапи OsmAnd можна легко сховати через меню \'Налаштування Мапи\'.\n\nКвадрати мап можна отримувати безпосередньо з онлайн-джерел або підготувати їх для оффлайнового використання (та вручну скопіювати в теку даних OsmAnd) у вигляді бази даних SQLite, яку можна створити за допомогою різноманітних сторонніх інструментів підготовки мап. "</string>
<string name="osmand_background_plugin_description">Показує налаштування для активації навігації та запису маршрутів в фоновому режимі (екран вимкнено), періодично активуючи GPS.</string>
<string name="osmand_accessibility_description">Втулок містить налаштування допоміжних можливостей. Він дозволяє налаштувати швидкість відтворення голосових підказок, налаштування спрямовування екрану під час навігації, використання трекболу для масштабування, або використання перетворення тексту в голос, скажімо, для сповіщення про ваше поточне місцезнаходження.</string>
@ -912,7 +912,7 @@
<string name="recording_photo_description">Фото %1$s %2$s</string>
<string name="av_def_action_picture">Сфотографувати</string>
<string name="recording_context_menu_precord">Сфотографувати</string>
<string name="dropbox_plugin_description">Втулок Dropbox дає можливість синхронізувати треки і відео/аудіо замітки з вашим обліковим записом dropbox.</string>
<string name="dropbox_plugin_description">Втулок Dropbox дає Вам можливість синхронізувати треки і відео/аудіо замітки з вашим обліковим записом Dropbox.</string>
<string name="dropbox_plugin_name">Втулок Dropbox</string>
<string name="intermediate_points_change_order">Змінити порядок</string>
@ -994,7 +994,7 @@
<string name="monitoring_control_start">старт</string>
<string name="background_service_is_enabled_question">Фоновий режим запущений. Ви хочете зупинити його роботу також?</string>
<string name="close_changeset">Закрити набір змін</string>
<string name="zxing_barcode_scanner_not_found">Програму \'Сканер штрих-кодів\' не знайдено. Шукати в Market?</string>
<string name="zxing_barcode_scanner_not_found">Програму \'Сканер штрих-кодів\' не знайдено. Шукати в Google Play?</string>
<string name="rendering_attr_roadColors_description">Виберіть кольорову схему доріг:</string>
<string name="rendering_attr_roadColors_name">Кольорова схема доріг</string>
<string name="map_widget_show_destination_arrow">Відображати напрямок до пункту призначення</string>
@ -1526,7 +1526,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
<string name="osmo_settings_debug">Інформація для відлагодження</string>
<string name="osmo_settings_descr">Налаштування параметрів моніторингу та встановлення персонального каналу моніторингу</string>
<string name="osmo_settings">OsMo</string>
<string name="osmo_plugin_description">"Цей втулок надає можливість сучасного онлайн моніторингу OsMo, дивіться http://osmo.mobi.\n\nВи можете відстежувати пристрої учасників з вашох групи в поточному часі та підтримувати зв’язок друг з другом. Втулок має різноманітні налаштування сесій чи постійного відстеження.\n\nАнонімні групи можуть створюватись та існувати вказану кількість днів та мати зазначені функції, ними неможливо керувати віддалено та вони не мають адміністраторів. Групи з повним набором функцій можуть бути створені на веб-сайті і тільки зареєстровані користувачі матимуть до них доступ. "</string>
<string name="osmo_plugin_description">"Цей втулок надає можливість сучасного онлайн моніторингу OsMo, дивіться http://osmo.mobi.\n\nВи можете відстежувати пристрої учасників з ваших групи в поточному часі та підтримувати зв’язок друг з другом. Втулок має різноманітні налаштування сесій чи постійного відстеження.\n\nАнонімні групи можуть створюватись та існувати вказану кількість днів та мати зазначені функції, ними неможливо керувати віддалено та вони не мають адміністраторів. Групи з повним набором функцій можуть бути створені на веб-сайті і тільки зареєстровані користувачі матимуть до них доступ. "</string>
<string name="osmo_plugin_name">OsMo (OSM моніторинг)</string>
<string name="always_center_position_on_map">Показувати положення завжди в центрі</string>
<string name="voice_pref_title">Голос</string>
@ -1593,7 +1593,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
<string name="calculate_osmand_route_without_internet">Розрахувати відрізок маршруту OsmAnd без Інтернету</string>
<string name="gpx_option_calculate_first_last_segment">Розрахувати маршрут OsmAnd для першого і останнього відрізку маршруту</string>
<string name="use_displayed_track_for_navigation">Бажаєте використовувати показаний трек для навігації?</string>
<string name="keep_and_add_destination_point">Додати як пункт призначення</string>
<string name="keep_and_add_destination_point">Додати як крайній пункт призначення</string>
<string name="select_gpx">Обрати GPX…</string>
<string name="route_descr_select_destination">Обрати місце призначення</string>
<string name="shared_string_select_on_map">Вибрати на мапі</string>
@ -2300,8 +2300,20 @@ OsmAnd має відкриті сирці і активно розвиваєть
<string name="map_marker_2nd">Друга позначка мапи</string>
<string name="shared_string_toolbar">Панель інструментів</string>
<string name="shared_string_widgets">ВІджети</string>
<string name="osmand_plus_extended_description_4000_chars_v2">" OsmAnd Мапи та навігація – виконує прокладання маршрутів та пошук не вимагачи наявності зʼєднання з Інтернтом. Завантажте мапу країни перед подорожжю для того, щоб виконувати пошук та прокладати маршрути в незнайомому місці. Основні можливості: • Докладні мапи 200 країн • Офлайн навігація з голосовим супроводженням • Пошук адрес в без інтерента • Інформація про обʼкти на мапі: ПОІ, кафе, стоянки, магазини • Додавання місць в закладки • Автомобільна, пішохідна та вело навігація Додаткові можливості: запис та перегляд треків GPX • Отримання опису ПОІ з Вікіпедії • Додавання фото, аудіо та відео нотаток до мапи • Денний та нічний режими для більш зручного використання за кермом • Інформація про маршрути та зупинки громадського транспорта • Велодоріжки та тротуари • Пішохідні туристичні маршрути по всьому світу • Онлайн мапи з різних джерел • Інформація про дорожне покриття та освітлення • Додавання, редагування та вилучення ПОІ (для учасників OpenStreetMap) • OsMo  онлайн стеження за іншими пристроями Отримайте надійну навігацію для вашої країни – Франції, Номеччини, Мексики, Великобританії, Іспанії, Нідерландів, США, Росії, Бразилії, України та інших країн. Втулки: • Ізолінії та рельєф https://goo.gl/7mojP8 Додає ізолінії та візуалізацію рельєфу до основної мапи OsmAnd. • Лижні мапи https://goo.gl/pX6DxJ Інформація про лижні траси, маршрути, підйомники. • Морські мапи https://goo.gl/0hEdxm Спеціальний стиль для перегляду навігаційний знаків для артеріальної і прибережної морської навігації. • Місце стоянки https://goo.gl/6JxQXF Допомагає вам позначти місце стоянки вашого автомобіля та стежити за часом, що залишився до кінця стоянки. Залишайтесь на зʼязку! Twitter: https://twitter.com/osmandapp Facebook: https://www.facebook.com/osmandapp Сайт: http://osmand.net Якщо у вас є питання, щодо використання OsmAnd, звертайтесь до нас: support@osmand.net. "</string>
<string name="osmand_plus_extended_description_4000_chars_v2">" OsmAnd мапи та навігація – пошук місце розташування на мапі та прокладання маршрутів без потреби у доступі до Інтернету. Завантажте мапу країни перед подорожжю для того, щоб виконувати пошук та прокладати маршрути в незнайомому місці. Основні можливості: • Докладні мапи 200 країн • Оффлайн навігація з голосовим супроводженням • Пошук адрес без наявності інтернету • Інформація про об\'єкти на мапі: POI, кафе, стоянки, магазини • Додавання місць в закладки • Автомобільна, пішохідна та вело навігація Додаткові можливості: запис та перегляд треків GPX • Отримання опису POI з Вікіпедії • Додавання фото, аудіо та відео нотаток до мапи • Денний та нічний режими для більш зручного використання за кермом • Інформація про маршрути та зупинки громадського транспорту • Велодоріжки та тротуари • Пішохідні туристичні маршрути по всьому світу • Онлайн мапи з різних джерел • Інформація про дорожнє покриття та освітлення • Додавання, редагування та вилучення POI (для учасників OpenStreetMap) • OsMo  онлайн стеження за іншими пристроями Отримайте надійну навігацію для вашої країни – Франції, Німеччини, Мексики, Великобританії, Іспанії, Нідерландів, США, Росії, Бразилії, України та інших країн. Втулки: • Ізолінії та рельєф https://goo.gl/7mojP8 Додає ізолінії та візуалізацію рельєфу до основної мапи OsmAnd. • Лижні мапи https://goo.gl/pX6DxJ Інформація про лижні траси, маршрути, підйомники. • Морські мапи https://goo.gl/0hEdxm Спеціальний стиль для перегляду навігаційний знаків для артеріальної і прибережної морської навігації. • Місце стоянки https://goo.gl/6JxQXF Допомагає вам позначити місце стоянки вашого автомобіля та стежити за часом, що залишився до кінця стоянки. Залишайтесь на зв\'язку! Twitter: https://twitter.com/osmandapp Facebook: https://www.facebook.com/osmandapp Сайт: http://osmand.net Якщо у вас є питання, щодо використання OsmAnd, звертайтесь до нас: support@osmand.net. "</string>
<string name="map_markers_other">Інші позначки</string>
<string name="download_files_error_not_enough_space">Недостатньо пам\'яті! Це потребує {3} МБ тимчасової та {1} МБ постійної пам\'яті. На разі доступно лише {2} МБ.</string>
<string name="download_files_question_space_with_temp">Завантажити {0} файл(їв)? Це потребує {3} МБ тимчасової та {1} МЮ постійної пам\'яті. Наразі вільно лише {2} МБ.</string>
<string name="donations">Пожертвування</string>
<string name="osm_live_subscribe_btn">Підписатися</string>
<string name="osm_live_hide_user_name">Не показувати моє ім\'я у звітах</string>
<string name="osm_live_month_cost">Щомісячна вартість</string>
<string name="osm_live_month_cost_desc">Щомісячний платіж</string>
<string name="osm_live_active">Активний</string>
<string name="osm_live_not_active">Не активний</string>
<string name="osm_live_enter_email">Будь ласка, введіть дійсну електронну адресу</string>
<string name="osm_live_subscription_settings">Налаштування підписки</string>
<string name="select_map_marker">Виберіть позначку</string>
<string name="upload_anonymously">Вивантажено анонімно</string>
<string name="show_transparency_seekbar">Показати прозору пошукову панель</string>
</resources>

View file

@ -2144,4 +2144,5 @@
<string name="shared_string_topbar">頂端列</string>
<string name="storage_directory_readonly_desc">目前選取的資料存儲資料夾是唯讀的。存儲資料夾被暫時切換到內部記憶體。請選擇有效的儲存目錄。</string>
<string name="storage_directory_shared">共用記憶體</string>
<string name="avoid_road">避開道路</string>
</resources>

View file

@ -2655,4 +2655,5 @@
<string name="poi_vacuum_cleaner_no">Vacuum cleaner: no</string>
<string name="poi_amenity_vacuum_cleaner">Vacuum cleaner</string>
<string name="poi_sport_free_flying">Free flying (sport)</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="avoid_road">Avoid road</string>
<string name="storage_directory_readonly_desc">Currently selected Data storage folder is readonly. The storage folder was temporarily switched to Internal memory. Please choose valid storage directory.</string>
<string name="storage_directory_shared">Shared memory</string>
<string name="shared_string_topbar">Topbar</string>

View file

@ -635,8 +635,8 @@ public class DistanceCalculatorPlugin extends OsmandPlugin {
}
@Override
public void populateObjectContextMenu(Object o, ContextMenuAdapter adapter) {
if(o instanceof WptPt) {
public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) {
if (o != null && o instanceof WptPt) {
final WptPt p = (WptPt) o;
boolean containsPoint = false;
for (int i = 0; i < measurementPoints.size(); i++) {

View file

@ -20,6 +20,7 @@ import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.plus.views.ContextMenuLayer;
@ -134,16 +135,17 @@ public class AvoidSpecificRoads {
protected void selectFromMap(final MapActivity mapActivity) {
ContextMenuLayer cm = mapActivity.getMapLayers().getContextMenuLayer();
cm.setSelectOnMap(new CallbackWithObject<LatLon>() {
@Override
public boolean processResult(LatLon result) {
findRoad(mapActivity, result);
addImpassableRoad(mapActivity, result, true);
return true;
}
});
}
private void findRoad(final MapActivity activity, final LatLon loc) {
public void addImpassableRoad(final MapActivity activity, final LatLon loc, final boolean showDialog) {
final Location ll = new Location("");
ll.setLatitude(loc.getLatitude());
ll.setLongitude(loc.getLongitude());
@ -159,7 +161,13 @@ public class AvoidSpecificRoads {
if(rh.isRouteCalculated() || rh.isRouteBeingCalculated()) {
rh.recalculateRouteDueToSettingsChange();
}
showDialog(activity);
if (showDialog) {
showDialog(activity);
}
MapContextMenu menu = activity.getContextMenu();
if (menu.isActive() && menu.getLatLon().equals(loc)) {
menu.close();
}
}
return true;
}

View file

@ -22,7 +22,6 @@ import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.download.AbstractDownloadActivity;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.liveupdates.LiveUpdatesHelper.TimeOfDay;
@ -41,6 +40,7 @@ import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getPendingIntent;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceDownloadViaWiFi;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceForLocalIndex;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLastCheck;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLiveUpdatesOn;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayToUpdate;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.runLiveUpdate;
@ -78,7 +78,15 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
String lastCheckString = formatDateTime(getActivity(), lastCheck != DEFAULT_LAST_CHECK
? lastCheck : timestamp);
lastMapChangeTextView.setText(getString(R.string.last_map_change, lastUpdateDate));
lastUpdateTextView.setText(getString(R.string.last_update, lastCheckString));
OsmandSettings.CommonPreference<Boolean> preference = preferenceLiveUpdatesOn(localIndexInfo,
getSettings());
if (preference.get()) {
lastUpdateTextView.setText(getString(R.string.last_update, lastCheckString));
} else {
lastUpdateTextView.setVisibility(View.GONE);
}
final OsmandSettings.CommonPreference<Boolean> liveUpdatePreference =
preferenceForLocalIndex(localIndexInfo, getSettings());
@ -98,7 +106,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
for (int i = 0; i < timeOfDays.length; i++) {
timeOfDaysStrings[i] = getString(timeOfDays[i].getLocalizedId());
}
updateTimesOfDaySpinner.setAdapter(new ArrayAdapter<String>(getActivity(),
updateTimesOfDaySpinner.setAdapter(new ArrayAdapter<>(getActivity(),
R.layout.action_spinner_item, timeOfDaysStrings));
updateTimesOfDaySpinner.setSelection(timeOfDayPreference.get());
@ -109,7 +117,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
}
refreshTimeOfDayLayout(UpdateFrequency.values()[updateFrequencyPreference.get()], updateTimesOfDayLayout);
updateFrequencySpinner.setAdapter(new ArrayAdapter<String>(getActivity(),
updateFrequencySpinner.setAdapter(new ArrayAdapter<>(getActivity(),
R.layout.action_spinner_item, updateFrequenciesStrings));
updateFrequencySpinner.setSelection(updateFrequencyPreference.get());
updateFrequencySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

View file

@ -11,6 +11,7 @@ import android.support.annotation.AttrRes;
import android.support.annotation.ColorInt;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@ -24,6 +25,7 @@ import android.widget.TextView;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.osm.io.NetworkUtils;
import net.osmand.plus.R;
@ -55,7 +57,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
private TextView donationsTextView;
private TextView recipientsTextView;
private Spinner montReportsSpinner;
private Spinner monthReportsSpinner;
private MonthsForReportsAdapter monthsForReportsAdapter;
private CountrySelectionFragment countrySelectionFragment = new CountrySelectionFragment();
@ -82,10 +84,26 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_reports, container, false);
montReportsSpinner = (Spinner) view.findViewById(R.id.montReportsSpinner);
monthReportsSpinner = (Spinner) view.findViewById(R.id.monthReportsSpinner);
final View monthButton = view.findViewById(R.id.monthButton);
monthReportsSpinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
event.offsetLocation(AndroidUtils.dpToPx(getActivity(), 48f), 0);
monthButton.onTouchEvent(event);
return true;
}
});
monthsForReportsAdapter = new MonthsForReportsAdapter(getActivity());
montReportsSpinner.setAdapter(monthsForReportsAdapter);
monthReportsSpinner.setAdapter(monthsForReportsAdapter);
monthButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
monthReportsSpinner.performClick();
}
});
view.findViewById(R.id.show_all).setOnClickListener(new OnClickListener() {
@Override
@ -105,7 +123,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int monthItemPosition = montReportsSpinner.getSelectedItemPosition();
int monthItemPosition = monthReportsSpinner.getSelectedItemPosition();
String monthUrlString = monthsForReportsAdapter.getQueryString(monthItemPosition);
String countryUrlString = selectedCountryItem.getDownloadName();
if (countryUrlString.length() > 0) {
@ -128,15 +146,17 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
countryNameTextView.setText(selectedCountryItem.getLocalName());
setThemedDrawable(view, R.id.calendarImageView, R.drawable.ic_action_data);
setThemedDrawable(view, R.id.monthDropDownIcon, R.drawable.ic_action_arrow_drop_down);
setThemedDrawable(view, R.id.regionIconImageView, R.drawable.ic_world_globe_dark);
setThemedDrawable(view, R.id.countryDropDownIcon, R.drawable.ic_action_arrow_drop_down);
numberOfContributorsIcon = (ImageView) view.findViewById(R.id.numberOfContributorsIcon);
numberOfEditsIcon = (ImageView) view.findViewById(R.id.numberOfEditsIcon);
numberOfRecipientsIcon = (ImageView) view.findViewById(R.id.numberOfRecipientsIcon);
donationsIcon = (ImageView) view.findViewById(R.id.donationsIcon);
setThemedDrawable(numberOfContributorsIcon, R.drawable.ic_group);
setThemedDrawable(numberOfRecipientsIcon, R.drawable.ic_group);
setThemedDrawable(donationsIcon, R.drawable.ic_action_message);
setThemedDrawable(donationsIcon, R.drawable.ic_action_bitcoin);
setThemedDrawable(numberOfEditsIcon, R.drawable.ic_map);
@ -167,7 +187,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
}
};
montReportsSpinner.setOnItemSelectedListener(onItemSelectedListener);
monthReportsSpinner.setOnItemSelectedListener(onItemSelectedListener);
inactiveColor = getColorFromAttr(R.attr.plugin_details_install_header_bg);
textColorPrimary = getColorFromAttr(android.R.attr.textColorPrimary);
@ -177,7 +197,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
}
public void requestAndUpdateUi() {
int monthItemPosition = montReportsSpinner.getSelectedItemPosition();
int monthItemPosition = monthReportsSpinner.getSelectedItemPosition();
String monthUrlString = monthsForReportsAdapter.getQueryString(monthItemPosition);
String countryUrlString = selectedCountryItem.getDownloadName();
@ -260,7 +280,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
private static class MonthsForReportsAdapter extends ArrayAdapter<String> {
private static final SimpleDateFormat queryFormat = new SimpleDateFormat("yyyy-MM", Locale.US);
@SuppressLint("SimpleDateFormat")
private static final SimpleDateFormat humanFormat = new SimpleDateFormat("MMMM yyyy");
private static final SimpleDateFormat humanFormat = new SimpleDateFormat("LLLL yyyy");
ArrayList<String> queryString = new ArrayList<>();
@ -344,7 +364,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
numberOfContributorsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_group, inactiveColor));
numberOfEditsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_map, inactiveColor));
numberOfRecipientsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_group, inactiveColor));
donationsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_message, inactiveColor));
donationsIcon.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_bitcoin, inactiveColor));
numberOfContributorsTitle.setTextColor(inactiveColor);
numberOfEditsTitle.setTextColor(inactiveColor);
@ -364,7 +384,7 @@ public class ReportsFragment extends BaseOsmAndFragment implements CountrySelect
numberOfContributorsIcon.setImageDrawable(getContentIcon(R.drawable.ic_group));
numberOfEditsIcon.setImageDrawable(getContentIcon(R.drawable.ic_map));
numberOfRecipientsIcon.setImageDrawable(getContentIcon(R.drawable.ic_group));
donationsIcon.setImageDrawable(getContentIcon(R.drawable.ic_action_message));
donationsIcon.setImageDrawable(getContentIcon(R.drawable.ic_action_bitcoin));
numberOfContributorsTitle.setTextColor(textColorSecondary);
numberOfEditsTitle.setTextColor(textColorSecondary);

View file

@ -554,10 +554,8 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
public void buttonMorePressed() {
final ContextMenuAdapter menuAdapter = new ContextMenuAdapter(mapActivity);
if (object != null) {
for (OsmandMapLayer layer : mapActivity.getMapView().getLayers()) {
layer.populateObjectContextMenu(object, menuAdapter);
}
for (OsmandMapLayer layer : mapActivity.getMapView().getLayers()) {
layer.populateObjectContextMenu(latLon, object, menuAdapter);
}
mapActivity.getMapActions().contextMenuPoint(latLon.getLatitude(), latLon.getLongitude(), menuAdapter, object);

View file

@ -32,6 +32,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
@ -165,18 +166,40 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
final TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
// tabLayout.setupWithViewPager(viewPager);
// Hack due to bug in design support library v22.2.1
// https://code.google.com/p/android/issues/detail?id=180462
// TODO remove in new version
if (ViewCompat.isLaidOut(tabLayout)) {
tabLayout.setupWithViewPager(viewPager);
if (Build.VERSION.SDK_INT >= 11) {
if (ViewCompat.isLaidOut(tabLayout)) {
tabLayout.setupWithViewPager(viewPager);
} else {
tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
tabLayout.setupWithViewPager(viewPager);
tabLayout.removeOnLayoutChangeListener(this);
}
});
}
} else {
tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
tabLayout.setupWithViewPager(viewPager);
tabLayout.removeOnLayoutChangeListener(this);
public void onGlobalLayout() {
ViewTreeObserver obs = view.getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
if (getActivity() != null) {
tabLayout.setupWithViewPager(viewPager);
}
}
});
}
@ -346,9 +369,9 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
} else {
new SaveWithAdvancedTagsDialogFragment().show(getChildFragmentManager(), "dialog");
}
} else if(editPoiData.getPoiCategory() == getMyApplication().getPoiTypes().getOtherPoiCategory()) {
} else if (editPoiData.getPoiCategory() == getMyApplication().getPoiTypes().getOtherPoiCategory()) {
poiTypeEditText.setError(getResources().getString(R.string.please_specify_poi_type));
} else if(editPoiData.getPoiTypeDefined() == null) {
} else if (editPoiData.getPoiTypeDefined() == null) {
poiTypeEditText.setError(getResources().getString(R.string.please_specify_poi_type_only_from_list));
} else {
save();
@ -372,7 +395,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
node.putTag(editPoiData.getPoiCategory().getDefaultTag(), tag.getValue());
}
if(offlineEdit && !Algorithms.isEmpty(tag.getValue())) {
if (offlineEdit && !Algorithms.isEmpty(tag.getValue())) {
node.putTag(tag.getKey(), tag.getValue());
}
} else if (!Algorithms.isEmpty(tag.getKey()) && !Algorithms.isEmpty(tag.getValue())) {
@ -460,7 +483,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
@Override
protected void onPostExecute(Node result) {
progress.dismiss();
if(postExecute != null) {
if (postExecute != null) {
postExecute.processResult(result);
}
}
@ -476,9 +499,9 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
private void setAdapterForPoiTypeEditText() {
final Map<String, PoiType> subCategories = new LinkedHashMap<>();
PoiCategory ct = editPoiData.getPoiCategory();
if(ct != null) {
if (ct != null) {
for (PoiType s : ct.getPoiTypes()) {
if(!s.isReference() && !s.isNotEditableOsm() && s.getBaseLangType() == null) {
if (!s.isReference() && !s.isNotEditableOsm() && s.getBaseLangType() == null) {
addMapEntryAdapter(subCategories, s.getTranslation(), s);
addMapEntryAdapter(subCategories, s.getKeyName().replace('_', ' '), s);
}
@ -663,11 +686,11 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
deleteNode(n, c, closeChangeSet);
}
});
builder.create().show();
}
private void deleteNode(final Node n, final String c, final boolean closeChangeSet) {
final boolean isLocalEdit = openstreetmapUtil instanceof OpenstreetmapLocalUtil;
commitNode(OsmPoint.Action.DELETE, n, openstreetmapUtil.getEntityInfo(n.getId()), c, closeChangeSet,
@ -727,7 +750,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
.setNegativeButton(R.string.shared_string_cancel, null);
return builder.create();
}
}
}
private TextView.OnEditorActionListener mOnEditorActionListener =
new TextView.OnEditorActionListener() {

View file

@ -81,8 +81,8 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye
}
@Override
public void populateObjectContextMenu(Object o, ContextMenuAdapter adapter) {
if (o instanceof GPXUtilities.WptPt && plugin.getCurrentRoute() != null){
public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) {
if (o != null && o instanceof GPXUtilities.WptPt && plugin.getCurrentRoute() != null){
final GPXUtilities.WptPt point = (GPXUtilities.WptPt) o;
ContextMenuAdapter.OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() {
@Override

View file

@ -102,7 +102,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
}
@Override
public void populateObjectContextMenu(Object o, ContextMenuAdapter adapter) {
public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) {
if (menu.hasHiddenBottomInfo()) {
ContextMenuAdapter.OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() {
@Override

View file

@ -5,14 +5,18 @@ import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PointF;
import android.widget.ArrayAdapter;
import net.osmand.Location;
import net.osmand.binary.RouteDataObject;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
import net.osmand.data.PointDescription;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.routing.RoutingHelper;
import java.util.List;
import java.util.Map;
@ -26,6 +30,7 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
private Paint paint;
private Map<Long, Location> missingRoadLocations;
private List<RouteDataObject> missingRoads;
private RoutingHelper routingHelper;
public ImpassableRoadsLayer(MapActivity activity) {
this.activity = activity;
@ -36,6 +41,7 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
this.view = view;
roadWorkIcon = BitmapFactory.decodeResource(view.getResources(), R.drawable.map_pin_avoid_road);
paint = new Paint();
routingHelper = activity.getRoutingHelper();
}
@Override
@ -58,14 +64,14 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
}
public Map<Long, Location> getMissingRoadLocations() {
if(missingRoadLocations == null) {
if (missingRoadLocations == null) {
missingRoadLocations = activity.getMyApplication().getDefaultRoutingConfig().getImpassableRoadLocations();
}
return missingRoadLocations;
}
public List<RouteDataObject> getMissingRoads() {
if(missingRoads == null) {
if (missingRoads == null) {
missingRoads = activity.getMyApplication().getDefaultRoutingConfig().getImpassableRoads();
}
return missingRoads;
@ -81,9 +87,9 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
return true;
}
public int getRadiusPoi(RotatedTileBox tb){
public int getRadiusPoi(RotatedTileBox tb) {
int r = 0;
if(tb.getZoom() < startZoom){
if (tb.getZoom() < startZoom) {
r = 0;
} else {
r = 15;
@ -92,7 +98,7 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
}
private boolean calculateBelongs(int ex, int ey, int objx, int objy, int radius) {
return Math.abs(objx - ex) <= radius && (ey - objy) <= radius / 2 && (objy - ey) <= 3 * radius ;
return Math.abs(objx - ex) <= radius && (ey - objy) <= radius / 2 && (objy - ey) <= 3 * radius;
}
@Override
@ -125,8 +131,8 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
@Override
public LatLon getObjectLocation(Object o) {
if(o instanceof RouteDataObject) {
RouteDataObject route = (RouteDataObject) o;
if (o instanceof RouteDataObject) {
RouteDataObject route = (RouteDataObject) o;
Location location = missingRoadLocations.get(route.getId());
return new LatLon(location.getLatitude(), location.getLongitude());
}
@ -140,11 +146,32 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
@Override
public PointDescription getObjectName(Object o) {
if(o instanceof RouteDataObject) {
RouteDataObject route = (RouteDataObject) o;
if (o instanceof RouteDataObject) {
RouteDataObject route = (RouteDataObject) o;
return new PointDescription(PointDescription.POINT_TYPE_BLOCKED_ROAD, route.getName());
}
return null;
}
@Override
public void populateObjectContextMenu(final LatLon latLon, final Object o, ContextMenuAdapter adapter) {
if (latLon != null && o == null
&& (routingHelper.isRoutePlanningMode() || routingHelper.isFollowingMode())) {
ContextMenuAdapter.OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
if (itemId == R.string.avoid_road) {
activity.getMyApplication().getAvoidSpecificRoads().addImpassableRoad(
activity, latLon, false);
}
activity.refreshMap();
return true;
}
};
adapter.item(R.string.avoid_road).iconColor(
R.drawable.ic_action_road_works_dark).listen(listener).reg();
}
}
}

View file

@ -6,6 +6,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.osmand.data.LatLon;
import net.osmand.data.QuadRect;
import net.osmand.data.QuadTree;
import net.osmand.data.RotatedTileBox;
@ -16,6 +17,7 @@ import android.graphics.Path;
import android.graphics.PointF;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.MotionEvent;
public abstract class OsmandMapLayer {
@ -31,8 +33,8 @@ public abstract class OsmandMapLayer {
public abstract void destroyLayer();
public void onRetainNonConfigurationInstance(Map<String, Object> map) {}
public void populateObjectContextMenu(Object o, ContextMenuAdapter adapter) {}
public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) {}
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
return false;

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>android-support-v7-gridlayout</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.gridlayout">
<uses-sdk android:minSdkVersion="7"/>
<application />
</manifest>

View file

@ -0,0 +1,66 @@
Library Project including compatibility GridLayout.
This can be used by an Android project to provide
access to GridLayout on applications running on API 7+.
There is technically no source, but the src folder is necessary
to ensure that the build system works. The content is actually
located in libs/android-support-v7-gridlayout.jar.
The accompanying resources must also be included in the application.
USAGE:
Make sure you use <android.support.v7.widget.GridLayout> in your
layouts instead of <GridLayout>.
Same for <android.support.v7.widget.Space> instead of <Space>.
Additionally, all of GridLayout's attributes should be put in the
namespace of the app, as those attributes have been redefined in
the library so that it can run on older platforms that don't offer
those attributes in their namespace.
To know which attributes need the application namespace, look at
the two declare-styleable declared in res/values/attrs.xml
For instance:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" <==== the namespace used for the library project
android:layout_width="match_parent"
android:layout_height="match_parent"
app:columnCount="6" > <===== notice how we're using app:columnCount here, not android:columnCount!
<Button
android:id="@+id/button1"
app:layout_column="1" <=== again, note the app: namespace
app:layout_columnSpan="2"
app:layout_gravity="left"
app:layout_row="1"
android:text="Button" />
<CheckBox
android:id="@+id/checkBox1"
app:layout_column="4"
app:layout_gravity="left"
app:layout_row="2"
android:text="CheckBox" />
<Button
android:id="@+id/button2"
app:layout_column="5"
app:layout_gravity="left"
app:layout_row="3"
android:text="Button" />
<android.support.v7.widget.Space <=== space widgets also need the full support package path
android:layout_width="21dp" <=== use the android namespace for width, height etc -- only use app: for the grid layout library's new resources
android:layout_height="1dp"
app:layout_column="0"
app:layout_gravity="fill_horizontal"
app:layout_row="0" />

View file

@ -0,0 +1,26 @@
apply plugin: 'com.android.library'
dependencies {
compile files('libs/android-support-v7-gridlayout.jar')
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 23
}
sourceSets {
main {
manifest.srcFile "AndroidManifest.xml"
aidl.srcDirs = ["src"]
java.srcDirs = ["src"]
resources.srcDirs = ["src"]
renderscript.srcDirs = ["src"]
res.srcDirs = ["res"]
assets.srcDirs = ["assets"]
}
}
}

View file

@ -0,0 +1,15 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-23
android.library=true

View file

@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="GridLayout">
<!--
support versions. All attributes not present in ViewGroup/View are
redefined in the support library namespace.
-->
<!--
The orientation property is not used during layout. It is only used to
allocate row and column parameters when they are not specified by its children's
layout parameters. GridLayout works like LinearLayout in this case;
putting all the components either in a single row or in a single column -
depending on the value of this flag. In the horizontal case, a columnCount
property may be additionally supplied to force new rows to be created when a
row is full. The rowCount attribute may be used similarly in the vertical case.
The default is horizontal.
-->
<attr name="orientation">
<!-- Defines an horizontal widget. -->
<enum name="horizontal" value="0" />
<!-- Defines a vertical widget. -->
<enum name="vertical" value="1" />
</attr>
<!-- The maximum number of rows to create when automatically positioning children. -->
<attr name="rowCount" format="integer" />
<!-- The maximum number of columns to create when automatically positioning children. -->
<attr name="columnCount" format="integer" />
<!--
When set to true, tells GridLayout to use default margins when none are specified
in a view's layout parameters.
The default value is false.
See {@link android.widget.GridLayout#setUseDefaultMargins(boolean)}.
-->
<attr name="useDefaultMargins" format="boolean" />
<!--
When set to alignMargins, causes alignment to take place between the outer
boundary of a view, as defined by its margins. When set to alignBounds,
causes alignment to take place between the edges of the view.
The default is alignMargins.
See {@link android.widget.GridLayout#setAlignmentMode(int)}.
-->
<attr name="alignmentMode">
<!--
Align the bounds of the children.
See {@link android.widget.GridLayout#ALIGN_BOUNDS}.
-->
<enum name="alignBounds" value="0" />
<!--
Align the margins of the children.
See {@link android.widget.GridLayout#ALIGN_MARGINS}.
-->
<enum name="alignMargins" value="1" />
</attr>
<!--
When set to true, forces row boundaries to appear in the same order
as row indices.
The default is true.
See {@link android.widget.GridLayout#setRowOrderPreserved(boolean)}.
-->
<attr name="rowOrderPreserved" format="boolean" />
<!--
When set to true, forces column boundaries to appear in the same order
as column indices.
The default is true.
See {@link android.widget.GridLayout#setColumnOrderPreserved(boolean)}.
-->
<attr name="columnOrderPreserved" format="boolean" />
</declare-styleable>
<declare-styleable name="GridLayout_Layout">
<!--
support versions. All attributes not present in MarginLayout are
redefined in the support library name space.
-->
<!-- START MarginLayout layoutparams -->
<attr name="android:layout_width" />
<attr name="android:layout_height" />
<!--
Specifies extra space on the left, top, right and bottom
sides of this view. This space is outside this view's bounds.
-->
<attr name="android:layout_margin" />
<!--
Specifies extra space on the left side of this view.
This space is outside this view's bounds.
-->
<attr name="android:layout_marginLeft" />
<!--
Specifies extra space on the top side of this view.
This space is outside this view's bounds.
-->
<attr name="android:layout_marginTop" />
<!--
Specifies extra space on the right side of this view.
This space is outside this view's bounds.
-->
<attr name="android:layout_marginRight" />
<!--
Specifies extra space on the bottom side of this view.
This space is outside this view's bounds.
-->
<attr name="android:layout_marginBottom" />
<!-- END MarginLayout layoutparams -->
<!--
The row boundary delimiting the top of the group of cells
occupied by this view.
-->
<attr name="layout_row" format="integer" />
<!--
The row span: the difference between the top and bottom
boundaries delimiting the group of cells occupied by this view.
The default is one.
See {@link android.widget.GridLayout.Spec}.
-->
<attr name="layout_rowSpan" format="integer" min="1" />
<!-- The relative proportion of vertical space that should be allocated to this view
during excess space distribution. -->
<attr name="layout_rowWeight" format="float" />
<!--
The column boundary delimiting the left of the group of cells
occupied by this view.
-->
<attr name="layout_column" format="integer" />
<!--
The column span: the difference between the right and left
boundaries delimiting the group of cells occupied by this view.
The default is one.
See {@link android.widget.GridLayout.Spec}.
-->
<attr name="layout_columnSpan" format="integer" min="1" />
<!-- The relative proportion of horizontal space that should be allocated to this view
during excess space distribution. -->
<attr name="layout_columnWeight" format="float" />
<!--
Gravity specifies how a component should be placed in its group of cells.
The default is LEFT | BASELINE.
See {@link android.widget.GridLayout.LayoutParams#setGravity(int)}.
-->
<attr name="layout_gravity">
<!-- Push object to the top of its container, not changing its size. -->
<flag name="top" value="0x30" />
<!-- Push object to the bottom of its container, not changing its size. -->
<flag name="bottom" value="0x50" />
<!-- Push object to the left of its container, not changing its size. -->
<flag name="left" value="0x03" />
<!-- Push object to the right of its container, not changing its size. -->
<flag name="right" value="0x05" />
<!-- Place object in the vertical center of its container, not changing its size. -->
<flag name="center_vertical" value="0x10" />
<!-- Grow the vertical size of the object if needed so it completely fills its container. -->
<flag name="fill_vertical" value="0x70" />
<!-- Place object in the horizontal center of its container, not changing its size. -->
<flag name="center_horizontal" value="0x01" />
<!-- Grow the horizontal size of the object if needed so it completely fills its container. -->
<flag name="fill_horizontal" value="0x07" />
<!-- Place the object in the center of its container in both the vertical and horizontal axis, not changing its size. -->
<flag name="center" value="0x11" />
<!-- Grow the horizontal and vertical size of the object if needed so it completely fills its container. -->
<flag name="fill" value="0x77" />
<!--
Additional option that can be set to have the top and/or bottom edges of
the child clipped to its container's bounds.
The clip will be based on the vertical gravity: a top gravity will clip the bottom
edge, a bottom gravity will clip the top edge, and neither will clip both edges.
-->
<flag name="clip_vertical" value="0x80" />
<!--
Additional option that can be set to have the left and/or right edges of
the child clipped to its container's bounds.
The clip will be based on the horizontal gravity: a left gravity will clip the right
edge, a right gravity will clip the left edge, and neither will clip both edges.
-->
<flag name="clip_horizontal" value="0x08" />
<!-- Push object to the beginning of its container, not changing its size. -->
<flag name="start" value="0x00800003" />
<!-- Push object to the end of its container, not changing its size. -->
<flag name="end" value="0x00800005" />
</attr>
</declare-styleable>
</resources>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- The default gap between components in a layout. -->
<dimen name="default_gap">8dip</dimen>
</resources>

View file

@ -0,0 +1,2 @@
This hidden file is there to ensure there is an src folder.
Once we support binary library this will go away.

View file

@ -1,4 +1,5 @@
include ':OsmAnd-java'
include ':eclipse-compile:gridlayout'
include ':eclipse-compile:cardview'
include ':eclipse-compile:design'
include ':eclipse-compile:appcompat'