Merge branch 'master' of github.com:osmandapp/Osmand
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.1 KiB |
|
@ -8,7 +8,7 @@
|
|||
|
||||
<View
|
||||
android:id="@+id/map_route_land_left_margin"
|
||||
android:layout_width="@dimen/map_route_planning_land_width"
|
||||
android:layout_width="@dimen/map_route_planning_land_width_minus_shadow"
|
||||
android:layout_height="0dp"
|
||||
android:layout_gravity="top|left"
|
||||
android:visibility="gone"/>
|
||||
|
|
|
@ -1,242 +1,384 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/plan_route_info"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:background="?attr/left_menu_view_bg"
|
||||
android:orientation="vertical" >
|
||||
<FrameLayout android:id="@+id/plan_route_info"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:background="@color/color_transparent">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ModesLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:id="@+id/main_view"
|
||||
android:layout_width="@dimen/map_route_planning_land_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@drawable/bg_left_menu_dark"
|
||||
android:clickable="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<LinearLayout
|
||||
android:id="@+id/ModesLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false"/>
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerModesLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/app_modes"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:gravity="left"
|
||||
android:orientation="horizontal"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/waypoints"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/map_action_waypoints"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/app_modes"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:gravity="left"
|
||||
android:orientation="horizontal"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:visibility="gone"
|
||||
android:id="@+id/FromLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/waypoints"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/map_action_waypoints"/>
|
||||
android:id="@+id/fromIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:src="@drawable/map_default_location"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/fromTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/route_from"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/FromSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="-8dp"
|
||||
android:background="@null"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fromDropDownIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginRight="@dimen/list_header_text_left_margin"
|
||||
android:src="@drawable/ic_action_arrow_drop_down"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/FromLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/route_from"
|
||||
android:textSize="@dimen/default_sub_text_size" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/FromSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_list_text_size" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerFromDropDown"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ViaLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaSubView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_via"
|
||||
android:textSize="@dimen/default_sub_text_size" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:gravity="left"
|
||||
android:textSize="@dimen/default_desc_text_size" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ToLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/route_to"
|
||||
android:textSize="@dimen/default_sub_text_size" >
|
||||
</TextView>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/ToSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_list_text_size" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/RouteInfoControls"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/Info"
|
||||
android:layout_width="fill_parent"
|
||||
android:id="@+id/ViaLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:orientation="horizontal" >
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Prev"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_previous"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_prev" />
|
||||
android:id="@+id/viaIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:src="@drawable/map_default_location"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/InfoIcon"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/info_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_action_info_dark" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/InfoTextView"
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|left"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_desc_text_size" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaSubView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_via"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:gravity="left"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Next"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_next"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_next" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/viaLayoutDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ToLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/toIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:src="@drawable/map_default_location"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/toTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/route_to"
|
||||
android:textSize="@dimen/default_sub_text_size">
|
||||
</TextView>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/ToSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="-8dp"
|
||||
android:background="@null"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/toDropDownIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginRight="@dimen/list_header_text_left_margin"
|
||||
android:src="@drawable/ic_action_arrow_drop_down"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerToDropDown"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/RouteInfoControls"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/Info"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Prev"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_previous"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_prev"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/InfoIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/info_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_action_info_dark"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/InfoDistance"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DistanceTitle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_distance"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DistanceText"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:gravity="left"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/DurationIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/info_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_action_time"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/InfoDuration"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DurationTitle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_duration"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DurationText"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:gravity="left"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/InfoTextView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|left"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_desc_text_size"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Next"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_next"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_next"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false"/>
|
||||
<View
|
||||
android:id="@+id/dividerButtons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<include layout="@layout/map_route_prepare_bottom" />
|
||||
<include layout="@layout/map_route_prepare_bottom"/>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
|
@ -42,7 +42,7 @@
|
|||
android:layout_row="1"
|
||||
android:text="@string/live_update"/>
|
||||
|
||||
<Switch
|
||||
<android.support.v7.widget.SwitchCompat
|
||||
android:id="@+id/liveUpdatesSwitch"
|
||||
android:layout_gravity="right"/>
|
||||
|
||||
|
@ -52,7 +52,7 @@
|
|||
android:layout_row="2"
|
||||
android:text="@string/only_download_over_wifi"/>
|
||||
|
||||
<Switch
|
||||
<android.support.v7.widget.SwitchCompat
|
||||
android:id="@+id/downloadOnlyOverWiFi"
|
||||
android:layout_gravity="right"/>
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<ListView android:id="@android:id/list"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context=".liveupdates.LiveUpdatesFragment"/>
|
||||
<ExpandableListView
|
||||
android:id="@android:id/list"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:groupIndicator="@null"
|
||||
android:orientation="vertical"
|
||||
tools:context=".liveupdates.LiveUpdatesFragment"/>
|
||||
|
|
|
@ -48,15 +48,23 @@
|
|||
|
||||
<include layout="@layout/map_hud_bottom"/>
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom">
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/routeMenuContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<include
|
||||
layout="@layout/dashboard_over_map"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -66,9 +74,11 @@
|
|||
android:id="@+id/fragmentContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<ListView
|
||||
|
|
|
@ -15,9 +15,10 @@
|
|||
android:src="@drawable/ic_action_test_light" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerBtn1"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/dashboard_divider"/>
|
||||
android:background="@color/dashboard_divider_dark"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/map_waypoints_route_button"
|
||||
|
@ -28,9 +29,10 @@
|
|||
android:src="@drawable/ic_action_test_light" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerBtn2"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/dashboard_divider"/>
|
||||
android:background="@color/dashboard_divider_dark"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/map_options_route_button"
|
||||
|
@ -41,9 +43,10 @@
|
|||
android:src="@drawable/ic_action_test_light" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerBtn3"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/dashboard_divider"/>
|
||||
android:background="@color/dashboard_divider_dark"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/map_go_route_button"
|
||||
|
|
|
@ -1,236 +1,384 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/plan_route_info"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:background="?attr/bottom_menu_view_bg"
|
||||
android:orientation="vertical" >
|
||||
<FrameLayout android:id="@+id/plan_route_info"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:background="@color/color_transparent">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ModesLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:id="@+id/main_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@drawable/bg_bottom_menu_dark"
|
||||
android:clickable="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<LinearLayout
|
||||
android:id="@+id/ModesLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false"/>
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerModesLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/app_modes"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:gravity="left"
|
||||
android:orientation="horizontal"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/waypoints"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/map_action_waypoints"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/app_modes"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:gravity="left"
|
||||
android:orientation="horizontal"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:visibility="gone"
|
||||
android:id="@+id/FromLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/waypoints"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/map_action_waypoints"/>
|
||||
android:id="@+id/fromIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:src="@drawable/map_default_location"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/fromTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/route_from"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/FromSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="-8dp"
|
||||
android:background="@null"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fromDropDownIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginRight="@dimen/list_header_text_left_margin"
|
||||
android:src="@drawable/ic_action_arrow_drop_down"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/FromLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/route_from"
|
||||
android:textSize="@dimen/default_sub_text_size" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/FromSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_list_text_size" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerFromDropDown"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ViaLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaSubView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_via"
|
||||
android:textSize="@dimen/default_sub_text_size" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:gravity="left"
|
||||
android:textSize="@dimen/default_desc_text_size" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ToLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/route_to"
|
||||
android:textSize="@dimen/default_sub_text_size" >
|
||||
</TextView>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/ToSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_marginTop="3dp"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_list_text_size" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/RouteInfoControls"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/Info"
|
||||
android:layout_width="fill_parent"
|
||||
android:id="@+id/ViaLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:orientation="horizontal" >
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Prev"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_previous"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_prev" />
|
||||
android:id="@+id/viaIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:src="@drawable/map_default_location"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/InfoIcon"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/info_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_action_info_dark" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/InfoTextView"
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|left"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_desc_text_size" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaSubView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_via"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ViaView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:gravity="left"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Next"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_next"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_next" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/viaLayoutDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ToLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/toIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:src="@drawable/map_default_location"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/toTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/route_to"
|
||||
android:textSize="@dimen/default_sub_text_size">
|
||||
</TextView>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/ToSpinner"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="-8dp"
|
||||
android:background="@null"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/toDropDownIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginRight="@dimen/list_header_text_left_margin"
|
||||
android:src="@drawable/ic_action_arrow_drop_down"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/dividerToDropDown"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/RouteInfoControls"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/Info"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Prev"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_previous"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_prev"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/InfoIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/info_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_action_info_dark"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/InfoDistance"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DistanceTitle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_distance"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DistanceText"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:gravity="left"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/DurationIcon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/info_button"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_action_time"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/InfoDuration"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DurationTitle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:gravity="left"
|
||||
android:text="@string/route_duration"
|
||||
android:textSize="@dimen/default_sub_text_size"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/DurationText"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:gravity="left"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/InfoTextView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|left"
|
||||
android:layout_weight="1"
|
||||
android:textSize="@dimen/default_desc_text_size"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/Next"
|
||||
android:layout_width="@dimen/list_item_height"
|
||||
android:layout_height="@dimen/list_item_height"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_next"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_next"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:focusable="false"/>
|
||||
</ScrollView>
|
||||
|
||||
<include layout="@layout/map_route_prepare_bottom" />
|
||||
<View
|
||||
android:id="@+id/dividerButtons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/dashboard_divider_dark"
|
||||
android:focusable="false"/>
|
||||
|
||||
</LinearLayout>
|
||||
<include layout="@layout/map_route_prepare_bottom"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
|
@ -392,4 +392,5 @@
|
|||
<string name="poi_payment_bankaxess_yes">BankAxess се приема</string>
|
||||
<string name="poi_payment_bankaxess_no">BankAxess не се приема</string>
|
||||
<string name="poi_social_facility_food_bank">Социален механизъм: Хранителна банка</string>
|
||||
<string name="poi_denomination_bulgarian_orthodox">Българско православие</string>
|
||||
</resources>
|
||||
|
|
|
@ -929,7 +929,7 @@
|
|||
<string name="search_online_address">Търсене онлайн</string>
|
||||
<string name="max_level_download_tile">Максимален мащаб при онлайн</string>
|
||||
<string name="max_level_download_tile_descr">Изберете максимален мащаб за сваляне на онлайн картни фрагменти</string>
|
||||
<string name="route_general_information">Дистанция: %1$s,\nВреме до целта: %2$d ч. %3$d мин.</string>
|
||||
<string name="route_general_information">Разстояние: %1$s, време до целта: %2$d ч. %3$d мин.</string>
|
||||
<string name="router_service_descr">Изберете онлайн или офлайн услуга за навигация</string>
|
||||
<string name="router_service">Услуга за навигация</string>
|
||||
<string name="sd_dir_not_accessible">Папката за запис на SD картата не е достъпна!</string>
|
||||
|
@ -1471,7 +1471,7 @@
|
|||
<string name="back_to_map">Назад към картата</string>
|
||||
<string name="share_note">Сподели бележката</string>
|
||||
<string name="location_on_map">Позиция:\n шир: %1$s\n дълж: %2$s</string>
|
||||
<string name="watch">Гледай</string>
|
||||
<string name="watch">Виж</string>
|
||||
<string name="notes">Бележки</string>
|
||||
<string name="online_map">Онлайн карта</string>
|
||||
<string name="roads_only">Само пътища</string>
|
||||
|
@ -1674,7 +1674,7 @@
|
|||
<string name="osmo_plugin_description">"Това разширение добавя функционалност за наблюдение на OsMo в реално време, за справка http://osmo.mobi.\nМожете да следите всички устройства от дадена група в реално време и да общувате помежду си. Разширението предлага различни възможности за проследяване по време на връзката или постоянно.\nАнонимните групи могат да бъдат създадени временно за определен брой дни и имат ограничени възможности, например без отдалечено управление и администратор. Пълноценните групи, от друга страна, могат да се създават на сайта и само регистрираните потребители имат достъп до тях. "</string>
|
||||
<string name="plugin_nautical_descr">"Добавката обогатява приложението OsmAnd карти и навигация като създава карти за гребане, ветроходство и други водни спортове.\n\nСпециалната добавка за карти на OsmAnd добавя морски навигационни символи и диаграми за вътрешна и крайбрежна навигация. Описанието на всеки навигационен символ показва подробностите, необходими за разпознаването и значението му (категория, фигура, цвят, последователност, препратка и др.).\n\nЗа да се върнете към някой от обикновените режими на картите на OsmAnd, просто изключете добавката или сменете \"Стил на картата\" в менюто \"Настройка на картата\". "</string>
|
||||
<string name="plugin_settings">Добавки</string>
|
||||
<string name="rendering_attr_currentTrackColor_name">GPX цвят</string>
|
||||
<string name="rendering_attr_currentTrackColor_name">цвят на GPX</string>
|
||||
<string name="rendering_attr_currentTrackWidth_name">GPX ширина</string>
|
||||
<string name="osmo_settings">OsMo</string>
|
||||
<string name="lang_zh">Китайски</string>
|
||||
|
@ -1761,7 +1761,7 @@
|
|||
<string name="go_to_map">Преминете към картата</string>
|
||||
<string name="simulate_initial_startup_descr">Установява маркер, който показва първо стартиране на приложението; всички други настройки остават непроменени</string>
|
||||
<string name="simulate_initial_startup">Симулиране на първото стартиране на приложение</string>
|
||||
<string name="share_geo">Гео:</string>
|
||||
<string name="share_geo">geo:</string>
|
||||
<string name="share_menu_location">Споделяне на местоположението</string>
|
||||
<string name="shared_string_send">Изпрати</string>
|
||||
<string name="favorite_category_dublicate_message">Съществува категория със същото име. Моля, посочете друго име.</string>
|
||||
|
@ -1821,7 +1821,7 @@
|
|||
<string name="osn_add_dialog_error">Възникна грешка: Бележката не беше създадена</string>
|
||||
<string name="osn_close_dialog_success">Бележката беше успешно затворена</string>
|
||||
<string name="osn_close_dialog_error">Възникна грешка: Бележката не беше затворена успешно</string>
|
||||
<string name="shared_string_commit">Запиши</string>
|
||||
<string name="shared_string_commit">Изпращане на данни до OSM</string>
|
||||
|
||||
<string name="context_menu_item_delete_waypoint">Изтриване на GPX точка?</string>
|
||||
<string name="context_menu_item_edit_waypoint">Редактиране на GPX точка</string>
|
||||
|
@ -1931,7 +1931,7 @@
|
|||
<string name="osmo_mode_on">Спиране на OsMo сесия</string>
|
||||
<string name="osmo_mode_off">Стартиране на OsMo сесия</string>
|
||||
<string name="route_descr_destination">Крайна цел</string>
|
||||
<string name="rendering_attr_alpineHiking_name">Скала на Алпийски туризъм (SAC)</string>
|
||||
<string name="rendering_attr_alpineHiking_name">Трудност по скалата на SAC</string>
|
||||
<string name="rendering_attr_alpineHiking_description">Оцветяване на пътеките по скалата на SAC</string>
|
||||
<string name="rendering_attr_hikingRoutesOSMC_name">Наслагване на туристически символи</string>
|
||||
<string name="interrupt_music_descr">Прекъсване на музиката при гласово анонсиране</string>
|
||||
|
@ -2007,4 +2007,10 @@
|
|||
<string name="number_of_rows_in_dash">Брой редове %1$s</string>
|
||||
<string name="dashboard_or_drawer_description">Можете да управлявате приложението чрез гъвкаво табло или чрез статично меню. Вашият избор може да бъде променен по-късно.</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Пътеки за конна езда</string>
|
||||
<string name="update_every">Обновяване на всеки</string>
|
||||
<string name="only_download_over_wifi">Сваляне само през WiFi</string>
|
||||
<string name="live_update">Актуализиране на момента</string>
|
||||
<string name="update_now">Актуализирай сега</string>
|
||||
<string name="route_distance">Разстояние:</string>
|
||||
<string name="route_duration">Време за пътуване:</string>
|
||||
</resources>
|
||||
|
|
|
@ -1186,7 +1186,7 @@
|
|||
<string name="poi_internet_access_yes">Accés a Internet: sí</string>
|
||||
<string name="poi_internet_access_no">Accés a Internet: no</string>
|
||||
|
||||
<string name="poi_wheelchair_no">Cadira de rodes: no permesa</string>
|
||||
<string name="poi_wheelchair_no">Cadira de rodes: no accessible</string>
|
||||
<string name="poi_wheelchair_limited">Cadira de rodes: restringida</string>
|
||||
<string name="poi_content_fuel">Contingut: carburant</string>
|
||||
<string name="poi_content_gas">Contingut: gas</string>
|
||||
|
@ -1212,7 +1212,7 @@
|
|||
<string name="poi_memorial_stone">Roc</string>
|
||||
<string name="poi_memorial_statue">Estàtua</string>
|
||||
<string name="poi_memorial_bust">Bust</string>
|
||||
<string name="poi_memorial_cross">Creu</string>
|
||||
<string name="poi_memorial_cross">En forma de creu</string>
|
||||
<string name="poi_memorial_plaque">Placa</string>
|
||||
<string name="poi_memorial_war">Memorial de guerra</string>
|
||||
<string name="poi_vending_bread">Pa</string>
|
||||
|
@ -1734,7 +1734,7 @@
|
|||
<string name="poi_drive_in_yes">Servei dins el vehicle: sí</string>
|
||||
<string name="poi_drive_in_no">Servei dins el vehicle: no</string>
|
||||
<string name="poi_drive_through_yes">Cua per vehicles: sí</string>
|
||||
<string name="poi_drive_through_no">Cua per vehicles: sí</string>
|
||||
<string name="poi_drive_through_no">Cua per vehicles: no</string>
|
||||
|
||||
<string name="poi_takeaway_yes">Per emportar-se</string>
|
||||
<string name="poi_takeaway_no">No es pot emportar</string>
|
||||
|
@ -1840,7 +1840,7 @@
|
|||
<string name="poi_internet_access_type_wired">Tipus d\'accés d\'Internet: per cable</string>
|
||||
<string name="poi_internet_access_type_public">Tipus d\'accés d\'Internet: públic</string>
|
||||
<string name="poi_internet_access_type_service">Tipus d\'accés d\'Internet: servei</string>
|
||||
<string name="poi_internet_access_type_no">Tipus d\'accés d\'Internet: cap</string>
|
||||
<string name="poi_internet_access_type_no">Sense accés a Internet</string>
|
||||
|
||||
<string name="poi_maxwidth">Amplada màxima</string>
|
||||
<string name="poi_iata">Codi IATA</string>
|
||||
|
@ -2056,4 +2056,27 @@
|
|||
<string name="poi_service_bicycle_cleaning_no">Neteja de bicicletes: no</string>
|
||||
<string name="poi_wildlife_hide">Lloc d\'observació de fauna en llibertat</string>
|
||||
|
||||
<string name="poi_clothes_underwear">Roba interior</string>
|
||||
<string name="poi_building_type_pyramid">Tipus d\'edifici: piràmide</string>
|
||||
|
||||
<string name="poi_fitness_centre">Gimnàs</string>
|
||||
<string name="poi_fitness">Fitness</string>
|
||||
|
||||
<string name="poi_billiards">Billar</string>
|
||||
|
||||
<string name="poi_health_specialty_behavior_yes">Especialitat mèdica: comportament</string>
|
||||
|
||||
<string name="poi_wiki_lang_bs">Wiki bosniana</string>
|
||||
<string name="poi_wiki_lang_cy">Wiki gal·lesa</string>
|
||||
<string name="poi_wiki_lang_eo">Wiki en esperanto</string>
|
||||
<string name="poi_wiki_lang_eu">Wiki basca</string>
|
||||
<string name="poi_wiki_lang_fy">Wiki frisona</string>
|
||||
<string name="poi_wiki_lang_ga">Wiki irlandesa</string>
|
||||
<string name="poi_wiki_lang_hy">Wiki armènia</string>
|
||||
<string name="poi_wiki_lang_is">Wiki islandesa</string>
|
||||
<string name="poi_wiki_lang_ka">Wiki georgiana</string>
|
||||
<string name="poi_wiki_lang_ku">Wiki kurda</string>
|
||||
<string name="poi_wiki_lang_la">Wiki en llatí</string>
|
||||
<string name="poi_wiki_lang_lb">Wiki luxemburguesa</string>
|
||||
<string name="poi_wiki_lang_mk">Wiki macedònica</string>
|
||||
</resources>
|
||||
|
|
|
@ -1876,4 +1876,10 @@ Per retornar a l\'estil habitual dels mapes d\'OsmAnd, només cal desactivar aqu
|
|||
<string name="av_audio_bitrate">Taxa de bits de l\'àudio</string>
|
||||
<string name="av_audio_bitrate_descr">Seleccioneu la taxa de bits de l\'àudio</string>
|
||||
<string name="looking_up_address">Consulta per adreça</string>
|
||||
<string name="update_every">Actualitza tots</string>
|
||||
<string name="only_download_over_wifi">Baixades només amb WIFI</string>
|
||||
<string name="live_update">Actualitza al moment</string>
|
||||
<string name="update_now">Actualitza ara</string>
|
||||
<string name="route_distance">Distància:</string>
|
||||
<string name="route_duration">Durada del viatge:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2522,7 +2522,7 @@
|
|||
<string name="poi_health_specialty_gynaecology_yes">Sundhedsspeciale: gynækologi</string>
|
||||
<string name="poi_health_specialty_internal_medicine_yes">Sundhedsspeciale: intern medicin</string>
|
||||
<string name="poi_health_specialty_orthopaedics_yes">Sundhedsspeciale: ortopædkirurgi</string>
|
||||
<string name="poi_health_specialty_otolaryngology_yes">Sundhedsspeciale: oto-rhino-laryngolog</string>
|
||||
<string name="poi_health_specialty_otolaryngology_yes">Sundhedsspeciale: oto-rhino-laryngologi</string>
|
||||
<string name="poi_health_specialty_paediatrics_yes">Sundhedsspeciale: pædiatri</string>
|
||||
<string name="poi_health_specialty_paediatrics_no">Sundhedsspeciale: pædiatri: nej</string>
|
||||
<string name="poi_health_specialty_dermatology_yes">Sundhedsspeciale: dermatologi</string>
|
||||
|
@ -2539,7 +2539,7 @@
|
|||
<string name="poi_health_specialty_anaesthetics_yes">Sundhedsspeciale: anæstesi</string>
|
||||
<string name="poi_health_specialty_pulmonology_yes">Sundhedsspeciale: pneumologi</string>
|
||||
<string name="poi_health_specialty_dental_oral_maxillo_facial_surgery_yes">Sundhedsspeciale: tand-, mund-, kæbe og ansigtskirurgi</string>
|
||||
<string name="poi_health_specialty_maternity_yes">Sundhedsspeciale: barsel</string>
|
||||
<string name="poi_health_specialty_maternity_yes">Sundhedsspeciale: graviditet og barsel</string>
|
||||
<string name="poi_health_specialty_emergency_medicine_yes">Sundhedsspeciale: akutmedicin</string>
|
||||
<string name="poi_health_specialty_emergency_medicine_no">Sundhedsspeciale: akutmedicin: nej</string>
|
||||
<string name="poi_health_specialty_plastic_surgery_yes">Sundhedsspeciale: plastikkirurgi</string>
|
||||
|
@ -2594,4 +2594,6 @@
|
|||
<string name="poi_fitness_centre">Fitnesscenter</string>
|
||||
<string name="poi_fitness">Fitness</string>
|
||||
|
||||
<string name="poi_billiards">Billard</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1379,7 +1379,7 @@
|
|||
<string name="navigation_intent_invalid">Ugyldigt format: %s</string>
|
||||
<string name="osmo_settings_uuid">Unik enheds-id</string>
|
||||
<string name="osmo_settings_descr">Konfigurer indstillinger for overvågning og opsætning af personlig overvågningskanal</string>
|
||||
<string name="osmo_plugin_description">"Udvidelsen giver funktionalitet for den såkaldte Osmo avancerede live overvågning, se http://osmo.mobi.\n\nSpor alle enheder i en deltagende gruppe tidstro og kommunikere med hinanden. Leveres med forskellige muligheder for sporing session eller permanent sporing.\n\nAnonyme grupper kan oprettes spontant for et bestemt antal dage, og der begrænset til definerede funktioner, dvs. der er ingen fjernbetjening og ingen gruppeadministrator. Fuldt funktionelle grupper, kan til gengæld oprettes på hjemmesiden, og kun registrerede brugere har adgang til dem. "</string>
|
||||
<string name="osmo_plugin_description">"Udvidelsen giver funktionalitet for den såkaldte Osmo avancerede realtidsovervågning, se http://osmo.mobi.\n\nSpor alle enheder i en deltagende gruppe tidstro og kommunikere med hinanden. Leveres med forskellige muligheder for sporing session eller permanent sporing.\n\nAnonyme grupper kan oprettes spontant for et bestemt antal dage, og der begrænset til definerede funktioner, dvs. der er ingen fjernbetjening og ingen gruppeadministrator. Fuldt funktionelle grupper, kan til gengæld oprettes på hjemmesiden, og kun registrerede brugere har adgang til dem. "</string>
|
||||
<string name="osmo_plugin_name">OsMo (OSM moniteing)</string>
|
||||
<string name="osmo_settings">OsMo</string>
|
||||
<string name="keep_informing_never">Kun manuelt (tryk på pilen)</string>
|
||||
|
@ -1971,7 +1971,7 @@
|
|||
<string name="user_hates_app_get_feedback">Fortæl os hvorfor.</string>
|
||||
|
||||
<string name="user_hates_app_get_feedback_long">Fortæl os hvad du ønsker at ændre i denne app.</string>
|
||||
<string name="download_live_updates">Live-opdateringer</string>
|
||||
<string name="download_live_updates">Realtidsopdateringer</string>
|
||||
<string name="delete_change">Slet ændring</string>
|
||||
<string name="try_again">Prøv igen</string>
|
||||
<string name="error_message_pattern">Fejl: {0}</string>
|
||||
|
@ -2182,8 +2182,11 @@
|
|||
<string name="shared_string_near">I nærheden af</string>
|
||||
<string name="no_address_found">Kan ikke bestemme adresse</string>
|
||||
<string name="looking_up_address">Søger efter adressen</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Hesteruter</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Rideruter</string>
|
||||
<string name="update_every">Opdater hver</string>
|
||||
<string name="only_download_over_wifi">Hent kun over WiFi</string>
|
||||
<string name="live_update">Realtids opdatering</string>
|
||||
</resources>
|
||||
<string name="only_download_over_wifi">Hent kun med WiFi</string>
|
||||
<string name="live_update">Realtidsopdatering</string>
|
||||
<string name="update_now">Opdater nu</string>
|
||||
<string name="route_distance">Afstand:</string>
|
||||
<string name="route_duration">Rejsetid:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2521,4 +2521,6 @@
|
|||
<string name="poi_fitness_centre">Fitnesscenter</string>
|
||||
<string name="poi_fitness">Fitness</string>
|
||||
|
||||
<string name="poi_billiards">Billard</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -2070,7 +2070,10 @@
|
|||
<string name="av_audio_bitrate">Audio Bitrate</string>
|
||||
<string name="av_audio_bitrate_descr">Wähle Audio Bitrate</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Pferdewege</string>
|
||||
<string name="update_every">Aktualisierung jede(n)</string>
|
||||
<string name="update_every">Aktualisierungsintervall</string>
|
||||
<string name="only_download_over_wifi">Nur über WLAN herunterladen</string>
|
||||
<string name="live_update">Live Aktualisierung</string>
|
||||
</resources>
|
||||
<string name="update_now">Jetzt aktualisieren</string>
|
||||
<string name="route_distance">Entfernung:</string>
|
||||
<string name="route_duration">Reisezeit:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2564,4 +2564,9 @@
|
|||
|
||||
<string name="poi_building_type_pyramid">Pirámide</string>
|
||||
|
||||
<string name="poi_fitness_centre">Gimnasio</string>
|
||||
<string name="poi_fitness">Educación física</string>
|
||||
|
||||
<string name="poi_billiards">Billar</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1992,8 +1992,8 @@
|
|||
<string name="routing_attr_avoid_borders_name">Evitar cruces fronterizos</string>
|
||||
<string name="shared_string_near">Cerca de</string>
|
||||
<string name="shared_string_hide">Ocultar</string>
|
||||
<string name="av_video_quality_low">Baja calidad</string>
|
||||
<string name="av_video_quality_high">Alta calidad</string>
|
||||
<string name="av_video_quality_low">Menor calidad</string>
|
||||
<string name="av_video_quality_high">Mayor calidad</string>
|
||||
<string name="av_video_quality">Calidad del video</string>
|
||||
<string name="av_video_quality_descr">Elige la calidad de salida del video</string>
|
||||
<string name="av_audio_format">Formato de audio</string>
|
||||
|
@ -2003,4 +2003,10 @@
|
|||
<string name="no_address_found">Dirección indeterminada</string>
|
||||
<string name="looking_up_address">Buscando dirección</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Rutas a caballo</string>
|
||||
<string name="update_every">Actualizar cada</string>
|
||||
<string name="only_download_over_wifi">Descargar sólo por WiFi</string>
|
||||
<string name="live_update">Actualización en vivo</string>
|
||||
<string name="update_now">Actualizar ahora</string>
|
||||
<string name="route_distance">Distancia:</string>
|
||||
<string name="route_duration">Duración del viaje:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2571,4 +2571,6 @@
|
|||
<string name="poi_fitness_centre">Gimnasio</string>
|
||||
<string name="poi_fitness">Gimnasio (deporte)</string>
|
||||
|
||||
<string name="poi_billiards">Billar</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1991,8 +1991,8 @@
|
|||
<string name="routing_attr_avoid_borders_name">Evitar cruces fronterizos</string>
|
||||
<string name="shared_string_near">Cerca de</string>
|
||||
<string name="shared_string_hide">Ocultar</string>
|
||||
<string name="av_video_quality_low">Baja calidad</string>
|
||||
<string name="av_video_quality_high">Alta calidad</string>
|
||||
<string name="av_video_quality_low">Menor calidad</string>
|
||||
<string name="av_video_quality_high">Mayor calidad</string>
|
||||
<string name="av_video_quality">Calidad del video</string>
|
||||
<string name="av_video_quality_descr">Seleccione la calidad de salida del vídeo</string>
|
||||
<string name="av_audio_format">Formato del audio</string>
|
||||
|
@ -2002,7 +2002,10 @@
|
|||
<string name="no_address_found">Dirección indeterminada</string>
|
||||
<string name="looking_up_address">Buscando dirección</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Rutas a caballo</string>
|
||||
<string name="update_every">Actualizar todos</string>
|
||||
<string name="update_every">Actualizar cada</string>
|
||||
<string name="only_download_over_wifi">Descargar sólo por WiFi</string>
|
||||
<string name="live_update">Actualización en vivo</string>
|
||||
</resources>
|
||||
<string name="update_now">Actualizar ahora</string>
|
||||
<string name="route_distance">Distancia:</string>
|
||||
<string name="route_duration">Duración:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2073,4 +2073,7 @@
|
|||
<string name="only_download_over_wifi">Télécharger uniquement en WIFI</string>
|
||||
<string name="live_update">Mise à jour en temps réel</string>
|
||||
<string name="rendering_attr_horseRoutes_name">Randonnée à cheval</string>
|
||||
<string name="update_now">Effectuer la mise à jour maintenant</string>
|
||||
<string name="route_distance">Distance :</string>
|
||||
<string name="route_duration">Durée du trajet :</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources><string name="offline_navigation_not_available">OsmAnd-ით ნავიგაცია გათიშულ რეჟიმში დროებით მიუწვდომელია.</string>
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources><string name="offline_navigation_not_available">OsmAnd-ით ნავიგაცია გათიშულ რეჟიმში დროებით მიუწვდომელია.</string>
|
||||
<string name="left_side_navigation">მარცხენა ხელით ტარება</string>
|
||||
<string name="left_side_navigation_descr">აირჩიეთ მარცხენა მხარეს საჭის გამომყენებელი ქვეყნებისათვის</string>
|
||||
|
||||
|
@ -1272,4 +1273,24 @@
|
|||
<string name="lang_ceb">ჩებუანური</string>
|
||||
<string name="archive_wikipedia_data">თქვენ გაქვთ ძველი, შეუთავსებელი მონაცემები ვიკიპედიიდან. გნებავთ მათი დაარქივება?</string>
|
||||
<string name="download_wikipedia_files">გნებავთ ვიკიპედიიდან დამატებითი მონაცემების ჩამოტვირთვა (%1$s მბ) ?</string>
|
||||
</resources>
|
||||
<string name="rendering_attr_horseRoutes_name">საცხენოსნო გზები</string>
|
||||
<string name="no_address_found">მისამართის მოძებნა შეუძლებელია</string>
|
||||
<string name="shared_string_near">ახლოს</string>
|
||||
<string name="shared_string_hide">დამალვა</string>
|
||||
<string name="av_video_quality_low">დაბალი ხარისხი</string>
|
||||
<string name="av_video_quality_high">მაღალი ხარისხი</string>
|
||||
<string name="av_video_quality">ვიდეოს ჩვენების ხარისხი</string>
|
||||
<string name="av_video_quality_descr">აირჩიეთ ვიდეოს ჩვენების ხარისხი</string>
|
||||
<string name="av_audio_format">აუდიო ფორმატი</string>
|
||||
<string name="av_audio_format_descr">აირჩიეთ ხმის ფორმატი</string>
|
||||
<string name="av_audio_bitrate">ხმის ბიტრეიტი</string>
|
||||
<string name="av_audio_bitrate_descr">აირჩიეთ ხმის ბიტრეიტი</string>
|
||||
<string name="please_specify_poi_type_only_from_list">გთხოვთ აირჩიოთ სწორი POI-ს ტიპი ან გამოტოვოთ</string>
|
||||
<string name="access_from_map_description">მენიუს ღილაკი უშვებს სამართავ პანელს და არა მენიუს</string>
|
||||
<string name="access_from_map">წვდომა რუკიდან</string>
|
||||
<string name="show_on_start">გაშვებისას ჩვენება</string>
|
||||
<string name="copied_to_clipboard">კოპირებულია გაცვლის ბუფერში</string>
|
||||
<string name="osm_save_offline">გათიშულად ჩაწერა</string>
|
||||
<string name="osm_edit_modified_poi">OSM POI-ს შეცვლა</string>
|
||||
<string name="osm_edit_deleted_poi">OSM POI წაშლილია</string>
|
||||
</resources>
|
||||
|
|
|
@ -7,10 +7,11 @@
|
|||
<dimen name="map_route_buttons_width">90dp</dimen>
|
||||
<dimen name="map_route_buttons_height">81dp</dimen>
|
||||
<dimen name="map_route_buttons_height_land">72dp</dimen>
|
||||
<dimen name="map_route_planning_max_height">400dp</dimen>
|
||||
<dimen name="map_route_planning_max_height">450dp</dimen>
|
||||
<dimen name="map_minwidth_widget">160dp</dimen>
|
||||
<dimen name="map_route_planning_land_width">510dp</dimen>
|
||||
|
||||
<dimen name="map_route_planning_land_width_minus_shadow">496dp</dimen>
|
||||
|
||||
<dimen name="map_address_height">60dp</dimen>
|
||||
<dimen name="map_button_size">78dp</dimen>
|
||||
<dimen name="map_small_button_size">66dp</dimen>
|
||||
|
|
|
@ -747,8 +747,8 @@
|
|||
<string name="poi_tomb">Graf</string>
|
||||
<string name="poi_hanami">Hanami</string>
|
||||
<string name="poi_wine_cellar">Wijnkelder</string>
|
||||
<string name="poi_piste_downhill">Alpijns skiën</string>
|
||||
<string name="poi_piste_hike">Wandelen</string>
|
||||
<string name="poi_piste_downhill">Skipiste</string>
|
||||
<string name="poi_piste_hike">Winterwandelweg</string>
|
||||
<string name="poi_piste_sleigh"/>
|
||||
<string name="poi_piste_ice_skate">Schaatsen</string>
|
||||
<string name="poi_ski_rental">Skiverhuur</string>
|
||||
|
@ -835,7 +835,7 @@
|
|||
<string name="poi_recycling_paper_packaging">Papieren verpakkingen</string>
|
||||
<string name="poi_recycling_small_appliances">Kleine apparaten</string>
|
||||
<string name="poi_recycling_wood">Hout</string>
|
||||
<string name="poi_recycling_books"/>
|
||||
<string name="poi_recycling_books">Boeken</string>
|
||||
<string name="poi_recycling_shoes">Schoenen</string>
|
||||
<string name="poi_recycling_aluminium">Aluminium</string>
|
||||
<string name="poi_recycling_organic">Organische materialen</string>
|
||||
|
@ -880,7 +880,7 @@
|
|||
<string name="poi_recycling_diapers">Luiers</string>
|
||||
<string name="poi_recycling_car_batteries">Accu\'s</string>
|
||||
<string name="poi_recycling_cars">Auto \'s</string>
|
||||
<string name="poi_recycling_bicycles"/>
|
||||
<string name="poi_recycling_bicycles">Fietsen</string>
|
||||
|
||||
<string name="poi_landfill_waste_nuclear">Nucleair afval</string>
|
||||
<string name="poi_basin">Waterbekken</string>
|
||||
|
@ -971,4 +971,15 @@
|
|||
<string name="poi_denomination_georgian_orthodox">Georgisch Orthodox</string>
|
||||
<string name="poi_denomination_scientist">Scientisme</string>
|
||||
<string name="poi_denomination_romanian_orthodox">Roemeens Orthodox</string>
|
||||
<string name="poi_denomination_ethiopian_orthodox_tewahedo">Ethiopisch Orthodox</string>
|
||||
<string name="poi_denomination_unitarian">Unitarisch</string>
|
||||
<string name="poi_denomination_coptic_orthodox">Koptisch-orthodox</string>
|
||||
<string name="poi_denomination_wesleyan">Wesleyan</string>
|
||||
<string name="poi_denomination_shaktism">Shaktisme</string>
|
||||
<string name="poi_internet_access_yes">Internettoegang: ja</string>
|
||||
<string name="poi_internet_access_no">Internettoegang: nee</string>
|
||||
|
||||
<string name="poi_piste">Piste</string>
|
||||
<string name="poi_piste_nordic">Langlaufpiste</string>
|
||||
<string name="poi_piste_skitour">Tourski piste</string>
|
||||
</resources>
|
||||
|
|
|
@ -2125,4 +2125,7 @@
|
|||
<string name="update_every">Update elke</string>
|
||||
<string name="only_download_over_wifi">"Alleen downloaden via WiFi"</string>
|
||||
<string name="live_update">Live Update</string>
|
||||
</resources>
|
||||
<string name="update_now">Nu bijwerken</string>
|
||||
<string name="route_distance">Afstand:</string>
|
||||
<string name="route_duration">Reistijd:</string>
|
||||
</resources>
|
||||
|
|
|
@ -349,7 +349,7 @@
|
|||
<string name="poi_adit">Ádito de mineração</string>
|
||||
<string name="poi_survey_point">Ponto de exame geográfico</string>
|
||||
<string name="poi_windmill">Moinho de vento</string>
|
||||
<string name="poi_salt_pond">Lagoa salgada</string>
|
||||
<string name="poi_salt_pond">Sapal</string>
|
||||
<string name="poi_reservoir">Lago artificial</string>
|
||||
<string name="poi_cricket_nets">Redes de críquete</string>
|
||||
<string name="poi_gasometer">Gasômetro</string>
|
||||
|
@ -2562,4 +2562,6 @@
|
|||
<string name="poi_fitness_centre">Academia de ginástica</string>
|
||||
<string name="poi_fitness">Fitness</string>
|
||||
|
||||
<string name="poi_billiards">Bilhar</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1954,4 +1954,7 @@
|
|||
<string name="update_every">Atualizar tudo</string>
|
||||
<string name="only_download_over_wifi">Somente baixar via Wi-Fi</string>
|
||||
<string name="live_update">Atualização ao vivo</string>
|
||||
</resources>
|
||||
<string name="update_now">Atualizar agora</string>
|
||||
<string name="route_distance">Distância:</string>
|
||||
<string name="route_duration">Tempo de viagem:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2543,4 +2543,6 @@
|
|||
<string name="poi_fitness_centre">Фитнес-центр</string>
|
||||
<string name="poi_fitness">Фитнес</string>
|
||||
|
||||
<string name="poi_billiards">Бильярд</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -2033,4 +2033,7 @@
|
|||
<string name="update_every">Uppdatera varje</string>
|
||||
<string name="only_download_over_wifi">Hämta endast via WiFi</string>
|
||||
<string name="live_update">Direktuppdatering</string>
|
||||
</resources>
|
||||
<string name="update_now">Uppdatera nu</string>
|
||||
<string name="route_distance">Avstånd:</string>
|
||||
<string name="route_duration">Restid:</string>
|
||||
</resources>
|
||||
|
|
|
@ -1992,4 +1992,7 @@
|
|||
<string name="update_every">Bütün Güncellemler</string>
|
||||
<string name="only_download_over_wifi">Sadece WiFi üzerinden İndir</string>
|
||||
<string name="live_update">Canlı güncelleştirme</string>
|
||||
<string name="route_distance">Mesafe:</string>
|
||||
<string name="route_duration">Yolculuk süresi:</string>
|
||||
<string name="update_now">Şimdi güncelle</string>
|
||||
</resources>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<string name="poi_baby_goods">Товари для дітей</string>
|
||||
<string name="poi_bag">Сумки, валізи</string>
|
||||
<string name="poi_bathroom_furnishing">Все для ванної кімнати</string>
|
||||
<string name="poi_bed">Все для спальні</string>
|
||||
<string name="poi_bed">Магазин постільної білизни</string>
|
||||
<string name="poi_boutique">Бутік</string>
|
||||
<string name="poi_carpet">Килими</string>
|
||||
<string name="poi_chemist">Аптека</string>
|
||||
|
@ -196,7 +196,7 @@
|
|||
<string name="poi_fuel_octane_98">А-98</string>
|
||||
<string name="poi_fuel_octane_100">А-100</string>
|
||||
<string name="poi_fuel_cng">Метан</string>
|
||||
<string name="poi_fuel_1_25">1:25 fuel</string>
|
||||
<string name="poi_fuel_1_25">Паливо 1:25</string>
|
||||
<string name="poi_fuel_ethanol">Етанол</string>
|
||||
<string name="poi_fuel_methanol">Метанол</string>
|
||||
<string name="poi_fuel_svo">Рослинне пальне(олія)</string>
|
||||
|
@ -274,4 +274,73 @@
|
|||
|
||||
<string name="poi_lighthouse">Маяк</string>
|
||||
|
||||
<string name="poi_hiking_routes">Туристичні маршрути</string>
|
||||
<string name="poi_traffic_enforcement">Контроль ПДР</string>
|
||||
<string name="poi_ferry_terminal">Причал порому</string>
|
||||
<string name="poi_aerialway_station">Станція канатної дороги</string>
|
||||
<string name="poi_aerialway_t_bar">Т-подібний підйомник</string>
|
||||
<string name="poi_aerialway_j_bar">J-подібний підйомник</string>
|
||||
<string name="poi_aerialway_mixed_lift">Підйомник замішаного типу</string>
|
||||
<string name="poi_aerialway_goods">Вантажний підйомник</string>
|
||||
<string name="poi_water_works">Водозабір</string>
|
||||
<string name="poi_wastewater_plant">Очисні споруди</string>
|
||||
<string name="poi_water_tower">Водонапірна башта</string>
|
||||
<string name="poi_lock_gate">Ворота шлюзу</string>
|
||||
<string name="poi_dam">Дамба</string>
|
||||
<string name="poi_watermill">Водяний млин</string>
|
||||
<string name="poi_breakwater">Хвилеріз</string>
|
||||
<string name="poi_power_substation">Підстанція</string>
|
||||
<string name="poi_power_transformer">Трансформатор</string>
|
||||
<string name="poi_power_cable_distribution_cabinet">Кабельна розподільна шафа</string>
|
||||
<string name="poi_power_plant">Електростанція</string>
|
||||
<string name="poi_power_generator">Електрогенератор</string>
|
||||
<string name="poi_power_tower">Опора лінії електропередач</string>
|
||||
<string name="poi_power_pole">Стовп лінії електропередач</string>
|
||||
|
||||
<string name="poi_post_office">Пошта</string>
|
||||
<string name="poi_post_box">Поштова скринька</string>
|
||||
<string name="poi_telephone">Телефон</string>
|
||||
<string name="poi_bell_tower">Дзвіниця</string>
|
||||
<string name="poi_telephone_exchange">АТС</string>
|
||||
|
||||
<string name="poi_recycling">Переробка відходів</string>
|
||||
|
||||
<string name="poi_recycling_centre">Тип: приймальний пункт</string>
|
||||
<string name="poi_recycling_container">Тип: контейнер</string>
|
||||
<string name="poi_recycling_glass">Скло</string>
|
||||
<string name="poi_recycling_paper">Папір</string>
|
||||
<string name="poi_recycling_clothes">Одежа</string>
|
||||
<string name="poi_recycling_glass_bottles">Скляні пляшки</string>
|
||||
<string name="poi_recycling_plastic">Пластик</string>
|
||||
<string name="poi_recycling_scrap_metal">Металобрухт</string>
|
||||
<string name="poi_recycling_batteries">Батарейки</string>
|
||||
<string name="poi_recycling_plastic_bottles">Пластикові пляшки</string>
|
||||
<string name="poi_recycling_waste">Сміття (чорні пакети)</string>
|
||||
<string name="poi_recycling_plastic_packaging">Пластикова тара</string>
|
||||
<string name="poi_recycling_newspaper">Газети</string>
|
||||
<string name="poi_recycling_cartons">Картон</string>
|
||||
<string name="poi_recycling_cardboard">Пакувальний картон</string>
|
||||
<string name="poi_recycling_magazines">Журнали (глянцеві)</string>
|
||||
<string name="poi_recycling_paper_packaging">Пакувальний папір</string>
|
||||
<string name="poi_recycling_small_appliances">Дрібна побутова техніка</string>
|
||||
<string name="poi_recycling_wood">Деревина</string>
|
||||
<string name="poi_recycling_books">Книги</string>
|
||||
<string name="poi_recycling_shoes">Взуття</string>
|
||||
<string name="poi_recycling_aluminium">Алюміній</string>
|
||||
<string name="poi_recycling_organic">Органіка</string>
|
||||
<string name="poi_recycling_beverage_cartons">Картоні коробки</string>
|
||||
<string name="poi_recycling_garden_waste">Садове сміття</string>
|
||||
<string name="poi_recycling_low_energy_bulbs">Енерго-зберігаючі лампи</string>
|
||||
<string name="poi_recycling_fluorescent_tubes">Люмінесцентні лампи</string>
|
||||
<string name="poi_recycling_metal">Метал</string>
|
||||
<string name="poi_recycling_electrical_items">Крупна побутова техніка</string>
|
||||
<string name="poi_recycling_cooking_oil">Олія для смаження</string>
|
||||
<string name="poi_recycling_engine_oil">Машинне мастило</string>
|
||||
<string name="poi_recycling_plastic_bags">Пластикові мішки</string>
|
||||
<string name="poi_recycling_hazardous_waste">Небезпечні відходи</string>
|
||||
<string name="poi_recycling_mobile_phones">Мобільні телефони</string>
|
||||
<string name="poi_recycling_hydrargyrum">Ртуть</string>
|
||||
<string name="poi_recycling_computers">Комп\'ютери</string>
|
||||
<string name="poi_recycling_tyres">Покришки</string>
|
||||
<string name="poi_recycling_tv_monitor">Телевізори, монітори</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?><resources>
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="asap">Швидко</string>
|
||||
|
||||
<string name="route_roundabout">Круговий рух : %1$d з’їзд</string>
|
||||
|
@ -31,20 +32,20 @@
|
|||
<string name="first_time_msg">Дякуємо вам за використання OsmAnd. Для роботи більшості основних можливостей програми потрібні детальні мапи регіонів, які можна завантажити з Інтернету за допомогою пункту меню \'Налаштування\' → \'Управління мапами\'. Після завантаження цих мап Ви зможете здійснювати пошук за адресою, POI і зупинкам громадського транспорту.</string>
|
||||
<string name="basemap_was_selected_to_download">Базова мапа необхідна для коректної роботи програми і автоматично була вибрана для завантаження.</string>
|
||||
<string name="select_index_file_to_download">Нічого не знайдено. Якщо ви не знайшли свій регіон, ви можете створити карту самостійно (див. http://osmand.net).</string>
|
||||
<string name="local_indexes_cat_tile">Онлайн мапи (растрові)</string>
|
||||
<string name="local_indexes_cat_map">Оффлайн мапи (векторні)</string>
|
||||
<string name="local_indexes_cat_tile">Онлайн та кешовані растрові мапи</string>
|
||||
<string name="local_indexes_cat_map">Стандартні мапи (векторні)</string>
|
||||
|
||||
<string name="index_settings_descr">Завантаження, перегляд деталей, та управління локальними мапами</string>
|
||||
<string name="map_online_plugin_is_not_installed">Активуйте втулок онлайн мап, щоб мати можливість вибирати різні джерела для мап</string>
|
||||
<string name="map_online_data">Онлайн мапи (растрові)</string>
|
||||
<string name="map_online_data_descr">Використовувати онлайн мапи (кешуються на SD картці)</string>
|
||||
<string name="shared_string_online_maps">Онлайн мапи</string>
|
||||
<string name="online_map_settings_descr">Налаштування онлнай або кешованих джерел (тайлів) мап</string>
|
||||
<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_background_plugin_description">Показує налаштування для навігації і запису маршрутів в енергозберігаючому режимі. Втулок працює в фоновому режимі і періодично активує GPS для запису маршруту або відтворення голосових команд.</string>
|
||||
<string name="osmand_accessibility_description">Втулок містить налаштування допоміжних можливостей. Він дозволяє налашутвати швидкість відтворення голосових підказок, налаштування спрямовування екрану під час навігації, використання трекболу для маштабування, або використання перетворення тексту в голос, скажімо, для сповіщення про ваше поточне місцезнаходження.</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>
|
||||
|
||||
|
||||
|
||||
|
@ -165,10 +166,10 @@
|
|||
<string name="index_name_europe">Європа</string>
|
||||
<string name="index_name_france">Європа - Франція</string>
|
||||
<string name="index_name_germany">Європа - Німеччина</string>
|
||||
<string name="index_name_russia">Європа/Азія - Росія</string>
|
||||
<string name="index_name_russia">Росія</string>
|
||||
<string name="index_name_africa">Африка</string>
|
||||
<string name="index_name_asia">Азія</string>
|
||||
<string name="index_name_oceania">Океанія</string>
|
||||
<string name="index_name_oceania">Австралія та Океанія</string>
|
||||
<string name="index_name_other">Мапи світу</string>
|
||||
<string name="index_name_wiki">Worldwide Wikipedia</string>
|
||||
<string name="index_name_voice">Голосові дані (запис, обмежений функціонал)</string>
|
||||
|
@ -193,7 +194,7 @@
|
|||
<string name="user_password">Пароль</string>
|
||||
<string name="user_password_descr">Потрібно для роботи з openstreetmap.org</string>
|
||||
<string name="osmand_service">Фоновий режим</string>
|
||||
<string name="osmand_service_descr">Запустити OsmAnd у фоновому режимы для запису трека і навігації</string>
|
||||
<string name="osmand_service_descr">OsmAnd працюватиме у фоновому режимі коли екран вимкнено</string>
|
||||
|
||||
|
||||
|
||||
|
@ -233,7 +234,7 @@
|
|||
<string name="file_with_name_already_exists">Файл з таким ім’ям вже існує.</string>
|
||||
<string name="gpx_navigation">GPX маршрут</string>
|
||||
<string name="poi_query_by_name_matches_categories">Деякі категорії POI відповідають запиту, можете використовувати їх для створення фільтра:</string>
|
||||
<string name="data_to_search_poi_not_available">Локальні дані для пошука POI за іменем не знайдено.</string>
|
||||
<string name="data_to_search_poi_not_available">Локальні дані для пошуку POI за іменем не знайдено.</string>
|
||||
<string name="poi_filter_by_name">Пошук за назвою</string>
|
||||
<string name="old_poi_file_should_be_deleted">Дані POI \'%1$s\' застаріли і можуть бути вилучені.</string>
|
||||
<string name="update_poi_file_not_found">Файл з POI точками не знайдено і не може бути створено.</string>
|
||||
|
@ -293,17 +294,17 @@
|
|||
|
||||
<string name="local_index_poi_data">POI дані</string>
|
||||
<string name="local_index_address_data">Адреси</string>
|
||||
<string name="local_index_transport_data">Дані громадського траснпорту</string>
|
||||
<string name="local_index_transport_data">Дані громадського транспорту</string>
|
||||
<string name="local_index_map_data">Мапа</string>
|
||||
|
||||
<string name="local_indexes_cat_backup">Деактивовані</string>
|
||||
<string name="local_indexes_cat_tts">Голосові дані (TTS)</string>
|
||||
<string name="local_indexes_cat_voice">Голосові дані (запис)</string>
|
||||
<string name="local_indexes_cat_tts">Голосові підказки (TTS)</string>
|
||||
<string name="local_indexes_cat_voice">Голосові підказки (запис)</string>
|
||||
|
||||
<string name="local_indexes_cat_poi">POI дані</string>
|
||||
<string name="ttsvoice">Голос TTS</string>
|
||||
<string name="search_offline_clear_search">Новий пошук</string>
|
||||
<string name="map_text_size_descr">Виберіть розмір шрифта для позначень на мапі</string>
|
||||
<string name="map_text_size_descr">Виберіть розмір шрифту для позначень на мапі</string>
|
||||
<string name="map_text_size">Розмір тексту</string>
|
||||
<string name="trace_rendering">Налагоджувальна інформація про рендеринг</string>
|
||||
<string name="trace_rendering_descr">Відобаражає продуктивність рендерингу</string>
|
||||
|
@ -433,7 +434,7 @@
|
|||
|
||||
<string name="build_installed">Збірка {0} успішно встановлена ({1}).</string>
|
||||
<string name="downloading_build">Завантажується збірка…</string>
|
||||
<string name="install_selected_build">Ви впевнені, що хочете встановити OsmAnd - {0} від {1} {2} MB?</string>
|
||||
<string name="install_selected_build">Ви впевнені, що хочете встановити OsmAnd - {0} з {1} {2} MB?</string>
|
||||
<string name="loading_builds_failed">Не вдалось отримати список збірок OsmAnd</string>
|
||||
<string name="loading_builds">Завантажуються збірки OsmAnd…</string>
|
||||
<string name="select_build_to_install">Виберіть одну зі збірок OsmAnd для встановлення</string>
|
||||
|
@ -445,7 +446,7 @@
|
|||
<string name="daynight_mode_night">Ніч</string>
|
||||
<string name="daynight_mode_auto">Схід/захід</string>
|
||||
<string name="daynight_mode_sensor">Датчик освітленості</string>
|
||||
<string name="daynight_descr">Виберіть режим перемиканяя денного/нічного вигляду мапи</string>
|
||||
<string name="daynight_descr">Виберіть режим перемикання денного/нічного вигляду мапи</string>
|
||||
<string name="daynight">Денний/нічний режим</string>
|
||||
<string name="download_files_question">Завантажити {0} файл(ів) ({1} MB)?</string>
|
||||
<string name="items_were_selected">Було вибрано {0}</string>
|
||||
|
@ -506,7 +507,7 @@
|
|||
<string name="shared_string_import">Імпортувати</string>
|
||||
|
||||
<string name="error_occurred_loading_gpx">Помилка при завантаженні GPX</string>
|
||||
<string name="send_report">Відпавити звіт</string>
|
||||
<string name="send_report">Відправити звіт</string>
|
||||
<string name="none_region_found">Не знайдено оффлайн мап для даного регіону на SD карті. Завантажити їх з Інтернету.</string>
|
||||
<string name="poi_namefinder_query_empty">Введіть запит для пошуку POI</string>
|
||||
<string name="any_poi">Всі</string>
|
||||
|
@ -533,19 +534,19 @@
|
|||
<string name="gps_provider">GPS</string>
|
||||
<string name="int_seconds">секунд</string>
|
||||
<string name="int_min">хв.</string>
|
||||
<string name="background_service_int_descr">Виберіть інтервал позиціонування для сервісу</string>
|
||||
<string name="background_service_int_descr">Виберіть інтервал пробудження для фонового сервісу</string>
|
||||
<string name="background_service_int">Інтервал вмикання GPS</string>
|
||||
<string name="background_service_provider_descr">Виберіть джерело позиціонування для сервісу</string>
|
||||
<string name="background_service_provider">Джерело позиціонування</string>
|
||||
<string name="background_service_provider_descr">Виберіть джерело позиціювання для фонового сервісу</string>
|
||||
<string name="background_service_provider">Джерело позиціювання</string>
|
||||
<string name="background_router_service_descr">Запускає OsmAnd у фоновому режимі для відслідковування місцерозташування при вимкненому екрані</string>
|
||||
<string name="background_router_service">Запускати у фоні</string>
|
||||
<string name="off_router_service_no_gps_available">Фоновому сервісу необхідна інформація про місцезнаходження.</string>
|
||||
<string name="background_router_service">Запустити OsmAnd у фоні</string>
|
||||
<string name="off_router_service_no_gps_available">Фоновому сервісу навігації необхідно, аби постачальник позиціювання був активним.</string>
|
||||
<string name="hide_poi_filter">Сховати фільтр</string>
|
||||
<string name="show_poi_filter">Показати фільтр</string>
|
||||
<string name="search_poi_filter">Фільтр</string>
|
||||
<string name="menu_mute_off">Звук увімкнено</string>
|
||||
<string name="menu_mute_on">Звук вимкнено</string>
|
||||
<string name="voice_provider_descr">Виберіть голосові вказівки для навіґації</string>
|
||||
<string name="voice_provider_descr">Виберіть голосові вказівки для навігації</string>
|
||||
<string name="voice_provider">Голосові дані</string>
|
||||
<string name="voice_data_initializing">Ініціалізуються голосові дані…</string>
|
||||
<string name="voice_data_not_supported">Голосові дані не підтримуються поточною версією програми</string>
|
||||
|
@ -553,7 +554,7 @@
|
|||
<string name="voice_data_unavailable">Вибрані голосові дані недоступні</string>
|
||||
|
||||
<string name="sd_unmounted">SD карта недоступна.\nВи не можете працювати з мапами.</string>
|
||||
<string name="sd_mounted_ro">SD карта доступна тільки для читання.\nВи не можете заванатажувати карти з Інтернету.</string>
|
||||
<string name="sd_mounted_ro">SD карта доступна тільки для читання.\nВи не можете завантажувати мапи з Інтернету.</string>
|
||||
<string name="unzipping_file">Файл розпаковується…</string>
|
||||
<string name="route_tr">Поверніть праворуч і рухайтесь</string>
|
||||
<string name="route_tshr">Поверніть різко праворуч і рухайтесь</string>
|
||||
|
@ -589,12 +590,12 @@
|
|||
<string name="transport">Транспорт</string>
|
||||
<string name="shared_string_ok">Гаразд</string>
|
||||
<string name="show_transport_over_map_description">Показувати зупинки громадського транспорту</string>
|
||||
<string name="show_transport_over_map">Показувати зупинки траспорта</string>
|
||||
<string name="show_transport_over_map">Показувати зупинки транспорту</string>
|
||||
<string name="hello">Навігаційна програма OsmAnd</string>
|
||||
<string name="update_poi_success">POI дані успішно оновлено ({0} об\'єктів завантажено)</string>
|
||||
<string name="update_poi_error_local">Помилка оновлення POI даних</string>
|
||||
<string name="update_poi_error_loading">Помилка завантаження даних із сервера</string>
|
||||
<string name="update_poi_no_offline_poi_index">Для цієїмісцевості відсутні локальні дані про POI</string>
|
||||
<string name="update_poi_no_offline_poi_index">Для цієї місцевості відсутні локальні дані про POI</string>
|
||||
<string name="update_poi_is_not_available_for_zoom">Оновлення POI не доступне на дрібних масштабах</string>
|
||||
<string name="context_menu_item_update_poi">Оновити POI</string>
|
||||
<string name="context_menu_item_update_map_confirm">Оновити локальні дані, завантаживши їх з Інтернету?</string>
|
||||
|
@ -611,11 +612,11 @@
|
|||
<string name="searching">Пошук…</string>
|
||||
<string name="searching_address">Пошук адреси…</string>
|
||||
<string name="search_osm_nominatim">Пошук адреси в OSM Nominatim</string>
|
||||
<string name="hint_search_online">Онлай пошук: Номер будинку, вулиця, місто</string>
|
||||
<string name="hint_search_online">Онлайн пошук: Номер будинку, вулиця, місто</string>
|
||||
<string name="search_offline_address">Оффлайн пошук</string>
|
||||
<string name="search_online_address">Інтернет</string>
|
||||
<string name="max_level_download_tile">Макс. рівень деталізації</string>
|
||||
<string name="max_level_download_tile_descr">Веберіть максимальний рівень деталізації для завантаження з Інтернету</string>
|
||||
<string name="max_level_download_tile_descr">Виберіть максимальний рівень деталізації для завантаження з Інтернету</string>
|
||||
<string name="route_general_information">Загальна відстань %1$s, час в дорозі %2$d г %3$d хв.</string>
|
||||
<string name="router_service_descr">Виберіть сервіс для прокладання маршруту</string>
|
||||
<string name="router_service">Прокладання маршруту</string>
|
||||
|
@ -684,10 +685,10 @@
|
|||
<string name="shared_string_settings">Налаштування</string>
|
||||
<string name="save_current_track_descr">Зберегти активний трек на SD</string>
|
||||
<string name="save_current_track">Зберегти активний GPX трек</string>
|
||||
<string name="save_track_interval">Інтервал збереження під час навіґації</string>
|
||||
<string name="save_track_interval_descr">Вказати інтервал збереження точок треку під час навіґації</string>
|
||||
<string name="save_track_to_gpx_descrp">Треки будуть збережені в теку для треків під час навіґації</string>
|
||||
<string name="save_track_to_gpx">Записувати трек у файл GPX під час навіґації</string>
|
||||
<string name="save_track_interval">Інтервал збереження під час навігації</string>
|
||||
<string name="save_track_interval_descr">Вказати інтервал збереження точок треку під час навігації</string>
|
||||
<string name="save_track_to_gpx_descrp">Треки будуть збережені в теку для треків під час навігації</string>
|
||||
<string name="save_track_to_gpx">Записувати трек у файл GPX під час навігації</string>
|
||||
<string name="update_tile">Оновити мапу</string>
|
||||
<string name="reload_tile">Оновити частину мапи</string>
|
||||
<string name="mark_point">Точка</string>
|
||||
|
@ -837,7 +838,7 @@
|
|||
<string name="osmand_parking_am">AM</string>
|
||||
<string name="osmand_parking_position_name">Місце паркування</string>
|
||||
<string name="osmand_parking_plugin_description">Втулок “Місце стоянки” дозволить вам запам’ятати, коли ви поставили автівку на стоянку та скільки часу залишилось, якщо стоянка обмежена часом.
|
||||
\n\nВи можете знайти місце стоянки та час на панелі керування та на віповідному віджеті на мапі. Також він додає нагадування в календар, якщо ви бажаєте отримати нагадування.</string>
|
||||
\n\nВи можете знайти місце стоянки та час на панелі керування та на відповідному віджеті на мапі. Також він додає нагадування в календар, якщо ви бажаєте отримати нагадування.</string>
|
||||
<string name="osmand_parking_plugin_name">Місце стоянки</string>
|
||||
<string name="context_menu_item_add_parking_point">Відмітити місце паркування</string>
|
||||
<string name="context_menu_item_delete_parking_point">Вилучити маркер місця стоянки</string>
|
||||
|
@ -852,7 +853,7 @@
|
|||
<string name="select_animate_speedup">Вкажіть швидкість анімації маршруту</string>
|
||||
<string name="osmand_parking_hours">Годин</string>
|
||||
<string name="osmand_parking_minutes">Хвилин</string>
|
||||
<string name="osmand_parking_position_description_add_time">Автомобіль припарковано о:</string>
|
||||
<string name="osmand_parking_position_description_add_time">Автомобіль припарковано о</string>
|
||||
<string name="use_compass_navigation_descr">Використовувати навігацію за компасом, коли напрямок не визначений</string>
|
||||
<string name="use_compass_navigation">Використовувати компас</string>
|
||||
<string name="route_updated_loc_found">Маршрут буде обраховано після визначення місцерозташування</string>
|
||||
|
@ -862,7 +863,7 @@
|
|||
|
||||
<string name="show_cameras">Відображати камери контролю швидкості</string>
|
||||
<string name="show_traffic_warnings">Показувати обмеження швидкості</string>
|
||||
<string name="avoid_toll_roads">Уникати платних доріг</string>
|
||||
<string name="avoid_toll_roads">Платні дороги</string>
|
||||
|
||||
<string name="map_widget_top_text">Назва вулиці</string>
|
||||
<string name="map_widget_config">Налаштування</string>
|
||||
|
@ -889,7 +890,7 @@
|
|||
<string name="bg_service_interval">Встановити інтервал пробудження:</string>
|
||||
<string name="screen_is_locked">Для розблокування екрану доторкніться до іконки блокування</string>
|
||||
<string name="bg_service_screen_unlock">Розблокувати екран</string>
|
||||
<string name="bg_service_sleep_mode_off">Увімкнути\nфоновий режим</string>
|
||||
<string name="bg_service_sleep_mode_off">Запустити\n додаток у фоновому режимі</string>
|
||||
<string name="bg_service_sleep_mode_on">Вимкнути\nфоновий режим</string>
|
||||
<string name="access_arrival_time">Час прибуття</string>
|
||||
<string name="item_unchecked">не відмічено</string>
|
||||
|
@ -902,11 +903,11 @@
|
|||
<string name="max_speed_none">немає</string>
|
||||
<string name="index_name_openmaps">OpenMaps - Європа</string>
|
||||
|
||||
<string name="download_hillshade_maps">Шари з рельєфом</string>
|
||||
<string name="download_hillshade_maps">Затемнення рельєфу</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="recording_context_menu_show">Показати</string>
|
||||
<string name="recording_photo_description">Фото %1$s %2$s</string>
|
||||
<string name="av_def_action_picture">Сфотографувати</string>
|
||||
|
@ -915,7 +916,7 @@
|
|||
<string name="dropbox_plugin_name">Втулок Dropbox</string>
|
||||
|
||||
<string name="intermediate_points_change_order">Змінити порядок</string>
|
||||
<string name="srtm_paid_version_msg">Розгляньте будь ласка можливість придбання втулку «Ізолінії висот» на Маркеті, це підтримає його подальшу розробку.</string>
|
||||
<string name="srtm_paid_version_msg">Розгляньте, будь ласка, можливість придбання втулку «Ізолінії висот» на Маркеті, це підтримає його подальшу розробку.</string>
|
||||
<string name="srtm_paid_version_title">Втулок Ізолінії висот</string>
|
||||
<string name="av_def_action_video">Запис відео</string>
|
||||
<string name="av_def_action_audio">Запис аудіо</string>
|
||||
|
@ -956,7 +957,7 @@
|
|||
<string name="recording_delete_confirm">Ви хочете вилучити даний запис?</string>
|
||||
|
||||
<string name="recording_description">Запис %1$s %3$s %2$s</string>
|
||||
<string name="osmand_srtm_long_description_1000_chars">"Цей втулок показує як ізолінії висот так і рель’єф на мапах OsmAnd. Ці можливості стануть в нагоді для спортсменів, туристів, мандрівників та для будь-кого, хто цікавиться структурою рель’єфу місцевості.\n\nГлобальні дані (між 70 градусами на півночі і 70 градусами на півдні) базуються на вимірюваннях SRTM (Shuttle Radar Topography Mission) і ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), даних інструменту візуалізації Terra, флагманського супутника системи спостереження Землі від NASA. ASTER — це результат спільної роботи NASA, міністерства економіки Японії, міністерства торгівлі і промисловості Японії (METI), агенції космічних систем Японії (J-spacesystems). "</string>
|
||||
<string name="osmand_srtm_long_description_1000_chars">"Цей втулок показує як ізолінії висот так і рельєф на стандартних мапах OsmAnd. Ці можливості стануть в нагоді для спортсменів, туристів, мандрівників та для будь-кого, хто цікавиться структурою рельєфу місцевості.\n\nГлобальні дані (між 70 градусами на півночі і 70 градусами на півдні) базуються на вимірюваннях SRTM (Shuttle Radar Topography Mission) і ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), даних інструменту візуалізації Terra, флагманського супутника системи спостереження Землі від NASA. ASTER — це результат спільної роботи NASA, міністерства економіки Японії, міністерства торгівлі і промисловості Японії (METI), агенції космічних систем Японії (J-spacesystems). "</string>
|
||||
|
||||
|
||||
<string name="map_widget_distancemeasurement">Вимірювання відстаней</string>
|
||||
|
@ -965,12 +966,12 @@
|
|||
<string name="audionotes_plugin_name">Аудіо/відео замітки</string>
|
||||
<string name="index_srtm_parts">частин</string>
|
||||
<string name="index_srtm_ele">Ізолінії висот</string>
|
||||
<string name="srtm_plugin_description">"Цей втулок показує як ізолінії висот так і рель’єф на мапах OsmAnd. Ці можливості стануть в нагоді для спортсменів, туристів, мандрівників та для будь-кого, хто цікавиться структурою рель’єфу місцевості.\n\nГлобальні дані (між 70 градусами на півночі і 70 градусами на півдні) базуються на вимірюваннях SRTM (Shuttle Radar Topography Mission) і ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), даних інструменту візуалізації Terra, флагманського супутника системи спостереження Землі від NASA. ASTER — це результат спільної роботи NASA, міністерства економіки Японії, міністерства торгівлі і промисловості Японії (METI), агенції космічних систем Японії (J-spacesystems). "</string>
|
||||
<string name="srtm_plugin_description">"Цей втулок показує як ізолінії висот так і рельєф на стандартних мапах OsmAnd. Ці можливості стануть в нагоді для спортсменів, туристів, мандрівників та для будь-кого, хто цікавиться структурою рельєфу місцевості.\n\nГлобальні дані (між 70 градусами на півночі і 70 градусами на півдні) базуються на вимірюваннях SRTM (Shuttle Radar Topography Mission) і ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), даних інструменту візуалізації Terra, флагманського супутника системи спостереження Землі від NASA. ASTER — це результат спільної роботи NASA, міністерства економіки Японії, міністерства торгівлі і промисловості Японії (METI), агенції космічних систем Японії (J-spacesystems). "</string>
|
||||
<string name="srtm_plugin_name">Ізолінії висот</string>
|
||||
<string name="download_select_map_types">Інші мапи</string>
|
||||
<string name="download_roads_only_item">Тільки дороги</string>
|
||||
<string name="download_srtm_maps">Ізолінії висот</string>
|
||||
<string name="download_roads_only_maps">Мапи тільки з дорогами</string>
|
||||
<string name="download_roads_only_maps">Мапа лише з дорогами</string>
|
||||
|
||||
<string name="rendering_attr_noAdminboundaries_name">Приховати кордони</string>
|
||||
|
||||
|
@ -1000,19 +1001,19 @@
|
|||
<string name="gps_not_available">Ввімкнути GPS в налаштуваннях</string>
|
||||
<string name="map_widget_monitoring_services">Служби моніторингу</string>
|
||||
<string name="no_route">Відмінити</string>
|
||||
<string name="delete_target_point">Вилучити точку маршруту</string>
|
||||
<string name="delete_target_point">Вилучити точку призначення</string>
|
||||
<string name="target_point">Пункт призначення %1$s</string>
|
||||
<string name="intermediate_point">Точка %1$s</string>
|
||||
<string name="context_menu_item_last_intermediate_point">Кінцевий пункт призначення</string>
|
||||
<string name="intermediate_point">Пункт призначення %1$s</string>
|
||||
<string name="context_menu_item_last_intermediate_point">Додати як останню проміжну точку</string>
|
||||
<string name="context_menu_item_first_intermediate_point">Додати як першу проміжну точку</string>
|
||||
<string name="add_as_last_destination_point">Додати як останню точку</string>
|
||||
<string name="add_as_last_destination_point">Додати як останню проміжну точку</string>
|
||||
<string name="add_as_first_destination_point">Додати як першу проміжну точку</string>
|
||||
<string name="replace_destination_point">Замінити пункт призначення</string>
|
||||
<string name="new_destination_point_dialog">Ви вже встановили пункт призначення.</string>
|
||||
<string name="target_points">Точки призначення</string>
|
||||
<string name="intermediate_point_too_far">Точка %1$s занадто далеко від найближчої дороги.</string>
|
||||
<string name="intermediate_point_too_far">Проміжна точка %1$s занадто далека від найближчої дороги.</string>
|
||||
<string name="arrived_at_intermediate_point">Ви вже досягнули проміжної точки</string>
|
||||
<string name="context_menu_item_intermediate_point">Додати проміжну точку</string>
|
||||
<string name="context_menu_item_intermediate_point">Додати як проміжну точку</string>
|
||||
<string name="ending_point_too_far">Початок маршруту занадто далеко від найближчої дороги.</string>
|
||||
<string name="add_tag">Додати мітку</string>
|
||||
<string name="btn_advanced_mode">Розширений режим…</string>
|
||||
|
@ -1027,9 +1028,9 @@
|
|||
|
||||
|
||||
<string name="non_optimal_route_calculation">Швидка побудова маршруту (можливо неоптимальна)</string>
|
||||
<string name="show_warnings_descr">Налаштування показу попереджень (обмеження швидкості, примусові зупинки, пристрої обмеження швикості), камер контролю швикодсті і інформації руху по смугах</string>
|
||||
<string name="show_warnings_descr">Налаштування показу попереджень (обмеження швидкості, примусові зупинки, пристрої обмеження швидкості), камер контролю швидкості і інформації руху по смугах</string>
|
||||
<string name="avoid_motorway">Уникати автомагістралей</string>
|
||||
<string name="snap_to_road_descr">Прив’язати поточну позицію до дороги під час навіґації</string>
|
||||
<string name="snap_to_road_descr">Прив’язати поточну позицію до дороги під час навігації</string>
|
||||
<string name="snap_to_road">Прив’язати до дороги</string>
|
||||
<string name="osmand_short_description_80_chars">Перегляд та навігація в автономному та онлайн режимах мапами ОСМ</string>
|
||||
<string name="osmand_plus_short_description_80_chars">Перегляд та навігація в автономному на онлайн режимах мапами ОСМ</string>
|
||||
|
@ -1060,7 +1061,7 @@
|
|||
<string name="gps_wakeup_interval">Інтервал пробудження GPS: %s</string>
|
||||
<string name="int_continuosly">Безперервно</string>
|
||||
<string name="map_widget_view_direction">Напрямок</string>
|
||||
<string name="support_new_features_descr">Пожертвувати, для реалізації нових можливостей в аплцікації</string>
|
||||
<string name="support_new_features_descr">Пожертвувати, для реалізації нових можливостей в додатку</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="map_widget_gps_info">GPS дані</string>
|
||||
<string name="layer_recordings">Аудіо записи</string>
|
||||
|
@ -1071,7 +1072,7 @@
|
|||
<string name="layer_hillshade">Шар рельєфа місцевості</string>
|
||||
|
||||
|
||||
<string name="download_regular_maps">Повні мапи</string>
|
||||
<string name="download_regular_maps">Стандартна мапа</string>
|
||||
|
||||
<string name="osmand_long_description_1000_chars">" OsmAnd (OSM Automated Navigation Directions) OsmAnd — навігаційне програмне забезпечення з відкритим кодом з доступом до різноманітних картографічних даних від OpenStreetMap (OSM). Всі картографічні дані (векторні та растрові) можуть бути збережені на карті пам’яті для подальшого автономного використання. OsmAnd також пропонує можливість прокладання маршруту як оффлайн, так і використовуючи онлайн-сервіси з покроковим голосовим супроводженням. Кілька основних можливостей: - Повноцінна робота без інтернет-з’єднання(просто збережіть векторні чи растрові дані на пристрій), - Компактна векторна мапа всього світу, - Завантаження мап країн чи регіону безпосередньо в програмі, - Можливість показу додаткових даних на мапі, наприклад шар для прокладання маршруту чи шар із записом GPX-треку, з POI, закладками, ізолініями висот, громадським транспортом, додатковими мапами з можливістю налаштовування рівня прозорості, - Автономний пошук адрес та POI, - Прокладання маршрутів оффлайн на короткі відстані (експериментальна функція), - Режими для пішохідної, автомобільної та велонавігації: - можливість перемикання на денний/нічний режим показу мапи, - автомасштабування мапи відповідно до швидкості руху, - можливість орієнтації мапи за компасом чи напрямком руху, - показ руху по смугах та обмежень швидкості, запис та голосове супроводження. Обмеження безкоштовної версії: - кількість завантажених мап є обмеженою, - відсутній оффлайн доступ до інформації з Вікіпедії для POI. OsmAnd активно розвивається, його подальший розвиток забезпечується фінансовими надходженнями від його користувачів, за рахунок якої відбувається подальша розробка та впровадження нових функцій. Якщо вам подобається OsmAnd, розгляньте можливість придбання OsmAnd+ чи підтримайте впровадження нових функцій, або зробіть благодійний внесок на osmand.net. "</string>
|
||||
<string name="osmand_extended_description_4000_chars">
|
||||
|
@ -1150,7 +1151,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
|
||||
|
||||
|
||||
<string name="street_name">Вулиця</string>
|
||||
<string name="street_name">Назва вулиці</string>
|
||||
<string name="hno">Номер будинку</string>
|
||||
|
||||
<string name="choose_osmand_theme_descr">Виберіть тему програми</string>
|
||||
|
@ -1158,7 +1159,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="select_address_activity">Виберіть адресу</string>
|
||||
<string name="favourites_list_activity">Виберіть закладку</string>
|
||||
<string name="shared_string_more_actions">Інші дії</string>
|
||||
<string name="use_kalman_filter_compass_descr">Зменьшує «шум» компасу, але додає инерцию</string>
|
||||
<string name="use_kalman_filter_compass_descr">Зменшує «шум» компасу, але додає інерцію</string>
|
||||
<string name="use_kalman_filter_compass">Використовувати фільтр Калмана</string>
|
||||
<string name="other_location">Інше</string>
|
||||
<string name="files_limit">залишилось %1$d файлів</string>
|
||||
|
@ -1197,7 +1198,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="local_osm_changes_backup_successful">Файл змін OSM успішно створений в %1$s</string>
|
||||
<string name="osmand_distance_planning_plugin_name">Інструмент підрахунку відстані і планування</string>
|
||||
<string name="please_select_address">Виберіть місто або вулицю</string>
|
||||
<string name="osmand_distance_planning_plugin_description">Цей втулок актівує віджет для створення маршрутів натисканням на мапі (чи використати існуючий GPX-файл) для підрахунку відстані між точками. Результат може бути збережений як GPX для подальшого використання.</string>
|
||||
<string name="osmand_distance_planning_plugin_description">Цей втулок активує віджет для створення маршрутів натисканням на мапі (чи використати наявний GPX-файл) для підрахунку відстані між точками. Результат може бути збережений як GPX для подальшого використання.</string>
|
||||
<string name="distance_measurement_finish_subtrack">Виміряти нову ділянку</string>
|
||||
|
||||
<string name="osmand_plus_extended_description_4000_chars">
|
||||
|
@ -1271,7 +1272,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
Перелік підтримуваних країн (взагалі то увесь світ!):
|
||||
Афганістан, Австралія, Австрія, Азербайджан, Албанія, Алжир, Ангілья, Ангола, Андорра, Антигуа і Барбуда, Аргентина, Аруба, Багамські острови, Бангладеш, Барбадос, Бахрейн, Беліз, Бельгія, Бенін, Бермудські острови, Білорусь, Болгарія, Болівія, Бонайре, Боснія і Герцеговина, Ботсвана, Бразилія, Британські Віргінські острови, Бруней, Буркіна-Фасо, Бурунді, Бутан, В’єтнам, Вануату, Ватикан, Венесуела, Вірменія, Габон, Гаїті, Гайана, Гамбія, Гана, Гваделупа, Гватемала, Гвінея, Гвінея-Бісау, Гернсі, Гібралтар, Гондурас, Гонконг, Гренада, Гренландія, Греція, Грузія, Гуам, Данія, Джерсі, Джібуті, Домініка, Домініканська Республіка, Еквадор, Екваторіальна Гвінея, Еритрея, Естонія, Ефіопія, Єгипет, Ємен, Замбія, Західна Сахара,, Зімбабве., Ізраїль, Індія , Індонезія, Ірак, Іран, Ірландія, Ісландія, Іспанія, Італія, Йорданія, Кабо-Верде, Казахстан, Камбоджа, Камерун, Канада, Катар, Кенія, Киргизстан, Китай, Кіпр, Кірибаті, Колумбія, Коморські Острови, Конго, Коста-Ріка , Кот-д’Івуар, Куба, Кувейт, Кюрасао, Лаос, Латвія, Лесото, Литва, Ліберія , Ліван, Лівія, Ліхтенштейн, Люксембург, М’янма, Маврикій, Мавританія, Мадагаскар, Майотта, Макао, Македонія, Малаві, Малайзія, Малі, Мальдіви, Мальта, Марокко, Мартініка, Мексика, Мікронезія, Мозамбік , Молдова, Монако, Монголія, Монтсеррат, Намібія, Науру, Непал, Нігер, Нігерія, Нідерланди, Нідерландські Антильські острови, Нікарагуа, Німеччина, Нова Зеландія, Нова Каледонія, Норвегія, Об’єднані Арабські Емірати, Оман, острів Мен, Острів Святої Єлени, Пакистан, Палау, Палестина, Панама, Папуа Нова Гвінея, Парагвай, Перу, Південна Африка, Південна Грузія, Південний Судан, Північна Корея і Південна Корея, Польща , Португалія, Пуерто-Ріко, Росія, Руанда, Румунія, Сальвадор, Самоа, Сан-Марино, Саудівська Аравія, Свазіленд, Сейшельські острови, Сен-Мартен, Сен-П’єр і Мікелон, Сенегал, Сент-Бартелемі, Сент-Вінсент і Гренадини, Сент-Кітс і Невіс, Сент-Люсія, Сербія, Сирія, Сінгапур, Словаччина, Словенія, Сомалі, Сполучене Королівство (Великобританія), Сполучені Штати Америки (США), Судан, Сурінам, Сьєрра-Леоне, Таджикистан, Таїланд , Тайвань, Танзанія, Тимор-Лешті, Того, Токелау, Тонга, Тринідад і Тобаго, Тувалу, Туніс, Туреччина, Туркменістан, Уганда, Угорщина, Узбекистан, Україна, Уолліс і Футуна, Уругвай, Фіджі, Філіппіни, Фінляндія, Франція, Французька Гвіана, Французька Полінезія, Хорватія, Центрально-Африканська Республіка, Чад, Чеська Республіка, Чилі, Чорногорія, Швейцарія, Швеція, Шрі-Ланка, Ямайка, Японія.
|
||||
</string>
|
||||
<string name="local_indexes_cat_srtm">Дані ізоліній висот</string>
|
||||
<string name="local_indexes_cat_srtm">Ізоліній висот</string>
|
||||
<string name="context_menu_item_destination_point">Встановити як пункт призначення</string>
|
||||
<string name="local_osm_changes_backup_failed">Збій резервного копіювання файлу змін OSM</string>
|
||||
<string name="local_osm_changes_backup">Резервне копіювання файлу змін OSM</string>
|
||||
|
@ -1298,9 +1299,9 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="osmand_net_previously_installed">У вас встановлена попередня версія OsmAnd. Всі локальні дані підтримуються новою версією. Але збережені точки потрібно експортувати з попередньої версії і імпортувати в нову.</string>
|
||||
|
||||
|
||||
<string name="speak_speed_limit">Попереджати про обмеження швидкості</string>
|
||||
<string name="speak_cameras">Попереджати про камери фіксації швидкості</string>
|
||||
<string name="speak_traffic_warnings">Попереджати про перешкоди на шляху</string>
|
||||
<string name="speak_speed_limit">Обмеження швидкості</string>
|
||||
<string name="speak_cameras">Камери фіксації швидкості</string>
|
||||
<string name="speak_traffic_warnings">Перешкоди на шляху</string>
|
||||
|
||||
<string name="route_descr_map_location">Мапа: </string>
|
||||
<string name="osb_author_or_password_not_specified">Введіть OSM логін і пароль в налаштуваннях</string>
|
||||
|
@ -1309,10 +1310,10 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="context_menu_item_directions_to">Маршрут до</string>
|
||||
<string name="context_menu_item_directions_from">Маршрут від</string>
|
||||
<string name="route_to">До:</string>
|
||||
<string name="announce_gpx_waypoints">Попереджати про маршрутні точки GPX</string>
|
||||
<string name="announce_gpx_waypoints">Маршрутні точки GPX</string>
|
||||
<string name="speak_title">Попереджати…</string>
|
||||
<string name="speak_descr">Увімкніть оголошення назв вулиць, дорожніх обмежень (примусових зупинок, лежачих поліцейських); повідомленя про камери фіксації швидкості, про обмеження швидкості</string>
|
||||
<string name="speak_street_names">Оголошувати назви вулиць (TTS)</string>
|
||||
<string name="speak_street_names">Назви вулиць (TTS)</string>
|
||||
|
||||
<string name="keep_intermediate_points">Лишити проміжні точки</string>
|
||||
<string name="route_via">Через:</string>
|
||||
|
@ -1349,7 +1350,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="edit_tilesource_expiration_time">Термін дії (в хвилинах)</string>
|
||||
<string name="edit_tilesource_minzoom">Мін.масштаб</string>
|
||||
<string name="edit_tilesource_url_to_load">URL</string>
|
||||
<string name="edit_tilesource_choose_existing">Виберіть існуючий…</string>
|
||||
<string name="edit_tilesource_choose_existing">Виберіть наявний…</string>
|
||||
<string name="edit_tilesource_name">Назва</string>
|
||||
<string name="maps_define_edit">Визначити/змінити…</string>
|
||||
|
||||
|
@ -1364,7 +1365,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="osmo_connect_to_device_name">Ім’я пристрою</string>
|
||||
<string name="osmo_create_group">Створити групу</string>
|
||||
<string name="osmo_connect">Приєднатись до</string>
|
||||
<string name="osmo_enable_tracker">Надіслати моє місцезнаходження</string>
|
||||
<string name="osmo_enable_tracker">Надіслати мої місцезнаходження</string>
|
||||
<string name="hours_ago">годин тому</string>
|
||||
<string name="minutes_ago">хвилин тому</string>
|
||||
<string name="seconds_ago">секунд тому</string>
|
||||
|
@ -1378,7 +1379,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="osmo_server_operation_failed">OsMo Server збій виконання операції</string>
|
||||
<string name="osmo_activity">OpenStreetMap Моніторинг</string>
|
||||
<string name="osmo_control">OsMo швидкий доступ</string>
|
||||
<string name="gpx_file_is_empty">Трек Gpx порожній</string>
|
||||
<string name="gpx_file_is_empty">Трек GPX порожній</string>
|
||||
|
||||
<string name="shared_string_my_tracks">Всі треки</string>
|
||||
<string name="shared_string_my_favorites">Мої Закладки</string>
|
||||
|
@ -1398,7 +1399,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="osmo_center_location">По центру екрану</string>
|
||||
<string name="osmo_set_moving_target">Почати стеження</string>
|
||||
<string name="osmo_use_server_name">Зареєстроване ім’я</string>
|
||||
<string name="osmo_connect_to_my_nickname">Моє призьвісько</string>
|
||||
<string name="osmo_connect_to_my_nickname">Моє прізвисько</string>
|
||||
<string name="osmo_user_name">Користувач</string>
|
||||
|
||||
<string name="rendering_value_pink_name">рожевий</string>
|
||||
|
@ -1414,7 +1415,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="osmo_group">Група OsMo</string>
|
||||
<string name="keep_navigation_service">Продовжувати</string>
|
||||
<string name="stop_navigation_service">Зупинити</string>
|
||||
<string name="enable_sleep_mode">Ввімкнути режим сну GPS</string>
|
||||
<string name="enable_sleep_mode">Ввімкнути фоновий режим GPS</string>
|
||||
<string name="gps_wake_up_timer">Інтервал вмикання GPS</string>
|
||||
<string name="sleep_mode_stop_dialog">Зупинити фоновий режим GPS?</string>
|
||||
<string name="map_preferred_locale_descr">Бажана мова для етикеток на мапі (якщо вона недоступна будуть показані позначки англійською чи місцевою мовами)</string>
|
||||
|
@ -1423,7 +1424,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="lang_sw">Суахілі</string>
|
||||
<string name="lang_he">Іврит</string>
|
||||
<string name="forward">Вперед</string>
|
||||
<string name="home">На початок</string>
|
||||
<string name="home">Домашня сторінка</string>
|
||||
<string name="live_monitoring_m_descr">Надсилати дані для відстежування до вказаної веб-служби, якщо увімкнено логування GPX.</string>
|
||||
<string name="live_monitoring_m">Онлайн моніторинг (потрібен GPX)</string>
|
||||
<string name="live_monitoring_start">Розпочати моніторинг</string>
|
||||
|
@ -1465,7 +1466,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="show_zoom_buttons_navigation_descr">Показувати кнопки зміни масштабу під час навігації</string>
|
||||
<string name="show_zoom_buttons_navigation">Показувати кнопки зміни масштабу</string>
|
||||
<string name="save_as_favorites_points">Зберегти як групу закладок</string>
|
||||
<string name="select_destination_and_intermediate_points">Виділити маршрутні точки</string>
|
||||
<string name="select_destination_and_intermediate_points">Виберіть призначення</string>
|
||||
<string name="layer_amenity_label">Мітки точок</string>
|
||||
<string name="loading_smth">Завантаження %1$s…</string>
|
||||
<string name="map_widget_plain_time">Поточний час</string>
|
||||
|
@ -1603,13 +1604,13 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="routing_attr_prefer_motorway_name">Надавати перевагу автомагістралям</string>
|
||||
<string name="routing_attr_prefer_motorway_description">Надавати перевагу автомагістралям</string>
|
||||
<string name="routing_attr_short_way_name">Найкоротший шлях</string>
|
||||
<string name="routing_attr_short_way_description">Використоввати короткий шлях</string>
|
||||
<string name="routing_attr_short_way_description">Використовувати короткий шлях</string>
|
||||
<string name="routing_attr_avoid_toll_name">Уникати платних доріг</string>
|
||||
<string name="routing_attr_avoid_toll_description">Уникати платних доріг</string>
|
||||
<string name="routing_attr_avoid_unpaved_name">Уникати грунтових доріг</string>
|
||||
<string name="routing_attr_avoid_unpaved_description">Уникати грунтових доріг</string>
|
||||
<string name="routing_attr_avoid_ferries_name">Уникати пароми</string>
|
||||
<string name="routing_attr_avoid_ferries_description">Уникати пароми</string>
|
||||
<string name="routing_attr_avoid_unpaved_name">Уникати ґрунтових доріг</string>
|
||||
<string name="routing_attr_avoid_unpaved_description">Уникати ґрунтових доріг</string>
|
||||
<string name="routing_attr_avoid_ferries_name">Уникати пороми</string>
|
||||
<string name="routing_attr_avoid_ferries_description">Уникати пороми</string>
|
||||
<string name="routing_attr_avoid_motorway_name">Уникати автомагістралі</string>
|
||||
<string name="routing_attr_avoid_motorway_description">Уникати автомагістралі</string>
|
||||
<string name="routing_attr_weight_name">Максимальна вага</string>
|
||||
|
@ -1621,7 +1622,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="copying_osmand_one_file_descr">Файл (%s) копіюється на нове місце…</string>
|
||||
<string name="copying_osmand_files_descr">Копіювання файлів даних OsmAnd до нового місця (%s)…</string>
|
||||
<string name="copying_osmand_files">Копіювання файлів даних OsmAnd…</string>
|
||||
<string name="calculate_osmand_route_gpx">Розрахувати офлайн маршрут в OsmAnd</string>
|
||||
<string name="calculate_osmand_route_gpx">Розрахувати оффлайн маршрут в OsmAnd</string>
|
||||
<string name="app_mode_truck">Вантажівка</string>
|
||||
<string name="guidance_preferences_descr">Налаштування навігації</string>
|
||||
<string name="routing_preferences_descr">Налаштування маршрутизації</string>
|
||||
|
@ -1701,22 +1702,22 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="rendering_value_car_name">Автівка</string>
|
||||
<string name="rendering_value_bicycle_name">Велосипед</string>
|
||||
<string name="rendering_value_pedestrian_name">Пішохід</string>
|
||||
<string name="record_plugin_description">"Цей плагін активує можливість записувати та зберігати ваші треки вручну, торкаючись віджету логування GPX на екрані мапи, або автоматично записувати всі ваші подорожі у файл GPX.\n\nЗаписаними треками можна поділитись з вашими друзями або іншими учасниками спільноти OSM. Атлети можуть використовувати записані треки для відстежування власних тренувань. Базовий аналіз треків наявний безпосередньо в OsmAnd, наприклад: час проходження кола, середня швидкість й т.д., звісно, записані треки можна також проаналізувати за допомогою іншого програмного забезпечння. "</string>
|
||||
<string name="record_plugin_description">"Цей втулок активує можливість записувати та зберігати ваші треки вручну, торкаючись віджету логування GPX на екрані мапи, або автоматично записувати всі ваші подорожі у файл GPX.\n\nЗаписаними треками можна поділитись з вашими друзями або іншими учасниками спільноти OSM. Атлети можуть використовувати записані треки для відстежування власних тренувань. Базовий аналіз треків наявний безпосередньо в OsmAnd, наприклад: час проходження кола, середня швидкість й т.д., звісно, записані треки можна також проаналізувати за допомогою іншого програмного забезпечення. "</string>
|
||||
<string name="save_track_to_gpx_globally">Писати трек у файл GPX</string>
|
||||
<string name="save_track_to_gpx_globally_descr">Загальний запис місцезнаходження в файл GPX можна ввімкнути або вимкнути кнопкою логування GPX на екрані з мапою</string>
|
||||
<string name="save_track_interval_globally">Інтервал записування</string>
|
||||
<string name="rendering_attr_publicTransportMode_name">Маршрути автобусів, тролейбусів та шатлів</string>
|
||||
<string name="record_plugin_name">Запис подорожей</string>
|
||||
<string name="int_hour">г</string>
|
||||
<string name="duration">Тривалісьть</string>
|
||||
<string name="duration">Тривалість</string>
|
||||
<string name="distance">Віддаль</string>
|
||||
<string name="index_tours">Подорожі</string>
|
||||
<string name="shared_string_all">Усі</string>
|
||||
<string name="waypoints">Путьові точки</string>
|
||||
<string name="targets">Цілі</string>
|
||||
<string name="way_alarms">Перешкоди</string>
|
||||
<string name="speak_favorites">Оголошувати закладки, що є поруч</string>
|
||||
<string name="speak_poi">Оголошувати POI, що є поруч</string>
|
||||
<string name="speak_favorites">Закладки, що є поруч</string>
|
||||
<string name="speak_poi">POI, що є поруч</string>
|
||||
<string name="confirm_every_run">Завжди питати</string>
|
||||
<string name="save_global_track_interval_descr">Оберіть інтервал періодичності запису треку (вмикається через віджет логування GPX)</string>
|
||||
<string name="save_global_track_interval">Загальний інтервал запису</string>
|
||||
|
@ -1738,7 +1739,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="impassable_road">Уникати дороги…</string>
|
||||
|
||||
<string name="rendering_attr_trainLightrailRoutes_name">Маршрути поїздів</string>
|
||||
<string name="rendering_attr_tramRoutes_name">Маршрути трамваїів</string>
|
||||
<string name="rendering_attr_tramRoutes_name">Маршрути трамваїв</string>
|
||||
<string name="rendering_attr_shareTaxiRoutes_name">Маршрутне таксі</string>
|
||||
<string name="rendering_attr_trolleybusRoutes_name">Маршрути тролейбусів</string>
|
||||
<string name="rendering_attr_busRoutes_name">Маршрути автобусів</string>
|
||||
|
@ -1797,8 +1798,8 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="device_memory">Пам’ять пристрою</string>
|
||||
<string name="plugin_ski_name">Лижні мапи</string>
|
||||
<string name="plugin_nautical_name">Морські мапи</string>
|
||||
<string name="world_ski_missing">Для показу лижних мап, потріно завантажити спеціалізовані мапи</string>
|
||||
<string name="nautical_maps_missing">Для показу морських мап, потріно завантажити спеціалізовані мапи</string>
|
||||
<string name="world_ski_missing">Для показу лижних мап, потрібно завантажити спеціалізовані мапи</string>
|
||||
<string name="nautical_maps_missing">Для показу морських мап, потрібно завантажити спеціалізовані мапи</string>
|
||||
<string name="edit_group">Редагувати групу</string>
|
||||
<string name="parking_place">Місце для стоянки</string>
|
||||
<string name="remove_the_tag">ВИЛУЧИТИ ТЕҐ</string>
|
||||
|
@ -1817,7 +1818,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="navigation_over_track">Почати навігацію по треку?</string>
|
||||
<string name="avoid_roads_msg">Ви можете вибрати альтернативний маршрут, вибравши дороги, які варто уникати</string>
|
||||
|
||||
<string name="speak_pedestrian">Сповіщати про пішохідні перехіди</string>
|
||||
<string name="speak_pedestrian">Пішохідні переходи</string>
|
||||
<string name="rendering_attr_roadStyle_name">Стиль доріг</string>
|
||||
<string name="rendering_value_default_name">За замовчуваням</string>
|
||||
<string name="rendering_value_orange_name">Помаранчевий</string>
|
||||
|
@ -1829,7 +1830,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="rendering_value_americanRoadAtlas_name">Атлас доріг Америки</string>
|
||||
<string name="routing_attr_no_new_routing_description">Не використовувати для побудови маршруту алгоритм представлений у версії 1.9</string>
|
||||
<string name="dash_download_msg_none">Ви бажаєте завантажити оффлайн мапи?</string>
|
||||
<string name="dash_download_msg">Завантежено %1$s мап</string>
|
||||
<string name="dash_download_msg">Завантажено %1$s мап</string>
|
||||
<string name="dash_download_new_one">Завантажити нову мапу</string>
|
||||
<string name="dash_download_manage">Керувати</string>
|
||||
<string name="map_locale">Мова мапи</string>
|
||||
|
@ -1870,7 +1871,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="action_modify">Змінити дію</string>
|
||||
<string name="action_delete">Вилучити дію</string>
|
||||
<string name="osm_edits">правки OSM</string>
|
||||
<string name="osmand_parking_hour">г</string><string name="osmand_parking_minute">хв</string><string name="osmand_parking_time_left">лишилось</string> <string name="parking_place_limited">Стоянка з обемеженням по часу</string>
|
||||
<string name="osmand_parking_hour">г</string><string name="osmand_parking_minute">хв</string><string name="osmand_parking_time_left">лишилось</string> <string name="parking_place_limited">Стоянка з обмеженням по часу</string>
|
||||
<string name="your_edits">Ваші правки</string>
|
||||
<string name="waypoint_visit_after">Відвідати після</string>
|
||||
<string name="waypoint_visit_before">Відвідати, перш ніж</string>
|
||||
|
@ -1925,11 +1926,11 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="shared_string_go">Вирушаємо</string>
|
||||
<string name="shared_string_do_not_use">Не використовувати</string>
|
||||
<string name="shared_string_address">Адреса</string>
|
||||
<string name="plugin_touringview_descr">"Активація цього виду змінює стиль мапи OsmAnd на \'Туристичну мапу\' – особливий стиль з докладною детализацією для мандрівників та професіональних водіїв.
|
||||
<string name="plugin_touringview_descr">"Активація цього виду змінює стиль мапи OsmAnd на \'Туристичну мапу\' – особливий стиль з докладною деталізацією для мандрівників та професіональних водіїв.
|
||||
\n\nЦей режим надає, на будь-якому масштабі, максимальну кількість інформації потрібну для подорожуючих (дороги, путівці, стежки та орієнтири).
|
||||
\n\nВін також чітко показує всі типи доріг однозначним кольоровим кодуваняс, що є корисним особливо для водіїв великих транспортних засобів.\n\nВін також має спеціальні налаштування для показу веломаршрутів та гірських туристичних маршрутів.
|
||||
\n\nВін не потребує завантаження окремих мап, вид ствоюється на основі інформації зі стандартної мапи.
|
||||
\n\nЦей вид можна де-активувати тут або змінити на інший, змінивши \'Стиль мапи\' на потрібний в \'Налаштувані мапи\'. "</string>
|
||||
\n\nВін також чітко показує всі типи доріг однозначним кольоровим кодуванням, що є корисним особливо для водіїв великих транспортних засобів.\n\nВін також має спеціальні налаштування для показу веломаршрутів та гірських туристичних маршрутів.
|
||||
\n\nВін не потребує завантаження окремих мап, вид створюється на основі інформації зі стандартної мапи.
|
||||
\n\nЦей вид можна де-активувати тут або змінити на інший, змінивши \'Стиль мапи\' на потрібний в \'Налаштування мапи\'. "</string>
|
||||
<string name="plugin_ski_descr">"Втулок забезпечує вам доступ до даних про гірськолижні траси, маршрути для бігових лиж, гірськолижні спуски, фунікулери та підйомники. Маршрути і спуски відзначені різними кольорами залежно від їх складності та зображені з використанням спеціального \"зимового\" стилю мапи, який полягає в тому, що використовуються \"снігові\" кольори зимового пейзажу.
|
||||
\n\nУ разі активації цього виду, стиль мапи змінюється на \"Winter and ski\", показуючи всі деталі пейзажу так, як вони виглядають взимку. Цей (зимовий) вид може бути де-активований тут, або якщо ви поміняєте \"Стиль мапи\" в меню \"Налаштування мапи\" на бажаний вид. "</string>
|
||||
<string name="rendering_attr_hideHouseNumbers_name">Приховати номери будинків</string>
|
||||
|
@ -1967,7 +1968,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="rendering_value_translucent_lightgreen_name">Напівпрозорий світло зелений</string>
|
||||
<string name="rendering_value_green_name">Зелений</string>
|
||||
<string name="rendering_value_translucent_green_name">Напівпрозорий зелений</string>
|
||||
<string name="rendering_value_lightblue_name">Світло-блакиіний</string>
|
||||
<string name="rendering_value_lightblue_name">Світло-блакитний</string>
|
||||
<string name="rendering_value_translucent_lightblue_name">Напівпрозорий світло-блакитний</string>
|
||||
<string name="rendering_value_blue_name">Синій</string>
|
||||
<string name="rendering_value_translucent_blue_name">Напівпрозорий синій</string>
|
||||
|
@ -2007,7 +2008,7 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="download_wikipedia_files">Ви хочете завантажити додаткові дані з Вікіпедії (%1$s Мб) ?</string>
|
||||
<string name="gps_network_not_enabled">Сервіс локації вимкнений. Бажаєте його ввімкнути?</string>
|
||||
<string name="disable_recording_once_app_killed">Запобігти самостійному логуваню</string>
|
||||
<string name="disable_recording_once_app_killed_descrp">Логування GPX буде призупинено коли додаток закрити (через недавні додатки). (Індикатор сну OsmAnd зникне з панелі сповіщень Android\'а)</string>
|
||||
<string name="disable_recording_once_app_killed_descrp">Логування GPX буде призупинено коли додаток буде закрито (через недавні додатки). (Фоновий індикатор OsmAnd зникне з панелі сповіщень Android\'а)</string>
|
||||
<string name="shared_string_import2osmand">Імпортувати до OsmAnd</string>
|
||||
<string name="read_full_article">Читати повну статтю (онлайн)</string>
|
||||
|
||||
|
@ -2022,7 +2023,200 @@ OsmAnd має відкриті сирці і активно розвиваєть
|
|||
<string name="local_recordings_delete_all_confirm">Ви збираєтеся видалити %1$d записів. Ви впевнені?</string>
|
||||
<string name="download_wikipedia_maps">Вікіпедія</string>
|
||||
<string name="rendering_value_default13_name">Типово (13)</string>
|
||||
<string name="rendering_value_defaultTranslucentCyan_name">Типово (напівпрозорий балкитний)</string>
|
||||
<string name="rendering_value_defaultTranslucentCyan_name">Типово (напівпрозорий блакитний)</string>
|
||||
<string name="rendering_value_translucent_orange_name">Напівпрозорий помаранчевий</string>
|
||||
<string name="shared_string_update">Оновити</string>
|
||||
</resources>
|
||||
<string name="rendering_attr_horseRoutes_name">Кінні маршрути</string>
|
||||
<string name="no_address_found">Адреса не визначена</string>
|
||||
<string name="shared_string_near">Поруч</string>
|
||||
<string name="shared_string_hide">Приховати</string>
|
||||
<string name="av_video_quality_low">Нижча якість</string>
|
||||
<string name="av_video_quality_high">Вища якість</string>
|
||||
<string name="av_video_quality">Якість відео</string>
|
||||
<string name="av_video_quality_descr">Виберіть якість відео</string>
|
||||
<string name="av_audio_format">Формат аудіо</string>
|
||||
<string name="av_audio_format_descr">Виберіть формат аудіо</string>
|
||||
<string name="av_audio_bitrate">Бітова швидкість аудіо</string>
|
||||
<string name="av_audio_bitrate_descr">Виберіть бітову швидкість аудіо</string>
|
||||
<string name="please_specify_poi_type_only_from_list">Будь ласка, вкажіть коректний тип POI з переліку, або пропустіть його</string>
|
||||
<string name="show_on_start">Показувати під час старту</string>
|
||||
<string name="copied_to_clipboard">Скопійовано до буферу обміну</string>
|
||||
<string name="osm_save_offline">Зберегти локально</string>
|
||||
<string name="osm_edit_modified_poi">OSM POI відредаговано</string>
|
||||
<string name="osm_edit_deleted_poi">OSM POI видалено</string>
|
||||
<string name="context_menu_item_open_note">Відкрити OSM замітку</string>
|
||||
<string name="osm_edit_reopened_note">Відкрити заново OSM замітку</string>
|
||||
<string name="osm_edit_commented_note">До замітки OSM додано коментар</string>
|
||||
<string name="osm_edit_removed_note">Замітку OSM видалено</string>
|
||||
<string name="osm_edit_created_note">Замітку OSM створено</string>
|
||||
<string name="osn_bug_name">Замітка OSM</string>
|
||||
<string name="osn_add_dialog_title">Створити замітку</string>
|
||||
<string name="osn_comment_dialog_title">Додати коментар</string>
|
||||
<string name="osn_reopen_dialog_title">Відкрити заново замітку</string>
|
||||
<string name="osn_close_dialog_title">Закрити замітку</string>
|
||||
<string name="osn_add_dialog_success">Замітку успішно створено</string>
|
||||
<string name="osn_add_dialog_error">Трапилась помилка: замітку не створено</string>
|
||||
<string name="osn_close_dialog_success">Замітку успішно закрито</string>
|
||||
<string name="osn_close_dialog_error">Трапилась помилка: замітку не закрито</string>
|
||||
<string name="shared_string_commit">Підтвердити</string>
|
||||
|
||||
<string name="context_menu_item_delete_waypoint">Вилучити GPX точку?</string>
|
||||
<string name="context_menu_item_edit_waypoint">Редагувати GPX точку</string>
|
||||
<string name="shared_string_location">Розташування</string>
|
||||
<string name="lang_nds">Нижньонімецька</string>
|
||||
<string name="lang_mk">Македонська</string>
|
||||
<string name="lang_fy">Західнофризька</string>
|
||||
<string name="lang_als">Албанська (Тоскська)</string>
|
||||
<string name="read_more">Детальніше</string>
|
||||
<string name="whats_new">Що нового у</string>
|
||||
<string name="shared_string_upload">Вивантажити</string>
|
||||
<string name="osm_edit_created_poi">OSM POI створено</string>
|
||||
|
||||
<string name="world_map_download_descr">Базова мапа світу (яка покриває увесь світ при малому масштабі) відсутня, чи застаріла. Будь ласка, завантажте її для повноцінної роботи середовища.</string>
|
||||
<string name="shared_string_qr_code">QR-код</string>
|
||||
<string name="map_downloaded">Мапу завантажено</string>
|
||||
<string name="map_downloaded_descr">Мапу %1$s завантажено. Поверніться назад до карти, аби розпочати користування нею.</string>
|
||||
<string name="go_to_map">Перейти до мапи</string>
|
||||
<string name="simulate_initial_startup">Імітувати перший запуск додатку</string>
|
||||
<string name="share_geo">гео:</string>
|
||||
<string name="share_menu_location">Поділитись місцезнаходженням</string>
|
||||
<string name="shared_string_send">Надіслати</string>
|
||||
<string name="favorite_category_dublicate_message">Категорія із вказаною назвою вже існує. Будь ласка, введіть іншу назву.</string>
|
||||
<string name="favorite_category_name">Назва категорії</string>
|
||||
<string name="favorite_category_add_new_title">Додати нову категорію</string>
|
||||
<string name="regions">Регіони</string>
|
||||
<string name="region_maps">Регіональні мапи</string>
|
||||
<string name="world_maps">Мапи світу</string>
|
||||
<string name="hillshade_layer_disabled">Шар рельєфу місцевості вимкнено</string>
|
||||
<string name="srtm_plugin_disabled">Контурні лінії вимкнено</string>
|
||||
<string name="favorite_category_add_new">Додати нову</string>
|
||||
<string name="favorite_category_select">Виберіть категорію</string>
|
||||
<string name="default_speed_system_descr">Визначте одиниці виміру швидкості</string>
|
||||
<string name="default_speed_system">Одиниці виміру швидкості</string>
|
||||
<string name="si_nm">Морські милі</string>
|
||||
<string name="si_kmh">Кілометри на годину</string>
|
||||
<string name="si_mph">Милі на годину</string>
|
||||
<string name="si_m_s">Метри на секунду</string>
|
||||
<string name="si_min_km">Хвилин за кілометр</string>
|
||||
<string name="si_min_m">Хвилин за милю</string>
|
||||
<string name="si_nm_h">Морських миль на годину (вузол)</string>
|
||||
<string name="min_mile">хв/м</string>
|
||||
<string name="min_km">хв/км</string>
|
||||
<string name="m_s">м/с</string>
|
||||
<string name="shared_string_trip_recording">Запис подорожі</string>
|
||||
<string name="shared_string_navigation">Навігація</string>
|
||||
<string name="osmand_running_in_background">Працює у фоновому режимі</string>
|
||||
<string name="favourites_edit_dialog_title">Інформація по закладці</string>
|
||||
<string name="simulate_your_location_stop_descr">Зупинити симуляцію вашої позиції</string>
|
||||
<string name="looking_up_address">Пошук адреси</string>
|
||||
<string name="av_locations">Місця</string>
|
||||
<string name="plugin_settings">Втулки</string>
|
||||
<string name="routing_attr_avoid_shuttle_train_name">Уникати приміських поїздів</string>
|
||||
<string name="routing_attr_avoid_shuttle_train_description">Уникати приміських поїздів</string>
|
||||
<string name="traffic_warning_hazard">Небезпека</string>
|
||||
<string name="rendering_value_boldOutline_name">Жирний контур</string>
|
||||
<string name="no_updates_available">Немає доступних оновлень</string>
|
||||
<string name="download_live_updates">Автоматичні оновлення</string>
|
||||
<string name="rendering_attr_currentTrackColor_description">Колір GPX</string>
|
||||
<string name="rendering_attr_currentTrackWidth_description">Товщина GPX</string>
|
||||
<string name="shared_string_wikipedia">Вікіпедія</string>
|
||||
<string name="rendering_attr_roadStyle_description">Стиль доріг</string>
|
||||
<string name="routing_attr_avoid_stairs_name">Уникати сходи</string>
|
||||
<string name="routing_attr_avoid_stairs_description">Уникати сходи</string>
|
||||
<string name="routing_attr_avoid_borders_name">Уникати перетин кордону</string>
|
||||
<string name="shared_string_others">Інші</string>
|
||||
<string name="favourites_context_menu_add">Додати закладку</string>
|
||||
<string name="poi_action_delete">видалити</string>
|
||||
<string name="poi_dialog_reopen">Повторно відкрити</string>
|
||||
<string name="do_you_like_osmand">Чи подобається вам OsmAnd?</string>
|
||||
<string name="we_really_care_about_your_opinion">Нам дуже цікаво почути вашу думку і важливо отримати відгук.</string>
|
||||
<string name="rate_this_app">Оцінити цей додаток</string>
|
||||
<string name="rate_this_app_long">Будь ласка, дайте оцінку OsmAnd на Google Play</string>
|
||||
<string name="user_hates_app_get_feedback">Розкажіть нам, чому.</string>
|
||||
<string name="failed_to_upload">Не вдалося завантажити</string>
|
||||
<string name="delete_change">Видалити зміни</string>
|
||||
<string name="successfully_uploaded_pattern">Успішно вивантажено {0}/{1}</string>
|
||||
<string name="try_again">Спробуйте ще раз</string>
|
||||
<string name="error_message_pattern">Помилка: {0}</string>
|
||||
<string name="dahboard_options_dialog_title">Налатування домашньої сторінки</string>
|
||||
|
||||
<string name="shared_string_card_was_hidden">Картку було приховано</string>
|
||||
<string name="shared_string_undo">СКАСУВАТИ</string>
|
||||
<string name="shared_string_skip">Пропустити</string>
|
||||
<string name="app_name_osmand">OsmAnd</string>
|
||||
<string name="offline_maps_and_navigation">Оффлайн мапи\nта навігація</string>
|
||||
<string name="commit_poi">Підтвердити POI</string>
|
||||
<string name="tab_title_basic">Основні</string>
|
||||
<string name="tab_title_advanced">Розширені</string>
|
||||
<string name="building_number">Номер будинку</string>
|
||||
<string name="next_proceed">Наступний</string>
|
||||
<string name="contact_info">Контактна інформація</string>
|
||||
<string name="description">Опис</string>
|
||||
<string name="add_opening_hours">Додати години роботи</string>
|
||||
<string name="poi_dialog_poi_type">Тип POI</string>
|
||||
<string name="please_specify_poi_type">Будь ласка, вкажіть тип POI.</string>
|
||||
<string name="working_days">Робочі дні</string>
|
||||
<string name="favourites">Закладки</string>
|
||||
<string name="saved_at_time">Успішно збережено о: %1$s</string>
|
||||
<string name="show_gpx">Показати GPX</string>
|
||||
<string name="count_of_lines">Кількість ліній</string>
|
||||
<string name="are_you_sure">Ви впевнені?</string>
|
||||
<string name="unsaved_changes_will_be_lost">Всі незбережені зміни буде втрачено. Продовжити?</string>
|
||||
<string name="downloads_left_template">%1$s завантажень лишилось</string>
|
||||
<string name="roads">Дороги</string>
|
||||
<string name="buy">Придбати</string>
|
||||
<string name="activate_seamarks_plugin">Будь ласка, активуйте втулок морські навігаційні знаки</string>
|
||||
<string name="activate_srtm_plugin">Будь ласка, активувати втулок SRTM</string>
|
||||
<string name="later">Пізніше</string>
|
||||
<string name="get_full_version">Повна версія</string>
|
||||
<string name="downloads">Завантаження</string>
|
||||
<string name="value_downloaded_of_max">%1$.1f з %2$.1f МБ</string>
|
||||
<string name="file_size_in_mb">%.1f МБ</string>
|
||||
<string name="update_all">Оновити все (%1$s МБ)</string>
|
||||
<string name="free_downloads_used">Використано безкоштовних завантажень</string>
|
||||
<string name="free_downloads_used_description">Показує використані безкоштовні завантаження</string>
|
||||
|
||||
<string name="application_dir_description">Виберіть, де ви будете зберігати файли мап.</string>
|
||||
|
||||
<string name="enter_country_name">Введіть назву країни</string>
|
||||
<string name="new_version">Нова версія</string>
|
||||
<string name="begin_with_osmand_menu_group">Перші кроки з OsmAnd</string>
|
||||
<string name="features_menu_group">Особливості</string>
|
||||
<string name="help_us_to_improve_menu_group">Допоможіть нам поліпшити OsmAnd</string>
|
||||
<string name="other_menu_group">Інше</string>
|
||||
<string name="plugins_menu_group">Втулки</string>
|
||||
<string name="first_usage_item">Перше використання</string>
|
||||
<string name="first_usage_item_description">Як завантажити мапи, встановити основні налаштування</string>
|
||||
<string name="navigation_item_description">Налаштування навігації</string>
|
||||
<string name="planning_trip_item">Планування подорожі</string>
|
||||
<string name="faq_item">Питання та відповіді</string>
|
||||
<string name="faq_item_description">Часті запитання</string>
|
||||
<string name="map_viewing_item">Перегляд мапи</string>
|
||||
<string name="search_on_the_map_item">Пошук мапи</string>
|
||||
<string name="instalation_troubleshooting_item">Встановлення та вирішення проблем</string>
|
||||
<string name="techical_articles_item">Технічні статті</string>
|
||||
<string name="versions_item">Версії</string>
|
||||
<string name="feedback">Зворотній зв\'язок</string>
|
||||
<string name="contact_us">Зв\'язатися з нами</string>
|
||||
<string name="map_legend">Легенда мапи</string>
|
||||
<string name="poi_context_menu_modify_osm_change">Редагувати OSM зміни</string>
|
||||
<string name="only_download_over_wifi">Завантажувати лише через Wi-Fi</string>
|
||||
<string name="update_now">Оновити зараз</string>
|
||||
<string name="access_from_map_description">Кнопка меню запускає домашню сторінку, не меню</string>
|
||||
<string name="access_from_map">Доступ з мапи</string>
|
||||
<string name="simulate_initial_startup_descr">Встановлює прапорець першого запуску додатку, не змінює інші налаштування</string>
|
||||
<string name="simulate_your_location_descr">Моделювати за допомогою розрахованого маршруту чи записаного треку GPX</string>
|
||||
<string name="user_hates_app_get_feedback_long">Будь ласка, розкажіть, що ви бажали б змінити в додатку.</string>
|
||||
<string name="opening_at">Відкриття о</string>
|
||||
<string name="closing_at">Закриття о</string>
|
||||
<string name="number_of_rows_in_dash">Кількість рядків на панелі %1$s</string>
|
||||
<string name="recent_places">Нещодавні місця</string>
|
||||
<string name="downloading_number_of_files">Завантаження файлу - %1$d</string>
|
||||
<string name="show_free_version_banner">Показати банер безкоштовної версії</string>
|
||||
<string name="use_dashboard_btn">Використовувати домашню сторінку</string>
|
||||
<string name="use_drawer_btn">Використовувати меню</string>
|
||||
<string name="update_every">Оновлювати кожні</string>
|
||||
<string name="share_osm_edits_subject">OSM правки, поширені через OsmAnd</string>
|
||||
<string name="rendering_attr_hideProposed_name">Приховати заплановані об\'єкти</string>
|
||||
<string name="save_poi_without_poi_type_message">Ви дійсно хочете зберегти POI, не вказавши його тип?</string>
|
||||
</resources>
|
||||
|
|
|
@ -2032,4 +2032,7 @@
|
|||
<string name="update_every">更新全部</string>
|
||||
<string name="only_download_over_wifi">只在 WiFi 連線下載</string>
|
||||
<string name="live_update">即時更新</string>
|
||||
</resources>
|
||||
<string name="update_now">立即更新</string>
|
||||
<string name="route_distance">距離:</string>
|
||||
<string name="route_duration">行駛時間:</string>
|
||||
</resources>
|
||||
|
|
|
@ -2537,4 +2537,6 @@
|
|||
<string name="poi_fitness_centre">Fitness centre</string>
|
||||
<string name="poi_fitness">Fitness</string>
|
||||
|
||||
<string name="poi_billiards">Billiards</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -86,7 +86,8 @@
|
|||
<dimen name="map_button_stroke">1dp</dimen>
|
||||
<dimen name="map_button_stroke_dark">1dp</dimen>
|
||||
<dimen name="map_route_planning_land_width">320dp</dimen>
|
||||
<dimen name="map_route_planning_max_height">280dp</dimen>
|
||||
<dimen name="map_route_planning_land_width_minus_shadow">306dp</dimen>
|
||||
<dimen name="map_route_planning_max_height">330dp</dimen>
|
||||
<dimen name="map_minwidth_widget">100dp</dimen>
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="route_distance">Distance:</string>
|
||||
<string name="route_duration">Travelling time:</string>
|
||||
<string-array name="update_frequencies_array">
|
||||
<item>Every Hour</item>
|
||||
<item>Once a day</item>
|
||||
|
@ -2113,4 +2115,5 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
|||
<string name="update_every">Update every</string>
|
||||
<string name="only_download_over_wifi">Only download over WiFi</string>
|
||||
<string name="live_update">Live update</string>
|
||||
<string name="update_now">Update now</string>
|
||||
</resources>
|
|
@ -3,8 +3,10 @@ package net.osmand;
|
|||
|
||||
import java.util.Date;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.text.format.DateFormat;
|
||||
import android.view.View;
|
||||
import android.view.ViewParent;
|
||||
|
@ -64,4 +66,15 @@ public class AndroidUtils {
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void setBackground(Context ctx, View view, boolean night, int lightResId, int darkResId) {
|
||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
|
||||
view.setBackground(ctx.getResources().getDrawable(night ? darkResId : lightResId,
|
||||
ctx.getTheme()));
|
||||
} else {
|
||||
view.setBackgroundDrawable(ctx.getResources().getDrawable(night ? darkResId : lightResId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -330,7 +330,7 @@ public class ContextMenuAdapter {
|
|||
Integer lid = getLayoutId(position);
|
||||
if (lid == R.layout.mode_toggles) {
|
||||
final Set<ApplicationMode> selected = new LinkedHashSet<ApplicationMode>();
|
||||
return AppModeDialog.prepareAppModeDrawerView(activity, visibleModes, selected, allModes, new View.OnClickListener() {
|
||||
return AppModeDialog.prepareAppModeDrawerView(activity, visibleModes, selected, allModes, false, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (selected.size() > 0) {
|
||||
|
|
|
@ -82,6 +82,10 @@ public class IconsCache {
|
|||
return getDrawable(id, app.getSettings().isLightContent() ? R.color.icon_color : 0);
|
||||
}
|
||||
|
||||
public Drawable getContentIcon(@DrawableRes int id, boolean isLightContent) {
|
||||
return getDrawable(id, isLightContent ? R.color.icon_color : 0);
|
||||
}
|
||||
|
||||
public Drawable getIcon(@DrawableRes int id) {
|
||||
return getDrawable(id, 0);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package net.osmand.plus.activities;
|
||||
|
||||
import java.io.File;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import net.osmand.plus.GPXUtilities.GPXFile;
|
||||
import net.osmand.plus.activities.LocalIndexHelper.LocalIndexType;
|
||||
|
||||
public class LocalIndexInfo {
|
||||
import java.io.File;
|
||||
|
||||
public class LocalIndexInfo implements Parcelable {
|
||||
|
||||
private LocalIndexType type;
|
||||
private String description = "";
|
||||
|
@ -155,4 +158,52 @@ public class LocalIndexInfo {
|
|||
return fileName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(this.type == null ? -1 : this.type.ordinal());
|
||||
dest.writeString(this.description);
|
||||
dest.writeString(this.name);
|
||||
dest.writeByte(backupedData ? (byte) 1 : (byte) 0);
|
||||
dest.writeByte(corrupted ? (byte) 1 : (byte) 0);
|
||||
dest.writeByte(notSupported ? (byte) 1 : (byte) 0);
|
||||
dest.writeByte(loaded ? (byte) 1 : (byte) 0);
|
||||
dest.writeString(this.subfolder);
|
||||
dest.writeString(this.pathToData);
|
||||
dest.writeString(this.fileName);
|
||||
dest.writeByte(singleFile ? (byte) 1 : (byte) 0);
|
||||
dest.writeInt(this.kbSize);
|
||||
dest.writeByte(expanded ? (byte) 1 : (byte) 0);
|
||||
}
|
||||
|
||||
protected LocalIndexInfo(Parcel in) {
|
||||
int tmpType = in.readInt();
|
||||
this.type = tmpType == -1 ? null : LocalIndexType.values()[tmpType];
|
||||
this.description = in.readString();
|
||||
this.name = in.readString();
|
||||
this.backupedData = in.readByte() != 0;
|
||||
this.corrupted = in.readByte() != 0;
|
||||
this.notSupported = in.readByte() != 0;
|
||||
this.loaded = in.readByte() != 0;
|
||||
this.subfolder = in.readString();
|
||||
this.pathToData = in.readString();
|
||||
this.fileName = in.readString();
|
||||
this.singleFile = in.readByte() != 0;
|
||||
this.kbSize = in.readInt();
|
||||
this.expanded = in.readByte() != 0;
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<LocalIndexInfo> CREATOR = new Parcelable.Creator<LocalIndexInfo>() {
|
||||
public LocalIndexInfo createFromParcel(Parcel source) {
|
||||
return new LocalIndexInfo(source);
|
||||
}
|
||||
|
||||
public LocalIndexInfo[] newArray(int size) {
|
||||
return new LocalIndexInfo[size];
|
||||
}
|
||||
};
|
||||
}
|
|
@ -555,7 +555,12 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents,
|
|||
if (mapLabelToShow != null && !mapLabelToShow.contextMenuDisabled()) {
|
||||
mapContextMenu.setMapCenter(latLonToShow);
|
||||
mapContextMenu.setMapPosition(mapView.getMapPosition());
|
||||
mapContextMenu.show(latLonToShow, mapLabelToShow, toShow);
|
||||
if (mapLayers.getMapControlsLayer().getMapRouteInfoMenu().isVisible()) {
|
||||
mapContextMenu.showMinimized(latLonToShow, mapLabelToShow, toShow);
|
||||
mapLayers.getMapControlsLayer().getMapRouteInfoMenu().updateMenu();
|
||||
} else {
|
||||
mapContextMenu.show(latLonToShow, mapLabelToShow, toShow);
|
||||
}
|
||||
}
|
||||
if (!latLonToShow.equals(cur)) {
|
||||
mapView.getAnimatedDraggingThread().startMoving(latLonToShow.getLatitude(),
|
||||
|
|
|
@ -400,7 +400,7 @@ public abstract class SettingsBaseActivity extends ActionBarPreferenceActivity
|
|||
protected void profileDialog() {
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(this);
|
||||
final Set<ApplicationMode> selected = new LinkedHashSet<ApplicationMode>();
|
||||
View v = AppModeDialog.prepareAppModeView(this, selected, false, null, true,
|
||||
View v = AppModeDialog.prepareAppModeView(this, selected, false, null, true, false,
|
||||
new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
|
|
@ -22,7 +22,7 @@ import net.osmand.plus.R;
|
|||
import net.osmand.plus.routing.RouteDirectionInfo;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.plus.views.TurnPathHelper;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoControl;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
|
||||
import net.osmand.util.Algorithms;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
@ -144,7 +144,7 @@ public class ShowRouteInfoActivity extends OsmandListActivity {
|
|||
RouteDirectionInfo item = ((RouteInfoAdapter)getListAdapter()).getItem(position - 1);
|
||||
Location loc = helper.getLocationFromRouteDirection(item);
|
||||
if(loc != null){
|
||||
MapRouteInfoControl.directionInfo = position - 1;
|
||||
MapRouteInfoMenu.directionInfo = position - 1;
|
||||
OsmandSettings settings = ((OsmandApplication) getApplication()).getSettings();
|
||||
settings.setMapLocationToShow(loc.getLatitude(),loc.getLongitude(),
|
||||
Math.max(13, settings.getLastKnownMapZoom()),
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.ApplicationMode;
|
||||
import net.osmand.plus.ContextMenuAdapter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
@ -20,7 +21,7 @@ import android.widget.LinearLayout.LayoutParams;
|
|||
public class AppModeDialog {
|
||||
|
||||
public static View prepareAppModeView(Activity a, final Set<ApplicationMode> selected, boolean showDefault,
|
||||
ViewGroup parent, final boolean singleSelection, final View.OnClickListener onClickListener) {
|
||||
ViewGroup parent, final boolean singleSelection, boolean useMapTheme, final View.OnClickListener onClickListener) {
|
||||
OsmandSettings settings = ((OsmandApplication) a.getApplication()).getSettings();
|
||||
final List<ApplicationMode> values = new ArrayList<ApplicationMode>(ApplicationMode.values(settings));
|
||||
if(!showDefault) {
|
||||
|
@ -29,21 +30,21 @@ public class AppModeDialog {
|
|||
if (showDefault || settings.getApplicationMode() != ApplicationMode.DEFAULT) {
|
||||
selected.add(settings.getApplicationMode());
|
||||
}
|
||||
return prepareAppModeView(a, values, selected, parent, singleSelection, false, onClickListener);
|
||||
return prepareAppModeView(a, values, selected, parent, singleSelection, false, useMapTheme, onClickListener);
|
||||
}
|
||||
|
||||
//special method for drawer menu
|
||||
//needed because if there's more than 4 items - the don't fit in drawer
|
||||
public static View prepareAppModeDrawerView(Activity a, List<ApplicationMode> visible, final Set<ApplicationMode> selected, ContextMenuAdapter.BooleanResult allModes,
|
||||
final View.OnClickListener onClickListener) {
|
||||
boolean useMapTheme, final View.OnClickListener onClickListener) {
|
||||
OsmandSettings settings = ((OsmandApplication) a.getApplication()).getSettings();
|
||||
final List<ApplicationMode> values = new ArrayList<ApplicationMode>(ApplicationMode.values(settings));
|
||||
selected.add(settings.getApplicationMode());
|
||||
return prepareAppModeView(a, values, selected, null, true, true, onClickListener);
|
||||
return prepareAppModeView(a, values, selected, null, true, true, useMapTheme, onClickListener);
|
||||
}
|
||||
|
||||
public static View prepareAppModeView(Activity a, final List<ApplicationMode> values , final Set<ApplicationMode> selected,
|
||||
ViewGroup parent, final boolean singleSelection, boolean drawer, final View.OnClickListener onClickListener) {
|
||||
ViewGroup parent, final boolean singleSelection, boolean drawer, boolean useMapTheme, final View.OnClickListener onClickListener) {
|
||||
View ll = a.getLayoutInflater().inflate(R.layout.mode_toggles, parent);
|
||||
final View[] buttons = new View[values.size()];
|
||||
int k = 0;
|
||||
|
@ -52,7 +53,7 @@ public class AppModeDialog {
|
|||
}
|
||||
for (int i = 0; i < buttons.length; i++) {
|
||||
updateButtonState((OsmandApplication) a.getApplication(), values, selected, onClickListener, buttons, i,
|
||||
singleSelection);
|
||||
singleSelection, useMapTheme);
|
||||
}
|
||||
return ll;
|
||||
}
|
||||
|
@ -60,7 +61,7 @@ public class AppModeDialog {
|
|||
|
||||
private static void updateButtonState(final OsmandApplication ctx, final List<ApplicationMode> visible,
|
||||
final Set<ApplicationMode> selected, final View.OnClickListener onClickListener, final View[] buttons,
|
||||
int i, final boolean singleChoice) {
|
||||
int i, final boolean singleChoice, final boolean useMapTheme) {
|
||||
if (buttons[i] != null) {
|
||||
View tb = buttons[i];
|
||||
final ApplicationMode mode = visible.get(i);
|
||||
|
@ -70,7 +71,13 @@ public class AppModeDialog {
|
|||
iv.setImageDrawable(ctx.getIconsCache().getIcon(mode.getSmallIconDark(), R.color.osmand_orange));
|
||||
tb.findViewById(R.id.selection).setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
iv.setImageDrawable(ctx.getIconsCache().getContentIcon(mode.getSmallIconDark()));
|
||||
if (useMapTheme) {
|
||||
boolean nightMode = ctx.getDaynightHelper().isNightMode();
|
||||
iv.setImageDrawable(ctx.getIconsCache().getContentIcon(mode.getSmallIconDark(), !nightMode));
|
||||
AndroidUtils.setBackground(ctx, iv, nightMode, R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
} else {
|
||||
iv.setImageDrawable(ctx.getIconsCache().getContentIcon(mode.getSmallIconDark()));
|
||||
}
|
||||
tb.findViewById(R.id.selection).setVisibility(View.INVISIBLE);
|
||||
}
|
||||
iv.setOnClickListener(new View.OnClickListener() {
|
||||
|
@ -94,7 +101,7 @@ public class AppModeDialog {
|
|||
onClickListener.onClick(null);
|
||||
}
|
||||
for(int i = 0; i < visible.size(); i++) {
|
||||
updateButtonState(ctx, visible, selected, onClickListener, buttons, i, singleChoice);
|
||||
updateButtonState(ctx, visible, selected, onClickListener, buttons, i, singleChoice, useMapTheme);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -13,7 +13,6 @@ import android.graphics.PorterDuff;
|
|||
import android.graphics.PorterDuffColorFilter;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
|
||||
|
@ -36,30 +35,22 @@ public class FavoriteImageDrawable extends Drawable {
|
|||
this.withShadow = withShadow;
|
||||
this.resources = ctx.getResources();
|
||||
this.color = color;
|
||||
paintIcon = new Paint();
|
||||
int col = color == 0 || color == Color.BLACK ? getResources().getColor(R.color.color_favorite) : color;
|
||||
paintIcon.setColorFilter(new PorterDuffColorFilter(col, PorterDuff.Mode.SRC_IN));
|
||||
paintBackground = new Paint();
|
||||
int col = color == 0 || color == Color.BLACK ? getResources().getColor(R.color.color_favorite) : color;
|
||||
paintBackground.setColorFilter(new PorterDuffColorFilter(col, PorterDuff.Mode.MULTIPLY));
|
||||
paintIcon = new Paint();
|
||||
favIcon = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.map_favorite);
|
||||
favBackground = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.map_white_favorite_shield);
|
||||
|
||||
|
||||
listDrawable = getResources().getDrawable(R.drawable.ic_action_fav_dark).mutate();
|
||||
listDrawable.setColorFilter(new PorterDuffColorFilter(col, PorterDuff.Mode.SRC_IN));
|
||||
DisplayMetrics metrics = getResources().getDisplayMetrics();
|
||||
|
||||
paintOuter = new Paint();
|
||||
paintOuter.setAntiAlias(true);
|
||||
paintOuter.setStyle(Style.FILL_AND_STROKE);
|
||||
paintInnerCircle = new Paint();
|
||||
paintInnerCircle.setStyle(Style.FILL_AND_STROKE);
|
||||
if(metrics != null && metrics.density > 0) {
|
||||
paintOuter.setStrokeWidth(metrics.density * 1);
|
||||
} else {
|
||||
paintOuter.setStrokeWidth(1);
|
||||
}
|
||||
// paintOuter.setColor(color == 0 || color == Color.BLACK ? 0x88555555 : color);
|
||||
paintOuter.setColor(0xffbbbbbb);
|
||||
paintInnerCircle.setColor(Color.WHITE);
|
||||
paintOuter.setColor(color == 0 || color == Color.BLACK ? 0x88555555 : color);
|
||||
paintInnerCircle.setColor(color == 0 || color == Color.BLACK ? getResources().getColor(R.color.color_favorite)
|
||||
: color);
|
||||
paintInnerCircle.setAntiAlias(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -211,7 +211,7 @@ public class SettingsDevelopmentActivity extends SettingsBaseActivity {
|
|||
modes.remove(ApplicationMode.DEFAULT);
|
||||
final Set<ApplicationMode> selected = new LinkedHashSet<ApplicationMode>(ApplicationMode.values(settings));
|
||||
selected.remove(ApplicationMode.DEFAULT);
|
||||
View v = AppModeDialog.prepareAppModeView(this, modes, selected, null, false, false,
|
||||
View v = AppModeDialog.prepareAppModeView(this, modes, selected, null, false, false, false,
|
||||
new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package net.osmand.plus.download;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import net.osmand.plus.activities.ActionBarProgressActivity;
|
||||
|
||||
public class AbstractDownloadActivity extends ActionBarProgressActivity {
|
||||
protected DownloadValidationManager downloadValidationManager;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
downloadValidationManager = new DownloadValidationManager(getMyApplication());
|
||||
}
|
||||
|
||||
public void startDownload(IndexItem... indexItem) {
|
||||
downloadValidationManager.startDownload(this, indexItem);
|
||||
}
|
||||
|
||||
public void makeSureUserCancelDownload(IndexItem item) {
|
||||
downloadValidationManager.makeSureUserCancelDownload(this, item);
|
||||
}
|
||||
}
|
|
@ -41,7 +41,6 @@ import net.osmand.plus.OsmandSettings.DrivingRegion;
|
|||
import net.osmand.plus.OsmandSettings.MetricsConstants;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.ActionBarProgressActivity;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.TabActivity;
|
||||
|
@ -68,7 +67,7 @@ import java.util.List;
|
|||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
public class DownloadActivity extends ActionBarProgressActivity implements DownloadEvents {
|
||||
public class DownloadActivity extends AbstractDownloadActivity implements DownloadEvents {
|
||||
private static final Log LOG = PlatformUtil.getLog(DownloadActivity.class);
|
||||
|
||||
public static final int UPDATES_TAB_NUMBER = 2;
|
||||
|
@ -98,7 +97,6 @@ public class DownloadActivity extends ActionBarProgressActivity implements Downl
|
|||
private String filterGroup;
|
||||
protected Set<WeakReference<Fragment>> fragSet = new HashSet<>();
|
||||
private DownloadIndexesThread downloadThread;
|
||||
private DownloadValidationManager downloadValidationManager;
|
||||
protected WorldRegion downloadItem;
|
||||
|
||||
private boolean srtmDisabled;
|
||||
|
@ -110,7 +108,6 @@ public class DownloadActivity extends ActionBarProgressActivity implements Downl
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
getMyApplication().applyTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
downloadValidationManager = new DownloadValidationManager(getMyApplication());
|
||||
downloadThread = getMyApplication().getDownloadThread();
|
||||
DownloadResources indexes = getDownloadThread().getIndexes();
|
||||
if (!indexes.isDownloadedFromInternet) {
|
||||
|
@ -165,14 +162,6 @@ public class DownloadActivity extends ActionBarProgressActivity implements Downl
|
|||
return downloadThread;
|
||||
}
|
||||
|
||||
public void startDownload(IndexItem... indexItem) {
|
||||
downloadValidationManager.startDownload(this, indexItem);
|
||||
}
|
||||
|
||||
public void makeSureUserCancelDownload(IndexItem item) {
|
||||
downloadValidationManager.makeSureUserCancelDownload(this, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachFragment(Fragment fragment) {
|
||||
fragSet.add(new WeakReference<Fragment>(fragment));
|
||||
|
|
|
@ -8,9 +8,9 @@ import android.support.v4.app.FragmentPagerAdapter;
|
|||
import android.support.v4.view.ViewPager;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.ActionBarProgressActivity;
|
||||
import net.osmand.plus.download.AbstractDownloadActivity;
|
||||
|
||||
public class LiveUpdatesActivity extends ActionBarProgressActivity {
|
||||
public class LiveUpdatesActivity extends AbstractDownloadActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -18,9 +18,8 @@ public class LiveUpdatesActivity extends ActionBarProgressActivity {
|
|||
setContentView(R.layout.activity_livie_updates);
|
||||
|
||||
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
|
||||
String basicTitle = getResources().getString(R.string.tab_title_basic);
|
||||
String extendedTitle = getResources().getString(R.string.tab_title_advanced);
|
||||
final MyAdapter pagerAdapter = new MyAdapter(getSupportFragmentManager());
|
||||
final LiveUpdatesFragmentPagerAdapter pagerAdapter =
|
||||
new LiveUpdatesFragmentPagerAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(pagerAdapter);
|
||||
|
||||
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
|
||||
|
@ -28,11 +27,11 @@ public class LiveUpdatesActivity extends ActionBarProgressActivity {
|
|||
tabLayout.setupWithViewPager(viewPager);
|
||||
}
|
||||
|
||||
public static class MyAdapter extends FragmentPagerAdapter {
|
||||
public static class LiveUpdatesFragmentPagerAdapter extends FragmentPagerAdapter {
|
||||
private final Fragment[] fragments = new Fragment[]{new LiveUpdatesFragment()};
|
||||
private final String[] titles = new String[]{LiveUpdatesFragment.TITILE};
|
||||
|
||||
public MyAdapter(FragmentManager fm) {
|
||||
public LiveUpdatesFragmentPagerAdapter(FragmentManager fm) {
|
||||
super(fm);
|
||||
}
|
||||
|
||||
|
@ -50,7 +49,5 @@ public class LiveUpdatesActivity extends ActionBarProgressActivity {
|
|||
public CharSequence getPageTitle(int position) {
|
||||
return titles[position];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,40 +1,54 @@
|
|||
package net.osmand.plus.liveupdates;
|
||||
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.SwitchCompat;
|
||||
import android.util.TypedValue;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.ExpandableListView;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.ToggleButton;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.ActionBarProgressActivity;
|
||||
import net.osmand.plus.activities.LocalIndexHelper;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
|
||||
import net.osmand.plus.download.AbstractDownloadActivity;
|
||||
import net.osmand.plus.download.DownloadActivityType;
|
||||
import net.osmand.plus.download.IndexItem;
|
||||
import net.osmand.plus.download.ui.AbstractLoadLocalIndexTask;
|
||||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.resources.IncrementalChangesManager;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class LiveUpdatesFragment extends Fragment {
|
||||
public static final String TITILE = "Live Updates";
|
||||
public static final String LIVE_UPDATES_ON_POSTFIX = "_live_updates_on";
|
||||
public static final Comparator<LocalIndexInfo> LOCAL_INDEX_INFO_COMPARATOR = new Comparator<LocalIndexInfo>() {
|
||||
@Override
|
||||
public int compare(LocalIndexInfo lhs, LocalIndexInfo rhs) {
|
||||
return lhs.getName().compareTo(rhs.getName());
|
||||
}
|
||||
};
|
||||
private ExpandableListView listView;
|
||||
private LocalIndexesAdapter adapter;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -45,7 +59,7 @@ public class LiveUpdatesFragment extends Fragment {
|
|||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_live_updates, container, false);
|
||||
ListView listView = (ListView) view.findViewById(android.R.id.list);
|
||||
listView = (ExpandableListView) view.findViewById(android.R.id.list);
|
||||
View header = inflater.inflate(R.layout.live_updates_header, listView, false);
|
||||
|
||||
final OsmandSettings settings = getMyActivity().getMyApplication().getSettings();
|
||||
|
@ -69,35 +83,227 @@ public class LiveUpdatesFragment extends Fragment {
|
|||
});
|
||||
|
||||
listView.addHeaderView(header);
|
||||
LiveUpdatesAdapter adapter = new LiveUpdatesAdapter(this);
|
||||
adapter = new LocalIndexesAdapter(this);
|
||||
listView.setAdapter(adapter);
|
||||
new LoadLocalIndexTask(adapter, (ActionBarProgressActivity) getActivity()).execute();
|
||||
new LoadLocalIndexTask(adapter, this).execute();
|
||||
return view;
|
||||
}
|
||||
|
||||
private OsmandActionBarActivity getMyActivity() {
|
||||
return (OsmandActionBarActivity) getActivity();
|
||||
private AbstractDownloadActivity getMyActivity() {
|
||||
return (AbstractDownloadActivity) getActivity();
|
||||
}
|
||||
|
||||
private static class LiveUpdatesAdapter extends ArrayAdapter<LocalIndexInfo> {
|
||||
public void notifyLiveUpdatesChanged() {
|
||||
adapter.notifyLiveUpdatesChanged();
|
||||
}
|
||||
|
||||
protected class LocalIndexesAdapter extends OsmandBaseExpandableListAdapter {
|
||||
final ArrayList<LocalIndexInfo> dataShouldUpdate = new ArrayList<>();
|
||||
final ArrayList<LocalIndexInfo> dataShouldNotUpdate = new ArrayList<>();
|
||||
final LiveUpdatesFragment fragment;
|
||||
public LiveUpdatesAdapter(LiveUpdatesFragment fragment) {
|
||||
super(fragment.getActivity(), R.layout.local_index_list_item, R.id.nameTextView);
|
||||
final Context ctx;
|
||||
|
||||
public LocalIndexesAdapter(LiveUpdatesFragment fragment) {
|
||||
this.fragment = fragment;
|
||||
ctx = fragment.getActivity();
|
||||
}
|
||||
|
||||
public void add(LocalIndexInfo info) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference =
|
||||
preferenceForLocalIndex(LIVE_UPDATES_ON_POSTFIX, info);
|
||||
if (preference.get()) {
|
||||
dataShouldUpdate.add(info);
|
||||
} else {
|
||||
dataShouldNotUpdate.add(info);
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyLiveUpdatesChanged() {
|
||||
for (LocalIndexInfo localIndexInfo : dataShouldUpdate) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference =
|
||||
preferenceForLocalIndex(LIVE_UPDATES_ON_POSTFIX, localIndexInfo);
|
||||
if (!preference.get()) {
|
||||
dataShouldUpdate.remove(localIndexInfo);
|
||||
dataShouldNotUpdate.add(localIndexInfo);
|
||||
}
|
||||
}
|
||||
for (LocalIndexInfo localIndexInfo : dataShouldNotUpdate) {
|
||||
OsmandSettings.CommonPreference<Boolean> preference =
|
||||
preferenceForLocalIndex(LIVE_UPDATES_ON_POSTFIX, localIndexInfo);
|
||||
if (preference.get()) {
|
||||
dataShouldUpdate.add(localIndexInfo);
|
||||
dataShouldNotUpdate.remove(localIndexInfo);
|
||||
}
|
||||
}
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void sort() {
|
||||
Collections.sort(dataShouldUpdate, LOCAL_INDEX_INFO_COMPARATOR);
|
||||
Collections.sort(dataShouldNotUpdate, LOCAL_INDEX_INFO_COMPARATOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
View view = convertView;
|
||||
if (view == null) {
|
||||
LayoutInflater inflater = LayoutInflater.from(getContext());
|
||||
view = inflater.inflate(R.layout.local_index_list_item, parent, false);
|
||||
view.setTag(new LocalFullMapsViewHolder(view, fragment));
|
||||
public LocalIndexInfo getChild(int groupPosition, int childPosition) {
|
||||
if (groupPosition == 0) {
|
||||
return dataShouldUpdate.get(childPosition);
|
||||
} else if (groupPosition == 1) {
|
||||
return dataShouldNotUpdate.get(childPosition);
|
||||
} else {
|
||||
throw new IllegalArgumentException("unexpected group position:" + groupPosition);
|
||||
}
|
||||
LocalFullMapsViewHolder viewHolder = (LocalFullMapsViewHolder) view.getTag();
|
||||
viewHolder.bindLocalIndexInfo(getItem(position));
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChildId(int groupPosition, int childPosition) {
|
||||
// it would be unusable to have 10000 local indexes
|
||||
return groupPosition * 10000 + childPosition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getChildView(final int groupPosition, final int childPosition,
|
||||
boolean isLastChild, View convertView, ViewGroup parent) {
|
||||
LocalFullMapsViewHolder viewHolder;
|
||||
if (convertView == null) {
|
||||
LayoutInflater inflater = LayoutInflater.from(ctx);
|
||||
convertView = inflater.inflate(R.layout.local_index_list_item, parent, false);
|
||||
viewHolder = new LocalFullMapsViewHolder(convertView, fragment);
|
||||
convertView.setTag(viewHolder);
|
||||
} else {
|
||||
viewHolder = (LocalFullMapsViewHolder) convertView.getTag();
|
||||
}
|
||||
viewHolder.bindLocalIndexInfo(getChild(groupPosition, childPosition));
|
||||
return convertView;
|
||||
}
|
||||
|
||||
|
||||
private String getNameToDisplay(LocalIndexInfo child) {
|
||||
String mapName = FileNameTranslationHelper.getFileName(ctx,
|
||||
fragment.getMyActivity().getMyApplication().getResourceManager().getOsmandRegions(),
|
||||
child.getFileName());
|
||||
return mapName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
|
||||
View v = convertView;
|
||||
String group = getGroup(groupPosition);
|
||||
if (v == null) {
|
||||
LayoutInflater inflater = LayoutInflater.from(ctx);
|
||||
v = inflater.inflate(R.layout.download_item_list_section, parent, false);
|
||||
}
|
||||
TextView nameView = ((TextView) v.findViewById(R.id.section_name));
|
||||
nameView.setText(group);
|
||||
|
||||
v.setOnClickListener(null);
|
||||
|
||||
TypedValue typedValue = new TypedValue();
|
||||
Resources.Theme theme = ctx.getTheme();
|
||||
theme.resolveAttribute(R.attr.ctx_menu_info_view_bg, typedValue, true);
|
||||
v.setBackgroundColor(typedValue.data);
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getChildrenCount(int groupPosition) {
|
||||
if (groupPosition == 0) {
|
||||
return dataShouldUpdate.size();
|
||||
} else if (groupPosition == 1) {
|
||||
return dataShouldNotUpdate.size();
|
||||
} else {
|
||||
throw new IllegalArgumentException("unexpected group position:" + groupPosition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGroup(int groupPosition) {
|
||||
if (groupPosition == 0) {
|
||||
return "Live updates on";
|
||||
} else if (groupPosition == 1) {
|
||||
return "Love updates off";
|
||||
} else {
|
||||
throw new IllegalArgumentException("unexpected group position:" + groupPosition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGroupCount() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getGroupId(int groupPosition) {
|
||||
return groupPosition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasStableIds() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isChildSelectable(int groupPosition, int childPosition) {
|
||||
return true;
|
||||
}
|
||||
|
||||
private OsmandSettings.CommonPreference<Boolean> preferenceForLocalIndex(String idPostfix,
|
||||
LocalIndexInfo item) {
|
||||
final OsmandApplication myApplication = fragment.getMyActivity().getMyApplication();
|
||||
final OsmandSettings settings = myApplication.getSettings();
|
||||
final String settingId = item.getFileName() + idPostfix;
|
||||
return settings.registerBooleanPreference(settingId, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void expandAllGroups() {
|
||||
for (int i = 0; i < adapter.getGroupCount(); i++) {
|
||||
listView.expandGroup(i);
|
||||
}
|
||||
}
|
||||
|
||||
void runLiveUpdate(final LocalIndexInfo info) {
|
||||
final String fnExt = Algorithms.getFileNameWithoutExtension(new File(info.getFileName()));
|
||||
new AsyncTask<Object, Object, IncrementalChangesManager.IncrementalUpdateList>() {
|
||||
|
||||
protected void onPreExecute() {
|
||||
getMyActivity().setSupportProgressBarIndeterminateVisibility(true);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IncrementalChangesManager.IncrementalUpdateList doInBackground(Object... params) {
|
||||
final OsmandApplication myApplication = getMyActivity().getMyApplication();
|
||||
IncrementalChangesManager cm = myApplication.getResourceManager().getChangesManager();
|
||||
return cm.getUpdatesByMonth(fnExt);
|
||||
}
|
||||
|
||||
protected void onPostExecute(IncrementalChangesManager.IncrementalUpdateList result) {
|
||||
getMyActivity().setSupportProgressBarIndeterminateVisibility(false);
|
||||
if (result.errorMessage != null) {
|
||||
Toast.makeText(getActivity(), result.errorMessage, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
List<IncrementalChangesManager.IncrementalUpdate> ll = result.getItemsForUpdate();
|
||||
if (ll.isEmpty()) {
|
||||
Toast.makeText(getActivity(), R.string.no_updates_available, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
int i = 0;
|
||||
IndexItem[] is = new IndexItem[ll.size()];
|
||||
for (IncrementalChangesManager.IncrementalUpdate iu : ll) {
|
||||
IndexItem ii = new IndexItem(iu.fileName, "Incremental update", iu.timestamp, iu.sizeText,
|
||||
iu.contentSize, iu.containerSize, DownloadActivityType.LIVE_UPDATES_FILE);
|
||||
is[i++] = ii;
|
||||
}
|
||||
getMyActivity().startDownload(is);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.execute(new Object[]{fnExt});
|
||||
}
|
||||
|
||||
LocalIndexInfo getLocalIndexInfo(int groupPosition, int childPosition) {
|
||||
return adapter.getChild(groupPosition, childPosition);
|
||||
}
|
||||
|
||||
private static class LocalFullMapsViewHolder {
|
||||
|
@ -115,7 +321,7 @@ public class LiveUpdatesFragment extends Fragment {
|
|||
this.fragment = context;
|
||||
}
|
||||
|
||||
public void bindLocalIndexInfo(LocalIndexInfo item) {
|
||||
public void bindLocalIndexInfo(final LocalIndexInfo item) {
|
||||
nameTextView.setText(item.getName());
|
||||
descriptionTextView.setText(item.getDescription());
|
||||
OsmandApplication context = fragment.getMyActivity().getMyApplication();
|
||||
|
@ -124,7 +330,7 @@ public class LiveUpdatesFragment extends Fragment {
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
final FragmentManager fragmentManager = fragment.getChildFragmentManager();
|
||||
new SettingsDialogFragment().show(fragmentManager, "settings");
|
||||
SettingsDialogFragment.createInstance(item).show(fragmentManager, "settings");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -135,18 +341,18 @@ public class LiveUpdatesFragment extends Fragment {
|
|||
implements AbstractLoadLocalIndexTask {
|
||||
|
||||
private List<LocalIndexInfo> result;
|
||||
private ArrayAdapter<LocalIndexInfo> adapter;
|
||||
private ActionBarProgressActivity activity;
|
||||
private LocalIndexesAdapter adapter;
|
||||
private LiveUpdatesFragment fragment;
|
||||
|
||||
public LoadLocalIndexTask(ArrayAdapter<LocalIndexInfo> adapter,
|
||||
ActionBarProgressActivity activity) {
|
||||
public LoadLocalIndexTask(LocalIndexesAdapter adapter,
|
||||
LiveUpdatesFragment fragment) {
|
||||
this.adapter = adapter;
|
||||
this.activity = activity;
|
||||
this.fragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<LocalIndexInfo> doInBackground(Void... params) {
|
||||
LocalIndexHelper helper = new LocalIndexHelper(activity.getMyApplication());
|
||||
LocalIndexHelper helper = new LocalIndexHelper(fragment.getMyActivity().getMyApplication());
|
||||
return helper.getLocalIndexData(this);
|
||||
}
|
||||
|
||||
|
@ -163,49 +369,13 @@ public class LiveUpdatesFragment extends Fragment {
|
|||
}
|
||||
}
|
||||
adapter.notifyDataSetChanged();
|
||||
fragment.expandAllGroups();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<LocalIndexInfo> result) {
|
||||
this.result = result;
|
||||
adapter.sort(new Comparator<LocalIndexInfo>() {
|
||||
@Override
|
||||
public int compare(@NonNull LocalIndexInfo lhs, @NonNull LocalIndexInfo rhs) {
|
||||
return lhs.getName().compareTo(rhs.getName());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static class SettingsDialogFragment extends DialogFragment {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
View view = LayoutInflater.from(getActivity())
|
||||
.inflate(R.layout.dialog_live_updates_item_settings, null);
|
||||
|
||||
builder.setView(view)
|
||||
.setPositiveButton("SAVE", null)
|
||||
.setNegativeButton("CANCEL", null)
|
||||
.setNeutralButton("UPDATE NOW", null);
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
private void initSwitch(ToggleButton toggleButton, String idPostfix, LocalIndexInfo item) {
|
||||
final OsmandApplication myApplication = ((OsmandActionBarActivity) this.getActivity()).getMyApplication();
|
||||
final OsmandSettings settings = myApplication.getSettings();
|
||||
final String settingId = item.getFileName() + idPostfix;
|
||||
final OsmandSettings.CommonPreference<Boolean> preference =
|
||||
settings.registerBooleanPreference(settingId, false);
|
||||
boolean initialValue = preference.get();
|
||||
toggleButton.setChecked(initialValue);
|
||||
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
preference.set(isChecked);
|
||||
}
|
||||
});
|
||||
adapter.sort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
package net.osmand.plus.liveupdates;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.SwitchCompat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
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.activities.OsmandActionBarActivity;
|
||||
|
||||
public class SettingsDialogFragment extends DialogFragment {
|
||||
public static final String LOCAL_INDEX = "local_index";
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
final LocalIndexInfo localIndexInfo = getArguments().getParcelable(LOCAL_INDEX);
|
||||
|
||||
View view = LayoutInflater.from(getActivity())
|
||||
.inflate(R.layout.dialog_live_updates_item_settings, null);
|
||||
final SwitchCompat liveUpdatesSwitch = (SwitchCompat) view.findViewById(R.id.liveUpdatesSwitch);
|
||||
|
||||
final OsmandSettings.CommonPreference<Boolean> liveUpdatePreference =
|
||||
preferenceForLocalIndex(LiveUpdatesFragment.LIVE_UPDATES_ON_POSTFIX, localIndexInfo);
|
||||
liveUpdatesSwitch.setChecked(liveUpdatePreference.get());
|
||||
|
||||
builder.setView(view)
|
||||
.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
liveUpdatePreference.set(liveUpdatesSwitch.isChecked());
|
||||
getLiveUpdatesFragment().notifyLiveUpdatesChanged();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.shared_string_cancel, null)
|
||||
.setNeutralButton(R.string.update_now, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
getLiveUpdatesFragment().runLiveUpdate(localIndexInfo);
|
||||
}
|
||||
});
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
private LiveUpdatesFragment getLiveUpdatesFragment() {
|
||||
return (LiveUpdatesFragment) getParentFragment();
|
||||
}
|
||||
|
||||
private OsmandSettings.CommonPreference<Boolean> preferenceForLocalIndex(String idPostfix,
|
||||
LocalIndexInfo item) {
|
||||
final OsmandApplication myApplication = ((OsmandActionBarActivity) this.getActivity()).getMyApplication();
|
||||
final OsmandSettings settings = myApplication.getSettings();
|
||||
final String settingId = item.getFileName() + idPostfix;
|
||||
return settings.registerBooleanPreference(settingId, false);
|
||||
}
|
||||
|
||||
public static SettingsDialogFragment createInstance(LocalIndexInfo localIndexInfo) {
|
||||
SettingsDialogFragment fragment = new SettingsDialogFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable(LOCAL_INDEX, localIndexInfo);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package net.osmand.plus.mapcontextmenu;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
@ -57,6 +58,8 @@ public class MapContextMenu extends MenuTitleController {
|
|||
|
||||
private int favActionIconId;
|
||||
|
||||
private MenuAction searchDoneAction;
|
||||
|
||||
@Override
|
||||
public MapActivity getMapActivity() {
|
||||
return mapActivity;
|
||||
|
@ -333,10 +336,19 @@ public class MapContextMenu extends MenuTitleController {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void refreshMenuTitle() {
|
||||
public void onSearchAddressDone() {
|
||||
WeakReference<MapContextMenuFragment> fragmentRef = findMenuFragment();
|
||||
if (fragmentRef != null)
|
||||
fragmentRef.get().refreshTitle();
|
||||
|
||||
if (searchDoneAction != null) {
|
||||
if (searchDoneAction.dlg != null) {
|
||||
searchDoneAction.dlg.dismiss();
|
||||
searchDoneAction.dlg = null;
|
||||
}
|
||||
searchDoneAction.run();
|
||||
searchDoneAction = null;
|
||||
}
|
||||
}
|
||||
|
||||
public WeakReference<MapContextMenuFragment> findMenuFragment() {
|
||||
|
@ -406,8 +418,22 @@ public class MapContextMenu extends MenuTitleController {
|
|||
if (pointDescription.isDestination()) {
|
||||
mapActivity.getMapActions().editWaypoints();
|
||||
} else {
|
||||
mapActivity.getMapActions().addAsTarget(latLon.getLatitude(), latLon.getLongitude(),
|
||||
pointDescription);
|
||||
MenuAction addAsTargetAction = new MenuAction() {
|
||||
@Override
|
||||
public void run() {
|
||||
mapActivity.getMapActions().addAsTarget(latLon.getLatitude(), latLon.getLongitude(),
|
||||
pointDescription);
|
||||
}
|
||||
};
|
||||
|
||||
if (searchingAddress) {
|
||||
addAsTargetAction.dlg = ProgressDialog.show(mapActivity,
|
||||
"",
|
||||
addressNotKnownStr);
|
||||
searchDoneAction = addAsTargetAction;
|
||||
} else {
|
||||
addAsTargetAction.run();
|
||||
}
|
||||
}
|
||||
close();
|
||||
}
|
||||
|
@ -668,4 +694,8 @@ public class MapContextMenu extends MenuTitleController {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
private abstract class MenuAction implements Runnable {
|
||||
protected ProgressDialog dlg;
|
||||
}
|
||||
}
|
|
@ -23,6 +23,7 @@ public abstract class MenuTitleController {
|
|||
protected Drawable secondLineTypeIcon;
|
||||
protected String streetStr = "";
|
||||
protected String addressNotKnownStr;
|
||||
protected boolean searchingAddress;
|
||||
|
||||
public abstract MapActivity getMapActivity();
|
||||
|
||||
|
@ -131,6 +132,7 @@ public abstract class MenuTitleController {
|
|||
}
|
||||
|
||||
protected void acquireStreetName() {
|
||||
searchingAddress = true;
|
||||
Location ll = new Location("");
|
||||
ll.setLatitude(getLatLon().getLatitude());
|
||||
ll.setLongitude(getLatLon().getLongitude());
|
||||
|
@ -183,9 +185,10 @@ public abstract class MenuTitleController {
|
|||
nameStr = streetStr;
|
||||
getPointDescription().setName(nameStr);
|
||||
}
|
||||
searchingAddress = false;
|
||||
getMapActivity().runOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
refreshMenuTitle();
|
||||
onSearchAddressDone();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -195,12 +198,14 @@ public abstract class MenuTitleController {
|
|||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
searchingAddress = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract void refreshMenuTitle();
|
||||
protected void onSearchAddressDone() {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -73,10 +73,6 @@ public class MapMultiSelectionMenu extends BaseMenuController {
|
|||
return controller;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void refreshMenuTitle() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean needStreetName() {
|
||||
return false;
|
||||
|
|
|
@ -1,16 +1,21 @@
|
|||
package net.osmand.plus.mapcontextmenu.other;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnDismissListener;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
@ -21,10 +26,9 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.ApplicationMode;
|
||||
import net.osmand.plus.IconsCache;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmAndLocationProvider;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.TargetPointsHelper;
|
||||
|
@ -34,8 +38,8 @@ import net.osmand.plus.activities.MapActivity;
|
|||
import net.osmand.plus.activities.ShowRouteInfoActivity;
|
||||
import net.osmand.plus.activities.actions.AppModeDialog;
|
||||
import net.osmand.plus.activities.search.SearchAddressActivity;
|
||||
import net.osmand.plus.development.OsmandDevelopmentPlugin;
|
||||
import net.osmand.plus.dialogs.FavoriteDialogs;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||
import net.osmand.plus.routing.RouteDirectionInfo;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
|
@ -43,27 +47,31 @@ import net.osmand.plus.routing.RoutingHelper.IRouteInformationListener;
|
|||
import net.osmand.plus.views.MapControlsLayer;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class MapRouteInfoControl implements IRouteInformationListener {
|
||||
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
||||
|
||||
public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||
public static int directionInfo = -1;
|
||||
public static boolean controlVisible = false;
|
||||
private final MapContextMenu contextMenu;
|
||||
private final RoutingHelper routingHelper;
|
||||
private OsmandMapTileView mapView;
|
||||
private Dialog dialog;
|
||||
private boolean selectFromMapTouch;
|
||||
private boolean selectFromMapTouch;
|
||||
private boolean selectFromMapForTarget;
|
||||
|
||||
private boolean showDialog = false;
|
||||
private boolean showMenu = false;
|
||||
private MapActivity mapActivity;
|
||||
private MapControlsLayer mapControlsLayer;
|
||||
public static final String TARGET_SELECT = "TARGET_SELECT";
|
||||
private boolean nightMode;
|
||||
private boolean switched;
|
||||
|
||||
public MapRouteInfoControl(MapActivity mapActivity, MapControlsLayer mapControlsLayer) {
|
||||
public MapRouteInfoMenu(MapActivity mapActivity, MapControlsLayer mapControlsLayer) {
|
||||
this.mapActivity = mapActivity;
|
||||
this.mapControlsLayer = mapControlsLayer;
|
||||
contextMenu = mapActivity.getContextMenu();
|
||||
|
@ -71,61 +79,60 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
mapView = mapActivity.getMapView();
|
||||
routingHelper.addListener(this);
|
||||
}
|
||||
|
||||
|
||||
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
|
||||
if(selectFromMapTouch) {
|
||||
if (selectFromMapTouch) {
|
||||
LatLon latlon = tileBox.getLatLonFromPixel(point.x, point.y);
|
||||
selectFromMapTouch = false;
|
||||
if(selectFromMapForTarget) {
|
||||
if (selectFromMapForTarget) {
|
||||
getTargets().navigateToPoint(latlon, true, -1);
|
||||
} else {
|
||||
getTargets().setStartPoint(latlon, true, null);
|
||||
}
|
||||
contextMenu.showMinimized(latlon, null, null);
|
||||
showDialog();
|
||||
show();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
if(visible) {
|
||||
if (showDialog){
|
||||
//if (getTargets().getPointToNavigate() == null){
|
||||
showDialog();
|
||||
//}
|
||||
showDialog = false;
|
||||
if (visible) {
|
||||
if (showMenu) {
|
||||
show();
|
||||
showMenu = false;
|
||||
}
|
||||
controlVisible = true;
|
||||
} else {
|
||||
hideDialog();
|
||||
hide();
|
||||
controlVisible = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void showHideDialog() {
|
||||
if(dialog != null) {
|
||||
hideDialog();
|
||||
|
||||
|
||||
public void showHideMenu() {
|
||||
if (isVisible()) {
|
||||
hide();
|
||||
} else {
|
||||
showDialog();
|
||||
show();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateDialog() {
|
||||
if(dialog != null) {
|
||||
updateInfo(dialog.findViewById(R.id.plan_route_info));
|
||||
}
|
||||
|
||||
public void updateMenu() {
|
||||
WeakReference<MapRouteInfoMenuFragment> fragmentRef = findMenuFragment();
|
||||
if (fragmentRef != null)
|
||||
fragmentRef.get().updateInfo();
|
||||
}
|
||||
|
||||
private void updateInfo(final View main) {
|
||||
|
||||
public void updateInfo(final View main) {
|
||||
nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightMode();
|
||||
updateViaView(main);
|
||||
updateFromSpinner(main);
|
||||
updateToSpinner(main);
|
||||
updateApplicationModes(main);
|
||||
mapControlsLayer.updateRouteButtons(main, true);
|
||||
boolean addButtons = routingHelper.isRouteCalculated();
|
||||
if(addButtons) {
|
||||
if (addButtons) {
|
||||
updateRouteButtons(main);
|
||||
} else {
|
||||
updateRouteCalcProgress(main);
|
||||
|
@ -134,7 +141,8 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
|
||||
private void updateRouteCalcProgress(final View main) {
|
||||
TargetPointsHelper targets = getTargets();
|
||||
if(targets.hasTooLongDistanceToNavigate()) {
|
||||
if (targets.hasTooLongDistanceToNavigate()) {
|
||||
main.findViewById(R.id.dividerToDropDown).setVisibility(View.VISIBLE);
|
||||
main.findViewById(R.id.RouteInfoControls).setVisibility(View.VISIBLE);
|
||||
TextView textView = (TextView) main.findViewById(R.id.InfoTextView);
|
||||
ImageView iconView = (ImageView) main.findViewById(R.id.InfoIcon);
|
||||
|
@ -142,8 +150,9 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
main.findViewById(R.id.Next).setVisibility(View.GONE);
|
||||
textView.setText(R.string.route_is_too_long);
|
||||
textView.setVisibility(View.VISIBLE);
|
||||
iconView.setImageDrawable(mapActivity.getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_warning));
|
||||
} else{
|
||||
iconView.setImageDrawable(mapActivity.getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_warning, isLight()));
|
||||
} else {
|
||||
main.findViewById(R.id.dividerToDropDown).setVisibility(View.GONE);
|
||||
main.findViewById(R.id.RouteInfoControls).setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
@ -151,12 +160,12 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
private void updateApplicationModes(final View parentView) {
|
||||
final OsmandSettings settings = mapActivity.getMyApplication().getSettings();
|
||||
ApplicationMode am = settings.APPLICATION_MODE.get();
|
||||
final Set<ApplicationMode> selected = new HashSet<ApplicationMode>();
|
||||
final Set<ApplicationMode> selected = new HashSet<>();
|
||||
selected.add(am);
|
||||
ViewGroup vg = (ViewGroup) parentView.findViewById(R.id.app_modes);
|
||||
vg.removeAllViews();
|
||||
AppModeDialog.prepareAppModeView(mapActivity, selected, false,
|
||||
vg, true, new View.OnClickListener() {
|
||||
vg, true, true, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (selected.size() > 0) {
|
||||
|
@ -165,86 +174,139 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private void updateViaView(final View parentView) {
|
||||
String via = generateViaDescription();
|
||||
if(via.length() == 0){
|
||||
parentView.findViewById(R.id.ViaLayout).setVisibility(View.GONE);
|
||||
View viaLayout = parentView.findViewById(R.id.ViaLayout);
|
||||
if (via.length() == 0) {
|
||||
viaLayout.setVisibility(View.GONE);
|
||||
parentView.findViewById(R.id.viaLayoutDivider).setVisibility(View.GONE);
|
||||
} else {
|
||||
parentView.findViewById(R.id.ViaLayout).setVisibility(View.VISIBLE);
|
||||
viaLayout.setVisibility(View.VISIBLE);
|
||||
parentView.findViewById(R.id.viaLayoutDivider).setVisibility(View.VISIBLE);
|
||||
((TextView) parentView.findViewById(R.id.ViaView)).setText(via);
|
||||
}
|
||||
|
||||
viaLayout.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (getTargets().checkPointToNavigateShort()) {
|
||||
mapActivity.getMapActions().openIntermediatePointsDialog();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ImageView viaIcon = (ImageView) parentView.findViewById(R.id.viaIcon);
|
||||
if (isLight()) {
|
||||
viaIcon.setImageDrawable(getIconOrig(R.drawable.widget_intermediate_day));
|
||||
} else {
|
||||
viaIcon.setImageDrawable(getIconOrig(R.drawable.widget_intermediate_night));
|
||||
}
|
||||
}
|
||||
|
||||
private void updateToSpinner(final View parentView) {
|
||||
final Spinner toSpinner = setupToSpinner(parentView);
|
||||
toSpinner.setClickable(false);
|
||||
toSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
if(position == 1) {
|
||||
if (position == 1) {
|
||||
selectFavorite(parentView, true);
|
||||
} else if(position == 2) {
|
||||
selectOnScreen(parentView, true);
|
||||
} else if(position == 3) {
|
||||
} else if (position == 2) {
|
||||
selectOnScreen(true);
|
||||
} else if (position == 3) {
|
||||
Intent intent = new Intent(mapActivity, SearchAddressActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
intent.putExtra(TARGET_SELECT, true);
|
||||
mapActivity.startActivityForResult(intent, MapControlsLayer.REQUEST_ADDRESS_SELECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
}
|
||||
});
|
||||
|
||||
parentView.findViewById(R.id.ToLayout).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
toSpinner.performClick();
|
||||
}
|
||||
});
|
||||
|
||||
ImageView toIcon = (ImageView) parentView.findViewById(R.id.toIcon);
|
||||
if (isLight()) {
|
||||
toIcon.setImageDrawable(getIconOrig(R.drawable.widget_target_day));
|
||||
} else {
|
||||
toIcon.setImageDrawable(getIconOrig(R.drawable.widget_target_night));
|
||||
}
|
||||
|
||||
ImageView toDropDownIcon = (ImageView) parentView.findViewById(R.id.toDropDownIcon);
|
||||
toDropDownIcon.setImageDrawable(mapActivity.getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_action_arrow_drop_down, isLight()));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void updateFromSpinner(final View parentView) {
|
||||
final TargetPointsHelper targets = getTargets();
|
||||
final Spinner fromSpinner = setupFromSpinner(parentView);
|
||||
fromSpinner.setClickable(false);
|
||||
fromSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
if(position == 0) {
|
||||
if(targets.getPointToStart() != null) {
|
||||
if (position == 0) {
|
||||
if (targets.getPointToStart() != null) {
|
||||
targets.clearStartPoint(true);
|
||||
}
|
||||
} else if(position == 1) {
|
||||
} else if (position == 1) {
|
||||
selectFavorite(parentView, false);
|
||||
} else if(position == 2) {
|
||||
selectOnScreen(parentView, false);
|
||||
} else if(position == 3) {
|
||||
} else if (position == 2) {
|
||||
selectOnScreen(false);
|
||||
} else if (position == 3) {
|
||||
Intent intent = new Intent(mapActivity, SearchAddressActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
intent.putExtra(TARGET_SELECT, false);
|
||||
mapActivity.startActivityForResult(intent, MapControlsLayer.REQUEST_ADDRESS_SELECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
}
|
||||
});
|
||||
|
||||
parentView.findViewById(R.id.FromLayout).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
fromSpinner.performClick();
|
||||
}
|
||||
});
|
||||
|
||||
ImageView fromIcon = (ImageView) parentView.findViewById(R.id.fromIcon);
|
||||
ApplicationMode appMode = mapActivity.getMyApplication().getSettings().getApplicationMode();
|
||||
fromIcon.setImageDrawable(mapActivity.getResources().getDrawable(appMode.getResourceLocationDay()));
|
||||
|
||||
ImageView fromDropDownIcon = (ImageView) parentView.findViewById(R.id.fromDropDownIcon);
|
||||
fromDropDownIcon.setImageDrawable(mapActivity.getMyApplication().getIconsCache().getContentIcon(R.drawable.ic_action_arrow_drop_down, isLight()));
|
||||
}
|
||||
|
||||
protected void selectOnScreen(View parentView, boolean target) {
|
||||
protected void selectOnScreen(boolean target) {
|
||||
selectFromMapTouch = true;
|
||||
selectFromMapForTarget = target;
|
||||
hideDialog();
|
||||
selectFromMapForTarget = target;
|
||||
hide();
|
||||
}
|
||||
|
||||
|
||||
public void selectAddress(String name, LatLon l, final boolean target) {
|
||||
PointDescription pd = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, name);
|
||||
if(target) {
|
||||
if (target) {
|
||||
getTargets().navigateToPoint(l, true, -1, pd);
|
||||
} else {
|
||||
getTargets().setStartPoint(l, true, pd);
|
||||
}
|
||||
hideDialog();
|
||||
showDialog();
|
||||
hide();
|
||||
show();
|
||||
}
|
||||
|
||||
protected void selectFavorite(final View parentView, final boolean target) {
|
||||
|
@ -267,26 +329,34 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
FavoriteDialogs.showFavoritesDialog(mapActivity, favouritesAdapter, click, dismissListener, dlgHolder, true);
|
||||
}
|
||||
|
||||
private boolean isLight() {
|
||||
return !nightMode;
|
||||
}
|
||||
|
||||
private Drawable getIconOrig(int iconId) {
|
||||
IconsCache iconsCache = mapActivity.getMyApplication().getIconsCache();
|
||||
return iconsCache.getIcon(iconId, 0, 0f);
|
||||
}
|
||||
|
||||
private OnItemClickListener getOnClickListener(final boolean target, final FavouritesAdapter favouritesAdapter,
|
||||
final Dialog[] dlg) {
|
||||
final Dialog[] dlg) {
|
||||
return new AdapterView.OnItemClickListener() {
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
FavouritePoint fp = favouritesAdapter.getItem(position);
|
||||
LatLon point = new LatLon(fp.getLatitude(), fp.getLongitude());
|
||||
if(target) {
|
||||
if (target) {
|
||||
getTargets().navigateToPoint(point, true, -1, fp.getPointDescription());
|
||||
} else {
|
||||
getTargets().setStartPoint(point, true, fp.getPointDescription());
|
||||
}
|
||||
if(dlg != null && dlg.length > 0 && dlg[0] != null) {
|
||||
if (dlg != null && dlg.length > 0 && dlg[0] != null) {
|
||||
dlg[0].dismiss();
|
||||
}
|
||||
//Next 2 lines ensure Dialog is shown in the right correct position after a selection been made
|
||||
hideDialog();
|
||||
showDialog();
|
||||
hide();
|
||||
show();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -294,20 +364,30 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
public static int getDirectionInfo() {
|
||||
return directionInfo;
|
||||
}
|
||||
|
||||
public boolean isDialogVisible() {
|
||||
return dialog != null && dialog.isShowing();
|
||||
|
||||
public boolean isVisible() {
|
||||
return findMenuFragment() != null;
|
||||
}
|
||||
|
||||
public WeakReference<MapRouteInfoMenuFragment> findMenuFragment() {
|
||||
Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag(MapRouteInfoMenuFragment.TAG);
|
||||
if (fragment != null && !fragment.isDetached()) {
|
||||
return new WeakReference<>((MapRouteInfoMenuFragment) fragment);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isControlVisible() {
|
||||
return controlVisible;
|
||||
}
|
||||
|
||||
|
||||
private void updateRouteButtons(final View mainView) {
|
||||
mainView.findViewById(R.id.dividerToDropDown).setVisibility(View.VISIBLE);
|
||||
mainView.findViewById(R.id.RouteInfoControls).setVisibility(View.VISIBLE);
|
||||
final OsmandApplication ctx = mapActivity.getMyApplication();
|
||||
ImageView prev = (ImageView) mainView.findViewById(R.id.Prev);
|
||||
prev.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_prev));
|
||||
prev.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_prev, isLight()));
|
||||
if (directionInfo >= 0) {
|
||||
prev.setVisibility(View.VISIBLE);
|
||||
prev.setOnClickListener(new View.OnClickListener() {
|
||||
|
@ -336,11 +416,11 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
}
|
||||
ImageView next = (ImageView) mainView.findViewById(R.id.Next);
|
||||
next.setVisibility(View.VISIBLE);
|
||||
next.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_next));
|
||||
next.setOnClickListener(new View.OnClickListener(){
|
||||
next.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_next, isLight()));
|
||||
next.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if(routingHelper.getRouteDirections() != null && directionInfo < routingHelper.getRouteDirections().size() - 1){
|
||||
if (routingHelper.getRouteDirections() != null && directionInfo < routingHelper.getRouteDirections().size() - 1) {
|
||||
directionInfo++;
|
||||
RouteDirectionInfo info = routingHelper.getRouteDirections().get(directionInfo);
|
||||
net.osmand.Location l = routingHelper.getLocationFromRouteDirection(info);
|
||||
|
@ -350,10 +430,10 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
mapView.refreshMap();
|
||||
updateInfo(mainView);
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
View info = mainView.findViewById(R.id.Info);
|
||||
info.setOnClickListener(new View.OnClickListener(){
|
||||
info.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(mapView.getContext(), ShowRouteInfoActivity.class);
|
||||
|
@ -361,144 +441,143 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
mapView.getContext().startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
TextView textView = (TextView) mainView.findViewById(R.id.InfoTextView);
|
||||
ImageView iconView = (ImageView) mainView.findViewById(R.id.InfoIcon);
|
||||
if(directionInfo >= 0) {
|
||||
iconView.setVisibility(View.GONE);
|
||||
ImageView infoIcon = (ImageView) mainView.findViewById(R.id.InfoIcon);
|
||||
ImageView durationIcon = (ImageView) mainView.findViewById(R.id.DurationIcon);
|
||||
View infoDistanceView = mainView.findViewById(R.id.InfoDistance);
|
||||
View infoDurationView = mainView.findViewById(R.id.InfoDuration);
|
||||
if (directionInfo >= 0) {
|
||||
infoIcon.setVisibility(View.GONE);
|
||||
durationIcon.setVisibility(View.GONE);
|
||||
infoDistanceView.setVisibility(View.GONE);
|
||||
infoDurationView.setVisibility(View.GONE);
|
||||
textView.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
iconView.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_action_info_dark));
|
||||
iconView.setVisibility(View.VISIBLE);
|
||||
infoIcon.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_action_polygom_dark, isLight()));
|
||||
infoIcon.setVisibility(View.VISIBLE);
|
||||
durationIcon.setImageDrawable(ctx.getIconsCache().getContentIcon(R.drawable.ic_action_time, isLight()));
|
||||
durationIcon.setVisibility(View.VISIBLE);
|
||||
infoDistanceView.setVisibility(View.VISIBLE);
|
||||
infoDurationView.setVisibility(View.VISIBLE);
|
||||
textView.setVisibility(View.GONE);
|
||||
}
|
||||
if (directionInfo >= 0 && routingHelper.getRouteDirections() != null
|
||||
&& directionInfo < routingHelper.getRouteDirections().size()) {
|
||||
RouteDirectionInfo ri = routingHelper.getRouteDirections().get(directionInfo);
|
||||
textView.setText((directionInfo + 1) + ". " + ri.getDescriptionRoutePart() + " " + OsmAndFormatter.getFormattedDistance(ri.distance, ctx));
|
||||
} else {
|
||||
textView.setText(ctx.getRoutingHelper().getGeneralRouteInformation().replace(",", ",\n"));
|
||||
}
|
||||
}
|
||||
|
||||
private Button attachSimulateRoute(final View mainView, final OsmandApplication ctx) {
|
||||
final Button simulateRoute = null;//(Button) mainView.findViewById(R.id.SimulateRoute);
|
||||
final OsmAndLocationProvider loc = ctx.getLocationProvider();
|
||||
if(mapActivity.getRoutingHelper().isFollowingMode()) {
|
||||
simulateRoute.setVisibility(View.GONE);
|
||||
}
|
||||
if (OsmandPlugin.getEnabledPlugin(OsmandDevelopmentPlugin.class) == null) {
|
||||
simulateRoute.setVisibility(View.GONE);
|
||||
}
|
||||
simulateRoute.setText(loc.getLocationSimulation().isRouteAnimating() ? R.string.animate_route_off : R.string.animate_route);
|
||||
simulateRoute.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mainView.findViewById(R.id.RouteInfoControls).setVisibility(View.GONE);
|
||||
if(loc.getLocationSimulation().isRouteAnimating()) {
|
||||
loc.getLocationSimulation().startStopRouteAnimation(mapActivity);
|
||||
hideDialog();
|
||||
} else {
|
||||
simulateRoute.setText(R.string.animate_route_off);
|
||||
loc.getLocationSimulation().startStopRouteAnimation(mapActivity);
|
||||
}
|
||||
|
||||
TextView distanceText = (TextView) mainView.findViewById(R.id.DistanceText);
|
||||
TextView durationText = (TextView) mainView.findViewById(R.id.DurationText);
|
||||
distanceText.setText(OsmAndFormatter.getFormattedDistance(ctx.getRoutingHelper().getLeftDistance(), ctx));
|
||||
int leftTime = ctx.getRoutingHelper().getLeftTime();
|
||||
int hours = leftTime / (60 * 60);
|
||||
int minutes = (leftTime / 60) % 60;
|
||||
if (hours > 0) {
|
||||
durationText.setText(hours + " "
|
||||
+ ctx.getString(R.string.osmand_parking_hour)
|
||||
+ (minutes > 0 ? " " + minutes + " "
|
||||
+ ctx.getString(R.string.osmand_parking_minute) : ""));
|
||||
} else {
|
||||
durationText.setText(minutes + " "
|
||||
+ ctx.getString(R.string.osmand_parking_minute));
|
||||
}
|
||||
});
|
||||
return simulateRoute;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void newRouteIsCalculated(boolean newRoute, ValueHolder<Boolean> showToast) {
|
||||
directionInfo = -1;
|
||||
updateDialog();
|
||||
if(isDialogVisible()) {
|
||||
updateMenu();
|
||||
if (isVisible()) {
|
||||
showToast.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String generateViaDescription() {
|
||||
TargetPointsHelper targets = getTargets();
|
||||
String via = "";
|
||||
List<TargetPoint> points = targets.getIntermediatePointsNavigation();
|
||||
if (points.size() == 0) {
|
||||
return via;
|
||||
return "";
|
||||
}
|
||||
StringBuilder via = new StringBuilder();
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
if (i > 0) {
|
||||
via += "\n";
|
||||
via.append(" ");
|
||||
}
|
||||
via += " " + getRoutePointDescription(points.get(i).point, points.get(i).getOnlyName());
|
||||
via.append(getRoutePointDescription(points.get(i).point, points.get(i).getOnlyName()));
|
||||
}
|
||||
return via;
|
||||
return via.toString();
|
||||
}
|
||||
|
||||
|
||||
public String getRoutePointDescription(double lat, double lon) {
|
||||
return mapActivity.getString(R.string.route_descr_lat_lon, lat, lon);
|
||||
}
|
||||
|
||||
|
||||
public String getRoutePointDescription(LatLon l, String d) {
|
||||
if(d != null && d.length() > 0) {
|
||||
if (d != null && d.length() > 0) {
|
||||
return d.replace(':', ' ');
|
||||
}
|
||||
if(l != null) {
|
||||
if (l != null) {
|
||||
return mapActivity.getString(R.string.route_descr_lat_lon, l.getLatitude(), l.getLongitude());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private Spinner setupFromSpinner( View view) {
|
||||
ArrayList<String> fromActions = new ArrayList<String>();
|
||||
fromActions.add(mapActivity.getString(R.string.route_descr_current_location));
|
||||
fromActions.add(mapActivity.getString(R.string.shared_string_favorite) + mapActivity.getString(R.string.shared_string_ellipsis));
|
||||
fromActions.add(mapActivity.getString(R.string.shared_string_select_on_map));
|
||||
fromActions.add(mapActivity.getString(R.string.shared_string_address) + mapActivity.getString(R.string.shared_string_ellipsis));
|
||||
|
||||
|
||||
private Spinner setupFromSpinner(View view) {
|
||||
ArrayList<RouteSpinnerRow> fromActions = new ArrayList<>();
|
||||
fromActions.add(new RouteSpinnerRow(R.drawable.ic_action_get_my_location,
|
||||
mapActivity.getString(R.string.route_descr_current_location)));
|
||||
fromActions.add(new RouteSpinnerRow(R.drawable.ic_action_fav_dark,
|
||||
mapActivity.getString(R.string.shared_string_favorite) + mapActivity.getString(R.string.shared_string_ellipsis)));
|
||||
fromActions.add(new RouteSpinnerRow(R.drawable.ic_action_marker_dark,
|
||||
mapActivity.getString(R.string.shared_string_select_on_map)));
|
||||
fromActions.add(new RouteSpinnerRow(R.drawable.ic_action_home_dark,
|
||||
mapActivity.getString(R.string.shared_string_address) + mapActivity.getString(R.string.shared_string_ellipsis)));
|
||||
|
||||
TargetPoint start = getTargets().getPointToStart();
|
||||
if (start != null) {
|
||||
String oname = start.getOnlyName().length() > 0 ? start.getOnlyName()
|
||||
: (mapActivity.getString(R.string.route_descr_map_location) + " " + getRoutePointDescription(start.getLatitude(), start.getLongitude()));
|
||||
fromActions.add(oname);
|
||||
fromActions.add(new RouteSpinnerRow(R.drawable.ic_action_get_my_location, oname));
|
||||
}
|
||||
final Spinner fromSpinner = ((Spinner) view.findViewById(R.id.FromSpinner));
|
||||
ArrayAdapter<String> fromAdapter = new ArrayAdapter<String>(view.getContext(),
|
||||
android.R.layout.simple_spinner_item,
|
||||
fromActions
|
||||
);
|
||||
fromAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
RouteSpinnerArrayAdapter fromAdapter = new RouteSpinnerArrayAdapter(view.getContext());
|
||||
fromAdapter.addAll(fromActions);
|
||||
fromSpinner.setAdapter(fromAdapter);
|
||||
if(start != null) {
|
||||
if (start != null) {
|
||||
fromSpinner.setSelection(fromActions.size() - 1);
|
||||
} else {
|
||||
if(mapActivity.getMyApplication().getLocationProvider().getLastKnownLocation() == null) {
|
||||
if (mapActivity.getMyApplication().getLocationProvider().getLastKnownLocation() == null) {
|
||||
fromSpinner.setPromptId(R.string.search_poi_location);
|
||||
}
|
||||
//fromSpinner.setSelection(0);
|
||||
}
|
||||
return fromSpinner;
|
||||
}
|
||||
|
||||
|
||||
private Spinner setupToSpinner(View view) {
|
||||
final Spinner toSpinner = ((Spinner) view.findViewById(R.id.ToSpinner));
|
||||
final TargetPointsHelper targets = getTargets();
|
||||
ArrayList<String> toActions = new ArrayList<String>();
|
||||
ArrayList<RouteSpinnerRow> toActions = new ArrayList<>();
|
||||
if (targets.getPointToNavigate() != null) {
|
||||
toActions.add(mapActivity.getString(R.string.route_descr_destination) + " "
|
||||
+ getRoutePointDescription(targets.getPointToNavigate().point,
|
||||
targets.getPointToNavigate().getOnlyName()));
|
||||
toActions.add(new RouteSpinnerRow(R.drawable.ic_action_get_my_location,
|
||||
getRoutePointDescription(targets.getPointToNavigate().point,
|
||||
targets.getPointToNavigate().getOnlyName())));
|
||||
} else {
|
||||
toSpinner.setPromptId(R.string.route_descr_select_destination);
|
||||
toActions.add(mapActivity.getString(R.string.route_descr_select_destination));
|
||||
toActions.add(new RouteSpinnerRow(R.drawable.ic_action_get_my_location,
|
||||
mapActivity.getString(R.string.route_descr_select_destination)));
|
||||
}
|
||||
toActions.add(mapActivity.getString(R.string.shared_string_favorite) + mapActivity.getString(R.string.shared_string_ellipsis));
|
||||
toActions.add(mapActivity.getString(R.string.shared_string_select_on_map));
|
||||
toActions.add(mapActivity.getString(R.string.shared_string_address) + mapActivity.getString(R.string.shared_string_ellipsis));
|
||||
|
||||
ArrayAdapter<String> toAdapter = new ArrayAdapter<String>(view.getContext(),
|
||||
android.R.layout.simple_spinner_item,
|
||||
toActions
|
||||
);
|
||||
toAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
toActions.add(new RouteSpinnerRow(R.drawable.ic_action_fav_dark,
|
||||
mapActivity.getString(R.string.shared_string_favorite) + mapActivity.getString(R.string.shared_string_ellipsis)));
|
||||
toActions.add(new RouteSpinnerRow(R.drawable.ic_action_marker_dark,
|
||||
mapActivity.getString(R.string.shared_string_select_on_map)));
|
||||
toActions.add(new RouteSpinnerRow(R.drawable.ic_action_home_dark,
|
||||
mapActivity.getString(R.string.shared_string_address) + mapActivity.getString(R.string.shared_string_ellipsis)));
|
||||
|
||||
RouteSpinnerArrayAdapter toAdapter = new RouteSpinnerArrayAdapter(view.getContext());
|
||||
toAdapter.addAll(toActions);
|
||||
toSpinner.setAdapter(toAdapter);
|
||||
return toSpinner;
|
||||
}
|
||||
|
@ -510,36 +589,97 @@ public class MapRouteInfoControl implements IRouteInformationListener {
|
|||
@Override
|
||||
public void routeWasCancelled() {
|
||||
directionInfo = -1;
|
||||
// do not hide dialog (needed for use case entering Planning mode without destination)
|
||||
// do not hide fragment (needed for use case entering Planning mode without destination)
|
||||
}
|
||||
|
||||
|
||||
public void showDialog() {
|
||||
final View ll = mapActivity.getLayoutInflater().inflate(R.layout.plan_route_info, null);
|
||||
updateInfo(ll);
|
||||
dialog = MapRoutePreferencesControl.showDialog(mapControlsLayer, mapActivity, ll, new OnDismissListener() {
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface d) {
|
||||
dialog = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void hideDialog() {
|
||||
Dialog dialog = this.dialog;
|
||||
if (dialog != null) {
|
||||
if(dialog instanceof MapRoutePreferencesControl.RoutePrepareDialog &&
|
||||
((MapRoutePreferencesControl.RoutePrepareDialog) dialog).getListener() != null) {
|
||||
((MapRoutePreferencesControl.RoutePrepareDialog) dialog).getListener().onDismiss(dialog);
|
||||
((MapRoutePreferencesControl.RoutePrepareDialog) dialog).cancelDismissListener();
|
||||
}
|
||||
dialog.dismiss();
|
||||
this.dialog = null;
|
||||
public void onDismiss() {
|
||||
mapActivity.getMapView().setMapPositionX(0);
|
||||
mapActivity.getMapView().refreshMap();
|
||||
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_route_land_left_margin), false);
|
||||
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_right_widgets_panel), true);
|
||||
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_left_widgets_panel), true);
|
||||
if (switched) {
|
||||
mapControlsLayer.switchToRouteFollowingLayout();
|
||||
}
|
||||
}
|
||||
|
||||
public void setShowDialog() {
|
||||
showDialog = true;
|
||||
public void show() {
|
||||
switched = mapControlsLayer.switchToRoutePlanningLayout();
|
||||
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
|
||||
if (!portrait) {
|
||||
mapActivity.getMapView().setMapPositionX(1);
|
||||
mapActivity.getMapView().refreshMap();
|
||||
}
|
||||
|
||||
MapRouteInfoMenuFragment.showInstance(mapActivity);
|
||||
|
||||
if (!AndroidUiHelper.isXLargeDevice(mapActivity)) {
|
||||
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_right_widgets_panel), false);
|
||||
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_left_widgets_panel), false);
|
||||
}
|
||||
if (!portrait) {
|
||||
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_route_land_left_margin), true);
|
||||
}
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
WeakReference<MapRouteInfoMenuFragment> fragmentRef = findMenuFragment();
|
||||
if (fragmentRef != null) {
|
||||
fragmentRef.get().dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
public void setShowMenu() {
|
||||
showMenu = true;
|
||||
}
|
||||
|
||||
private class RouteSpinnerRow {
|
||||
int iconId;
|
||||
String text;
|
||||
|
||||
public RouteSpinnerRow(int iconId, String text) {
|
||||
this.iconId = iconId;
|
||||
this.text = text;
|
||||
}
|
||||
}
|
||||
|
||||
private class RouteSpinnerArrayAdapter extends ArrayAdapter<RouteSpinnerRow> {
|
||||
|
||||
public RouteSpinnerArrayAdapter(Context context) {
|
||||
super(context, android.R.layout.simple_spinner_item);
|
||||
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
TextView label = (TextView) super.getView(position, convertView, parent);
|
||||
RouteSpinnerRow row = getItem(position);
|
||||
label.setText(row.text);
|
||||
label.setTextColor(!isLight() ?
|
||||
ContextCompat.getColorStateList(mapActivity, android.R.color.primary_text_dark) : ContextCompat.getColorStateList(mapActivity, android.R.color.primary_text_light));
|
||||
return label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||
TextView label = (TextView) super.getDropDownView(position, convertView, parent);
|
||||
|
||||
RouteSpinnerRow row = getItem(position);
|
||||
label.setText(row.text);
|
||||
Drawable icon = mapActivity.getMyApplication().getIconsCache().getContentIcon(row.iconId);
|
||||
label.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
|
||||
label.setCompoundDrawablePadding(dpToPx(12f));
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
private int dpToPx(float dp) {
|
||||
Resources r = mapActivity.getResources();
|
||||
return (int) TypedValue.applyDimension(
|
||||
COMPLEX_UNIT_DIP,
|
||||
dp,
|
||||
r.getDisplayMetrics()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,196 @@
|
|||
package net.osmand.plus.mapcontextmenu.other;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
|
||||
public class MapRouteInfoMenuFragment extends Fragment {
|
||||
public static final String TAG = "MapRouteInfoMenuFragment";
|
||||
|
||||
private MapRouteInfoMenu menu;
|
||||
private View mainView;
|
||||
|
||||
private MapActivity getMapActivity() {
|
||||
return (MapActivity) getActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
|
||||
menu = mapActivity.getMapLayers().getMapControlsLayer().getMapRouteInfoMenu();
|
||||
View view = inflater.inflate(R.layout.plan_route_info, container, false);
|
||||
if (menu == null) {
|
||||
return view;
|
||||
}
|
||||
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
mainView = view.findViewById(R.id.main_view);
|
||||
updateInfo();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (menu == null) {
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
if (menu != null) {
|
||||
menu.onDismiss();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateInfo() {
|
||||
menu.updateInfo(mainView);
|
||||
applyDayNightMode();
|
||||
}
|
||||
|
||||
public void show(MapActivity mapActivity) {
|
||||
int slideInAnim = R.anim.slide_in_bottom;
|
||||
int slideOutAnim = R.anim.slide_out_bottom;
|
||||
|
||||
mapActivity.getSupportFragmentManager().beginTransaction()
|
||||
.setCustomAnimations(slideInAnim, slideOutAnim, slideInAnim, slideOutAnim)
|
||||
.add(R.id.routeMenuContainer, this, TAG)
|
||||
.addToBackStack(TAG)
|
||||
.commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
FragmentActivity activity = getActivity();
|
||||
if (activity != null) {
|
||||
try {
|
||||
activity.getSupportFragmentManager().popBackStack(TAG,
|
||||
FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||
} catch (Exception e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void applyDayNightMode() {
|
||||
MapActivity ctx = getMapActivity();
|
||||
boolean portrait = AndroidUiHelper.isOrientationPortrait(ctx);
|
||||
boolean nightMode = ctx.getMyApplication().getDaynightHelper().isNightMode();
|
||||
if (portrait) {
|
||||
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
|
||||
} else {
|
||||
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_left_menu_light, R.drawable.bg_left_menu_dark);
|
||||
}
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerModesLayout), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerFromDropDown), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.viaLayoutDivider), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerToDropDown), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerButtons), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerBtn1), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerBtn2), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.dividerBtn3), nightMode,
|
||||
R.color.dashboard_divider_light, R.color.dashboard_divider_dark);
|
||||
|
||||
((TextView) mainView.findViewById(R.id.ViaView)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.primary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.primary_text_light));
|
||||
((TextView) mainView.findViewById(R.id.ViaSubView)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_light));
|
||||
|
||||
((TextView) mainView.findViewById(R.id.toTitle)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_light));
|
||||
|
||||
((TextView) mainView.findViewById(R.id.fromTitle)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_light));
|
||||
|
||||
((TextView) mainView.findViewById(R.id.InfoTextView)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_light));
|
||||
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.FromLayout), nightMode,
|
||||
R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.ViaLayout), nightMode,
|
||||
R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.ToLayout), nightMode,
|
||||
R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.Info), nightMode,
|
||||
R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.Next), nightMode,
|
||||
R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
AndroidUtils.setBackground(ctx, mainView.findViewById(R.id.Prev), nightMode,
|
||||
R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
|
||||
((TextView) mainView.findViewById(R.id.DistanceText)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.primary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.primary_text_light));
|
||||
((TextView) mainView.findViewById(R.id.DistanceTitle)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_light));
|
||||
((TextView) mainView.findViewById(R.id.DurationText)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.primary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.primary_text_light));
|
||||
((TextView) mainView.findViewById(R.id.DurationTitle)).setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_dark)
|
||||
: ContextCompat.getColorStateList(ctx, android.R.color.secondary_text_light));
|
||||
|
||||
}
|
||||
|
||||
public static boolean showInstance(final MapActivity mapActivity) {
|
||||
try {
|
||||
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
|
||||
int slideInAnim;
|
||||
int slideOutAnim;
|
||||
if (portrait) {
|
||||
slideInAnim = R.anim.slide_in_bottom;
|
||||
slideOutAnim = R.anim.slide_out_bottom;
|
||||
} else {
|
||||
slideInAnim = R.anim.slide_in_left;
|
||||
slideOutAnim = R.anim.slide_out_left;
|
||||
}
|
||||
|
||||
MapRouteInfoMenuFragment fragment = new MapRouteInfoMenuFragment();
|
||||
mapActivity.getSupportFragmentManager().beginTransaction()
|
||||
.setCustomAnimations(slideInAnim, slideOutAnim, slideInAnim, slideOutAnim)
|
||||
.add(R.id.routeMenuContainer, fragment, TAG)
|
||||
.addToBackStack(TAG).commitAllowingStateLoss();
|
||||
|
||||
return true;
|
||||
|
||||
} catch (RuntimeException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -461,7 +461,7 @@ public class MapRoutePreferencesControl {
|
|||
final Set<ApplicationMode> selected = new HashSet<ApplicationMode>();
|
||||
selected.add(settings.APPLICATION_MODE.get());
|
||||
AppModeDialog.prepareAppModeView(mapActivity, selected, false,
|
||||
(ViewGroup) settingsDlg.findViewById(R.id.app_modes), true, new View.OnClickListener() {
|
||||
(ViewGroup) settingsDlg.findViewById(R.id.app_modes), true, false, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (selected.size() > 0) {
|
||||
|
|
|
@ -3,8 +3,11 @@ package net.osmand.plus.views;
|
|||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffColorFilter;
|
||||
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
|
@ -33,6 +36,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
|
|||
private MapTextLayer textLayer;
|
||||
private Paint paintIcon;
|
||||
private Bitmap pointSmall;
|
||||
private int defaultColor;
|
||||
|
||||
private OsmandSettings settings;
|
||||
|
||||
|
@ -60,6 +64,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
|
|||
textLayer = view.getLayerByClass(MapTextLayer.class);
|
||||
paintIcon = new Paint();
|
||||
pointSmall = BitmapFactory.decodeResource(view.getResources(), R.drawable.map_white_shield_small);
|
||||
defaultColor = view.getResources().getColor(R.color.color_favorite);
|
||||
}
|
||||
|
||||
private boolean calculateBelongs(int ex, int ey, int objx, int objy, int radius) {
|
||||
|
@ -97,10 +102,15 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
|
|||
final QuadRect latLonBounds = tileBox.getLatLonBounds();
|
||||
List<LocationPoint> fullObjects = new ArrayList<>();
|
||||
for (LocationPoint o : getPoints()) {
|
||||
if (!o.isVisible()) {
|
||||
continue;
|
||||
}
|
||||
float x = tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
|
||||
float y = tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
|
||||
|
||||
if (intersects(boundIntersections, x, y, iconSize, iconSize)) {
|
||||
int col = o.getColor() == 0 || o.getColor() == Color.BLACK ? defaultColor : o.getColor();
|
||||
paintIcon.setColorFilter(new PorterDuffColorFilter(col, PorterDuff.Mode.MULTIPLY));
|
||||
canvas.drawBitmap(pointSmall, x - pointSmall.getWidth() / 2, y - pointSmall.getHeight() / 2, paintIcon);
|
||||
} else {
|
||||
fullObjects.add(o);
|
||||
|
|
|
@ -10,6 +10,7 @@ import android.graphics.Paint.Align;
|
|||
import android.graphics.Paint.Style;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuff.Mode;
|
||||
import android.graphics.PorterDuffColorFilter;
|
||||
import android.support.annotation.NonNull;
|
||||
|
@ -294,6 +295,9 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex
|
|||
float y = tileBox.getPixYFromLatLon(o.lat, o.lon);
|
||||
|
||||
if (intersects(boundIntersections, x, y, iconSize, iconSize)) {
|
||||
boolean visit = isPointVisited(o);
|
||||
int col = visit ? visitedColor : o.getColor(fcolor);
|
||||
paintIcon.setColorFilter(new PorterDuffColorFilter(col, PorterDuff.Mode.MULTIPLY));
|
||||
canvas.drawBitmap(pointSmall, x - pointSmall.getWidth() / 2, y - pointSmall.getHeight() / 2, paintIcon);
|
||||
} else {
|
||||
fullObjects.add(o);
|
||||
|
|
|
@ -11,9 +11,9 @@ import android.graphics.ColorFilter;
|
|||
import android.graphics.PointF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
@ -26,6 +26,7 @@ import android.widget.TextView;
|
|||
|
||||
import net.londatiga.android.ActionItem;
|
||||
import net.londatiga.android.QuickAction;
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.core.android.MapRendererContext;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
|
@ -40,8 +41,7 @@ import net.osmand.plus.TargetPointsHelper;
|
|||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.search.SearchAddressFragment;
|
||||
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoControl;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRoutePreferencesControl;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.plus.views.corenative.NativeCoreContext;
|
||||
|
@ -76,14 +76,11 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
private OsmandSettings settings;
|
||||
|
||||
private MapRoutePreferencesControl optionsRouteControlDialog;
|
||||
private MapRouteInfoControl mapRouteInfoControlDialog;
|
||||
private MapRouteInfoMenu mapRouteInfoMenu;
|
||||
private MapHudButton backToLocationControl;
|
||||
private MapHudButton menuControl;
|
||||
private MapHudButton compassHud;
|
||||
private float cachedRotate = 0;
|
||||
private static long startCounter;
|
||||
private Runnable delayStart;
|
||||
private Handler showUIHandler;
|
||||
private ImageView appModeIcon;
|
||||
private TextView zoomText;
|
||||
private OsmandMapTileView mapView;
|
||||
|
@ -103,6 +100,10 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
mapView = mapActivity.getMapView();
|
||||
}
|
||||
|
||||
public MapRouteInfoMenu getMapRouteInfoMenu() {
|
||||
return mapRouteInfoMenu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawInScreenPixels() {
|
||||
return true;
|
||||
|
@ -110,7 +111,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
|
||||
@Override
|
||||
public void initLayer(final OsmandMapTileView view) {
|
||||
showUIHandler = new Handler();
|
||||
initTopControls();
|
||||
initTransparencyBar();
|
||||
initZooms();
|
||||
|
@ -196,7 +196,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
configureMap.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
notifyClicked();
|
||||
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.CONFIGURE_MAP);
|
||||
}
|
||||
});
|
||||
|
@ -209,7 +208,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
compass.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
notifyClicked();
|
||||
mapActivity.getMapViewTrackingUtilities().switchRotateMapMode();
|
||||
}
|
||||
});
|
||||
|
@ -217,13 +215,15 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
private void initRouteControls() {
|
||||
mapRouteInfoControlDialog = new MapRouteInfoControl(mapActivity, this);
|
||||
mapRouteInfoMenu = new MapRouteInfoMenu(mapActivity, this);
|
||||
optionsRouteControlDialog = new MapRoutePreferencesControl(mapActivity, this);
|
||||
}
|
||||
|
||||
public void updateRouteButtons(View main, boolean routeInfo) {
|
||||
boolean nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightMode();
|
||||
ImageView cancelRouteButton = (ImageView) main.findViewById(R.id.map_cancel_route_button);
|
||||
cancelRouteButton.setImageDrawable(app.getIconsCache().getContentIcon(R.drawable.map_action_cancel));
|
||||
cancelRouteButton.setImageDrawable(app.getIconsCache().getContentIcon(R.drawable.map_action_cancel, !nightMode));
|
||||
AndroidUtils.setBackground(mapActivity, cancelRouteButton, nightMode, R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
cancelRouteButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
@ -232,7 +232,8 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
});
|
||||
|
||||
ImageView waypointsButton = (ImageView) main.findViewById(R.id.map_waypoints_route_button);
|
||||
waypointsButton.setImageDrawable(app.getIconsCache().getContentIcon(R.drawable.map_action_waypoints));
|
||||
waypointsButton.setImageDrawable(app.getIconsCache().getContentIcon(R.drawable.map_action_waypoints, !nightMode));
|
||||
AndroidUtils.setBackground(mapActivity, waypointsButton, nightMode, R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
waypointsButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
@ -242,7 +243,8 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
|
||||
ImageView options = (ImageView) main.findViewById(R.id.map_options_route_button);
|
||||
options.setImageDrawable(!routeInfo ? app.getIconsCache().getIcon(R.drawable.map_action_settings,
|
||||
R.color.osmand_orange) : app.getIconsCache().getContentIcon(R.drawable.map_action_settings));
|
||||
R.color.osmand_orange) : app.getIconsCache().getContentIcon(R.drawable.map_action_settings, !nightMode));
|
||||
AndroidUtils.setBackground(mapActivity, options, nightMode, R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
options.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
@ -252,8 +254,10 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
|
||||
TextView routeGoButton = (TextView) main.findViewById(R.id.map_go_route_button);
|
||||
routeGoButton.setCompoundDrawablesWithIntrinsicBounds(app.getIconsCache().getIcon(R.drawable.map_start_navigation, R.color.color_myloc_distance), null, null, null);
|
||||
routeGoButton.setText(AndroidUiHelper.isOrientationPortrait(mapActivity) ?
|
||||
mapActivity.getString(R.string.shared_string_go) : "");
|
||||
routeGoButton.setText(mapActivity.getString(R.string.shared_string_go));
|
||||
routeGoButton.setTextColor(nightMode ?
|
||||
ContextCompat.getColorStateList(mapActivity, android.R.color.secondary_text_dark) : ContextCompat.getColorStateList(mapActivity, android.R.color.secondary_text_light));
|
||||
AndroidUtils.setBackground(mapActivity, routeGoButton, nightMode, R.drawable.dashboard_button_light, R.drawable.dashboard_button_dark);
|
||||
routeGoButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
@ -273,26 +277,23 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
protected void clickRouteParams() {
|
||||
notifyClicked();
|
||||
mapRouteInfoControlDialog.hideDialog();
|
||||
optionsRouteControlDialog.showAndHideDialog();
|
||||
if (optionsRouteControlDialog.isDialogVisible()) {
|
||||
optionsRouteControlDialog.hideDialog();
|
||||
mapRouteInfoMenu.showHideMenu();
|
||||
} else {
|
||||
mapRouteInfoMenu.hide();
|
||||
optionsRouteControlDialog.showAndHideDialog();
|
||||
}
|
||||
}
|
||||
|
||||
protected void clickRouteWaypoints() {
|
||||
if (getTargets().checkPointToNavigateShort()) {
|
||||
notifyClicked();
|
||||
if (optionsRouteControlDialog.isDialogVisible()) {
|
||||
optionsRouteControlDialog.hideDialog();
|
||||
} else if (mapRouteInfoControlDialog.isDialogVisible()) {
|
||||
mapRouteInfoControlDialog.hideDialog();
|
||||
}
|
||||
mapActivity.getMapActions().openIntermediatePointsDialog();
|
||||
}
|
||||
}
|
||||
|
||||
protected void clickRouteCancel() {
|
||||
notifyClicked();
|
||||
mapRouteInfoControlDialog.hideDialog();
|
||||
mapRouteInfoMenu.hide();
|
||||
optionsRouteControlDialog.hideDialog();
|
||||
if (mapActivity.getRoutingHelper().isFollowingMode()) {
|
||||
mapActivity.getMapActions().stopNavigationActionConfirm();
|
||||
|
@ -302,24 +303,17 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
protected void clickRouteGo() {
|
||||
notifyClicked();
|
||||
mapRouteInfoControlDialog.hideDialog();
|
||||
mapRouteInfoMenu.hide();
|
||||
optionsRouteControlDialog.hideDialog();
|
||||
// RoutingHelper routingHelper = mapActivity.getMyApplication().getRoutingHelper();
|
||||
// if (!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) {
|
||||
// never possible
|
||||
// mapActivity.getMapActions().enterRoutePlanningMode(null, null, false);
|
||||
// } else {
|
||||
startNavigation();
|
||||
// }
|
||||
}
|
||||
|
||||
public void showRouteInfoControlDialog() {
|
||||
mapRouteInfoControlDialog.showHideDialog();
|
||||
mapRouteInfoMenu.showHideMenu();
|
||||
}
|
||||
|
||||
public void showDialog() {
|
||||
mapRouteInfoControlDialog.setShowDialog();
|
||||
mapRouteInfoMenu.setShowMenu();
|
||||
}
|
||||
|
||||
private void initControls() {
|
||||
|
@ -352,10 +346,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
backToMenuButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// double lat = activity.getMapView().getLatitude();
|
||||
// double lon = activity.getMapView().getLongitude();
|
||||
// MainMenuActivity.backToMainMenuDialog(activity, new LatLon(lat, lon));
|
||||
notifyClicked();
|
||||
if (dash) {
|
||||
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.DASHBOARD);
|
||||
} else {
|
||||
|
@ -393,7 +383,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
private void onNavigationClick() {
|
||||
notifyClicked();
|
||||
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
|
||||
if (!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) {
|
||||
mapActivity.getMapActions().enterRoutePlanningMode(null, null);
|
||||
|
@ -429,7 +418,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
zoomInButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
notifyClicked();
|
||||
if (view.isZooming()) {
|
||||
mapActivity.changeZoom(2, System.currentTimeMillis());
|
||||
} else {
|
||||
|
@ -447,7 +435,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
zoomOutButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
notifyClicked();
|
||||
mapActivity.changeZoom(-1, System.currentTimeMillis());
|
||||
}
|
||||
});
|
||||
|
@ -455,14 +442,13 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
public void startNavigation() {
|
||||
stopCounter();
|
||||
OsmandApplication app = mapActivity.getMyApplication();
|
||||
RoutingHelper routingHelper = app.getRoutingHelper();
|
||||
if (routingHelper.isFollowingMode()) {
|
||||
switchToRouteFollowingLayout();
|
||||
} else {
|
||||
if (!app.getTargetPointsHelper().checkPointToNavigateShort()) {
|
||||
mapRouteInfoControlDialog.showDialog();
|
||||
mapRouteInfoMenu.show();
|
||||
} else {
|
||||
touchEvent = 0;
|
||||
mapActivity.getMapViewTrackingUtilities().backToLocationImpl();
|
||||
|
@ -476,44 +462,6 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void stopCounter() {
|
||||
startCounter = 0;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void startCounter() {
|
||||
//OsmandSettings settings = mapActivity.getMyApplication().getSettings();
|
||||
int del = 0; // settings.DELAY_TO_START_NAVIGATION.get();
|
||||
if (del <= 0) {
|
||||
return;
|
||||
}
|
||||
if (startCounter <= 0) {
|
||||
startCounter = System.currentTimeMillis() + del * 1000;
|
||||
delayStart = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (startCounter > 0) {
|
||||
if (System.currentTimeMillis() > startCounter) {
|
||||
startCounter = 0;
|
||||
startNavigation();
|
||||
} else {
|
||||
mapActivity.refreshMap();
|
||||
showUIHandler.postDelayed(delayStart, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
delayStart.run();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void notifyClicked() {
|
||||
stopCounter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyLayer() {
|
||||
controls.clear();
|
||||
|
@ -524,17 +472,16 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
updateControls(tileBox, nightMode);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void updateControls(@NonNull RotatedTileBox tileBox, DrawSettings nightMode) {
|
||||
boolean isNight = nightMode != null && nightMode.isNightMode();
|
||||
int shadw = isNight ? Color.TRANSPARENT : Color.WHITE;
|
||||
int textColor = isNight ? mapActivity.getResources().getColor(R.color.widgettext_night) : Color.BLACK;
|
||||
if (shadowColor != shadw) {
|
||||
shadowColor = shadw;
|
||||
// TODO
|
||||
// TODOnightMode
|
||||
// updatextColor(textColor, shadw, rulerControl, zoomControls, mapMenuControls);
|
||||
}
|
||||
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
|
||||
// default buttons
|
||||
boolean routePlanningMode = false;
|
||||
RoutingHelper rh = mapActivity.getRoutingHelper();
|
||||
|
@ -544,16 +491,22 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
routePlanningMode = true;
|
||||
}
|
||||
boolean routeFollowingMode = !routePlanningMode && rh.isFollowingMode();
|
||||
boolean dialogOpened = optionsRouteControlDialog.isDialogVisible() || mapRouteInfoControlDialog.isDialogVisible();
|
||||
boolean dialogOpened = optionsRouteControlDialog.isDialogVisible() || mapRouteInfoMenu.isVisible();
|
||||
boolean showRouteCalculationControls = routePlanningMode ||
|
||||
((System.currentTimeMillis() - touchEvent < TIMEOUT_TO_SHOW_BUTTONS) && routeFollowingMode);
|
||||
updateMyLocation(rh, dialogOpened);
|
||||
// routePlanningBtn.setIconResId(routeFollowingMode ? R.drawable.ic_action_gabout_dark : R.drawable.map_directions );
|
||||
// routePlanningBtn.updateVisibility(showButtons && !routePlanningMode);
|
||||
routePlanningBtn.setIconResId(R.drawable.map_directions);
|
||||
routePlanningBtn.updateVisibility(!dialogOpened);
|
||||
boolean showButtons = (showRouteCalculationControls || !routeFollowingMode);
|
||||
routePlanningBtn.setIconResId(routeFollowingMode ? R.drawable.ic_action_gabout_dark : R.drawable.map_directions);
|
||||
if (routePlanningMode || routeFollowingMode) {
|
||||
routePlanningBtn.setIconResId(R.drawable.map_start_navigation);
|
||||
routePlanningBtn.setIconColorId(R.color.color_myloc_distance);
|
||||
} else {
|
||||
routePlanningBtn.setIconResId(R.drawable.map_directions);
|
||||
routePlanningBtn.resetIconColors();
|
||||
}
|
||||
routePlanningBtn.updateVisibility(showButtons);
|
||||
menuControl.updateVisibility(showButtons);
|
||||
|
||||
menuControl.updateVisibility(!dialogOpened);
|
||||
mapZoomIn.updateVisibility(!dialogOpened);
|
||||
mapZoomOut.updateVisibility(!dialogOpened);
|
||||
compassHud.updateVisibility(!dialogOpened);
|
||||
|
@ -581,16 +534,7 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
}
|
||||
|
||||
mapRouteInfoControlDialog.setVisible(showRouteCalculationControls);
|
||||
if (showRouteCalculationControls) {
|
||||
if (!mapActivity.getRoutingHelper().isFollowingMode()
|
||||
&& !mapActivity.getRoutingHelper().isPauseNavigation()) {
|
||||
startCounter();
|
||||
}
|
||||
} else {
|
||||
stopCounter();
|
||||
}
|
||||
|
||||
mapRouteInfoMenu.setVisible(showRouteCalculationControls);
|
||||
updateCompass(isNight);
|
||||
|
||||
for (MapHudButton mc : controls) {
|
||||
|
@ -634,16 +578,11 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
|
||||
|
||||
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
|
||||
if (mapRouteInfoControlDialog.onSingleTap(point, tileBox)) {
|
||||
return true;
|
||||
}
|
||||
stopCounter();
|
||||
return false;
|
||||
return mapRouteInfoMenu.onSingleTap(point, tileBox);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event, RotatedTileBox tileBox) {
|
||||
stopCounter();
|
||||
touchEvent = System.currentTimeMillis();
|
||||
RoutingHelper rh = mapActivity.getRoutingHelper();
|
||||
if (rh.isFollowingMode()) {
|
||||
|
@ -767,6 +706,11 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void resetIconColors() {
|
||||
resClrLight = R.color.icon_color;
|
||||
resClrDark = 0;
|
||||
}
|
||||
|
||||
public MapHudButton setIconColorId(int clr) {
|
||||
if (resClrLight == clr && resClrDark == clr) {
|
||||
return this;
|
||||
|
@ -798,6 +742,7 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@SuppressWarnings("deprecation")
|
||||
public void update(OsmandApplication ctx, boolean night) {
|
||||
if (nightMode == night && !f) {
|
||||
return;
|
||||
|
@ -879,7 +824,7 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
public static View.OnLongClickListener getOnClickMagnifierListener(final OsmandMapTileView view) {
|
||||
final View.OnLongClickListener listener = new View.OnLongClickListener() {
|
||||
return new View.OnLongClickListener() {
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View notUseCouldBeNull) {
|
||||
|
@ -887,7 +832,7 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
final AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext());
|
||||
int p = (int) (mapDensity.get() * 100);
|
||||
final TIntArrayList tlist = new TIntArrayList(new int[]{20, 25, 33, 50, 75, 100, 150, 200, 300, 400});
|
||||
final List<String> values = new ArrayList<String>();
|
||||
final List<String> values = new ArrayList<>();
|
||||
int i = -1;
|
||||
for (int k = 0; k <= tlist.size(); k++) {
|
||||
final boolean end = k == tlist.size();
|
||||
|
@ -927,20 +872,19 @@ public class MapControlsLayer extends OsmandMapLayer {
|
|||
return true;
|
||||
}
|
||||
};
|
||||
return listener;
|
||||
}
|
||||
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == REQUEST_ADDRESS_SELECT && resultCode == SearchAddressFragment.SELECT_ADDRESS_POINT_RESULT_OK) {
|
||||
String name = data.getStringExtra(SearchAddressFragment.SELECT_ADDRESS_POINT_INTENT_KEY);
|
||||
boolean target = data.getBooleanExtra(MapRouteInfoControl.TARGET_SELECT, true);
|
||||
boolean target = data.getBooleanExtra(MapRouteInfoMenu.TARGET_SELECT, true);
|
||||
LatLon latLon = new LatLon(
|
||||
data.getDoubleExtra(SearchAddressFragment.SELECT_ADDRESS_POINT_LAT, 0),
|
||||
data.getDoubleExtra(SearchAddressFragment.SELECT_ADDRESS_POINT_LON, 0));
|
||||
if (name != null) {
|
||||
mapRouteInfoControlDialog.selectAddress(name, latLon, target);
|
||||
mapRouteInfoMenu.selectAddress(name, latLon, target);
|
||||
} else {
|
||||
mapRouteInfoControlDialog.selectAddress("", latLon, target);
|
||||
mapRouteInfoMenu.selectAddress("", latLon, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
|||
import net.osmand.plus.routing.RouteDirectionInfo;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoControl;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
|
||||
import net.osmand.plus.views.mapwidgets.NextTurnInfoWidget.TurnDrawable;
|
||||
import net.osmand.router.TurnType;
|
||||
|
||||
|
@ -237,8 +237,8 @@ public class MapInfoWidgetsFactory {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
int di = MapRouteInfoControl.getDirectionInfo();
|
||||
if (di >= 0 && MapRouteInfoControl.isControlVisible() &&
|
||||
int di = MapRouteInfoMenu.getDirectionInfo();
|
||||
if (di >= 0 && MapRouteInfoMenu.isControlVisible() &&
|
||||
di < routingHelper.getRouteDirections().size()) {
|
||||
showNextTurn = true;
|
||||
RouteDirectionInfo next = routingHelper.getRouteDirections().get(di);
|
||||
|
|
|
@ -30,7 +30,7 @@ import net.osmand.plus.views.AnimateDraggingMapThread;
|
|||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
import net.osmand.plus.views.TurnPathHelper;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoControl;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
|
||||
import net.osmand.router.RouteResultPreparation;
|
||||
import net.osmand.router.TurnType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
@ -583,8 +583,8 @@ public class RouteInfoWidgetsFactory {
|
|||
dist = r.distanceTo;
|
||||
}
|
||||
} else {
|
||||
int di = MapRouteInfoControl.getDirectionInfo();
|
||||
if (di >= 0 && MapRouteInfoControl.isControlVisible()
|
||||
int di = MapRouteInfoMenu.getDirectionInfo();
|
||||
if (di >= 0 && MapRouteInfoMenu.isControlVisible()
|
||||
&& di < rh.getRouteDirections().size()) {
|
||||
RouteDirectionInfo next = rh.getRouteDirections().get(di);
|
||||
if (next != null) {
|
||||
|
|