Compare commits
38 commits
Author | SHA1 | Date | |
---|---|---|---|
|
9bb7b295d9 | ||
|
291509580c | ||
|
d06eca5e4e | ||
|
df1bed0f4b | ||
|
10ae4afd90 | ||
|
ce59706582 | ||
|
6a7b30e33d | ||
|
6482818892 | ||
|
3c7afb3139 | ||
|
b0443dd424 | ||
|
ba10ca0ecc | ||
|
fd26d9d58d | ||
|
f027adf0eb | ||
|
953cfec17b | ||
|
2d80f3e4d9 | ||
|
6ec8a82bba | ||
|
ccf4740989 | ||
|
0588eb7cd4 | ||
|
e1748a0c2e | ||
|
4f776f3268 | ||
|
cd757e3516 | ||
|
3de5811add | ||
|
c9ab275284 | ||
|
cd7628ae3d | ||
|
c8c2f03989 | ||
|
6fbfbf1b65 | ||
|
95d1c7370e | ||
|
19e2e90276 | ||
|
09e4e6bba8 | ||
|
f14a84dc19 | ||
|
cb2ede54bc | ||
|
e4298a796c | ||
|
2e479f0563 | ||
|
8ae1c4f910 | ||
|
9dbe9c1c7e | ||
|
93dbe540b5 | ||
|
a4ab825925 | ||
|
be45cb0706 |
58 changed files with 1802 additions and 558 deletions
|
@ -30,6 +30,7 @@ public class Amenity extends MapObject {
|
||||||
public static final String OPENING_HOURS = "opening_hours";
|
public static final String OPENING_HOURS = "opening_hours";
|
||||||
public static final String CONTENT = "content";
|
public static final String CONTENT = "content";
|
||||||
public static final String CUISINE = "cuisine";
|
public static final String CUISINE = "cuisine";
|
||||||
|
public static final String DISH = "dish";
|
||||||
public static final String OSM_DELETE_VALUE = "delete";
|
public static final String OSM_DELETE_VALUE = "delete";
|
||||||
public static final String OSM_DELETE_TAG = "osmand_change";
|
public static final String OSM_DELETE_TAG = "osmand_change";
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ public class MapPoiTypes {
|
||||||
private boolean init;
|
private boolean init;
|
||||||
Map<String, PoiType> poiTypesByTag = new LinkedHashMap<String, PoiType>();
|
Map<String, PoiType> poiTypesByTag = new LinkedHashMap<String, PoiType>();
|
||||||
Map<String, String> deprecatedTags = new LinkedHashMap<String, String>();
|
Map<String, String> deprecatedTags = new LinkedHashMap<String, String>();
|
||||||
Map<String, String> poiAdditionalCategoryIcons = new LinkedHashMap<String, String>();
|
Map<String, String> poiAdditionalCategoryIconNames = new LinkedHashMap<String, String>();
|
||||||
List<PoiType> textPoiAdditionals = new ArrayList<PoiType>();
|
List<PoiType> textPoiAdditionals = new ArrayList<PoiType>();
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,8 +92,8 @@ public class MapPoiTypes {
|
||||||
return otherMapCategory;
|
return otherMapCategory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPoiAdditionalCategoryIcon(String category) {
|
public String getPoiAdditionalCategoryIconName(String category) {
|
||||||
return poiAdditionalCategoryIcons.get(category);
|
return poiAdditionalCategoryIconNames.get(category);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PoiType> getTextPoiAdditionals() {
|
public List<PoiType> getTextPoiAdditionals() {
|
||||||
|
@ -379,7 +379,7 @@ public class MapPoiTypes {
|
||||||
lastPoiAdditionalCategory = parser.getAttributeValue("", "name");
|
lastPoiAdditionalCategory = parser.getAttributeValue("", "name");
|
||||||
String icon = parser.getAttributeValue("", "icon");
|
String icon = parser.getAttributeValue("", "icon");
|
||||||
if (!Algorithms.isEmpty(icon)) {
|
if (!Algorithms.isEmpty(icon)) {
|
||||||
poiAdditionalCategoryIcons.put(lastPoiAdditionalCategory, icon);
|
poiAdditionalCategoryIconNames.put(lastPoiAdditionalCategory, icon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -814,6 +814,12 @@ public class MapPoiTypes {
|
||||||
if (!otag.equals(tag) && !otag.equals("name")) {
|
if (!otag.equals(tag) && !otag.equals("name")) {
|
||||||
PoiType pat = poiTypesByTag.get(otag + "/" + e.getValue());
|
PoiType pat = poiTypesByTag.get(otag + "/" + e.getValue());
|
||||||
if (pat == null) {
|
if (pat == null) {
|
||||||
|
for(String splValue : e.getValue().split(";")) {
|
||||||
|
PoiType ps = poiTypesByTag.get(otag + "/" + splValue.trim());
|
||||||
|
if(ps != null) {
|
||||||
|
a.setAdditionalInfo(ps.getKeyName(), splValue.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
pat = poiTypesByTag.get(otag);
|
pat = poiTypesByTag.get(otag);
|
||||||
}
|
}
|
||||||
if (pat != null && pat.isAdditional()) {
|
if (pat != null && pat.isAdditional()) {
|
||||||
|
|
|
@ -358,6 +358,7 @@ public abstract class MapRenderingTypes {
|
||||||
protected static class TagValuePattern {
|
protected static class TagValuePattern {
|
||||||
protected String tag;
|
protected String tag;
|
||||||
protected String value;
|
protected String value;
|
||||||
|
protected String tagPrefix;
|
||||||
protected int substrSt = 0;
|
protected int substrSt = 0;
|
||||||
protected int substrEnd = 0;
|
protected int substrEnd = 0;
|
||||||
protected TagValuePattern(String t, String v) {
|
protected TagValuePattern(String t, String v) {
|
||||||
|
|
|
@ -1016,7 +1016,7 @@ public class OpeningHoursParser {
|
||||||
if (b.charAt(b.length() - 1) != ' ') {
|
if (b.charAt(b.length() - 1) != ' ') {
|
||||||
b.append(" ");
|
b.append(" ");
|
||||||
}
|
}
|
||||||
b.append("(").append(comment).append(")");
|
b.append("- ").append(comment);
|
||||||
} else {
|
} else {
|
||||||
b.append(comment);
|
b.append(comment);
|
||||||
}
|
}
|
||||||
|
@ -1136,7 +1136,7 @@ public class OpeningHoursParser {
|
||||||
}
|
}
|
||||||
String res = sb.toString();
|
String res = sb.toString();
|
||||||
if (res.length() > 0 && !Algorithms.isEmpty(comment)) {
|
if (res.length() > 0 && !Algorithms.isEmpty(comment)) {
|
||||||
res += " (" + comment + ")";
|
res += " - " + comment;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
4
OsmAnd/res/drawable/btn_circle_trans_flat.xml
Normal file
4
OsmAnd/res/drawable/btn_circle_trans_flat.xml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="@drawable/btn_circle_trans_flat_n"/>
|
||||||
|
</selector>
|
8
OsmAnd/res/drawable/btn_circle_trans_flat_n.xml
Normal file
8
OsmAnd/res/drawable/btn_circle_trans_flat_n.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
<item>
|
||||||
|
<shape android:shape="oval">
|
||||||
|
<solid android:color="@color/map_widget_stroke"/>
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
|
@ -43,6 +43,17 @@
|
||||||
android:textSize="@dimen/map_alarm_text_size"
|
android:textSize="@dimen/map_alarm_text_size"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
tools:text="60"/>
|
tools:text="60"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/map_alarm_warning_text_bottom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
|
android:layout_marginBottom="@dimen/map_alarm_bottom_text_margin"
|
||||||
|
android:textSize="@dimen/map_alarm_bottom_text_size"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:text="1.2 km"
|
||||||
|
tools:textColor="@color/color_black"/>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FrameLayout android:id="@+id/share_fragment_layout"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="350dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@android:color/transparent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/main_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="bottom"
|
|
||||||
android:background="?attr/left_menu_view_bg"
|
|
||||||
android:clickable="true"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="48dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/header_caption"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:layout_marginLeft="16dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:text="@string/share_menu_location"
|
|
||||||
android:textColor="?android:textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_list_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:baselineAligned="false"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ListView
|
|
||||||
android:id="@+id/list"
|
|
||||||
android:divider="@null"
|
|
||||||
android:dividerHeight="0dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
</ListView>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
309
OsmAnd/res/layout/fragment_add_waypoint_bottom_sheet_dialog.xml
Normal file
309
OsmAnd/res/layout/fragment_add_waypoint_bottom_sheet_dialog.xml
Normal file
|
@ -0,0 +1,309 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
tools:background="?attr/bg_color">
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:id="@+id/scroll_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingBottom="@dimen/bottom_sheet_content_padding_small">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/bottom_sheet_title_height"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:text="@string/new_destination_point_dialog"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/replace_dest_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:src="@drawable/list_destination"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/replace_destination_point"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/current_dest_text_view"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:textColor="@color/searchbar_text_hint_light"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
tools:text="Current: Some street 46"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/replace_start_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:src="@drawable/list_startpoint"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/make_as_start_point"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/current_start_text_view"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:textColor="@color/searchbar_text_hint_light"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
tools:text="Current: My location"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/current_dest_divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:layout_marginBottom="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:layout_marginLeft="@dimen/bottom_sheet_divider_margin_start"
|
||||||
|
android:layout_marginStart="@dimen/bottom_sheet_divider_margin_start"
|
||||||
|
android:layout_marginTop="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:background="?attr/dashboard_divider"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/subsequent_dest_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/subsequent_dest_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||||
|
tools:foreground="@drawable/ic_action_route_subsequent_destination"
|
||||||
|
tools:src="@drawable/ic_action_route_subsequent_destination_point"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/keep_and_add_destination_point"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:text="@string/subsequent_dest_description"
|
||||||
|
android:textColor="@color/searchbar_text_hint_light"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/first_intermediate_dest_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/first_interm_dest_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||||
|
tools:foreground="@drawable/ic_action_route_first_intermediate"
|
||||||
|
tools:src="@drawable/ic_action_route_first_intermediate_point"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/add_as_first_destination_point"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:text="@string/first_intermediate_dest_description"
|
||||||
|
android:textColor="@color/searchbar_text_hint_light"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/last_intermediate_dest_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/last_interm_dest_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||||
|
tools:foreground="@drawable/ic_action_route_last_intermediate"
|
||||||
|
tools:src="@drawable/ic_action_route_last_intermediate_point"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/add_as_last_destination_point"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:text="@string/last_intermediate_dest_description"
|
||||||
|
android:textColor="@color/searchbar_text_hint_light"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/cancel_divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?attr/dashboard_divider"/>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/cancel_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/bottom_sheet_cancel_button_height"
|
||||||
|
android:background="?attr/selectableItemBackground">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="@string/shared_string_cancel"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
android:textStyle="bold"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -91,7 +91,7 @@
|
||||||
android:layout_height= "wrap_content"
|
android:layout_height= "wrap_content"
|
||||||
android:layout_marginBottom="@dimen/context_menu_direction_margin"
|
android:layout_marginBottom="@dimen/context_menu_direction_margin"
|
||||||
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
|
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
|
||||||
android:gravity="center_vertical"
|
android:gravity="top"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:paddingTop="3dp"
|
android:paddingTop="3dp"
|
||||||
android:paddingBottom="3dp"
|
android:paddingBottom="3dp"
|
||||||
|
@ -108,6 +108,15 @@
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
tools:text="Museum"/>
|
tools:text="Museum"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/additional_info_image_view"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="top"
|
||||||
|
android:paddingTop="1dp"
|
||||||
|
android:paddingRight="@dimen/context_menu_padding_margin_small"
|
||||||
|
tools:src="@drawable/ic_action_opening_hour_16"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/additional_info_text_view"
|
android:id="@+id/additional_info_text_view"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -600,6 +609,86 @@
|
||||||
|
|
||||||
</net.osmand.plus.mapcontextmenu.InterceptorLinearLayout>
|
</net.osmand.plus.mapcontextmenu.InterceptorLinearLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/context_menu_top_button_container"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="@dimen/dashboard_map_toolbar"
|
||||||
|
android:layout_marginLeft="4dp"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:alpha="0">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="@dimen/list_item_height"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:background="@drawable/btn_circle_trans_flat"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/context_menu_top_back"
|
||||||
|
android:layout_width="@dimen/list_item_height"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="left"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/shared_string_collapse"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:src="@drawable/ic_arrow_back"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:id="@+id/context_menu_toolbar_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:alpha="0">
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/context_menu_toolbar"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="@dimen/dashboard_map_toolbar"
|
||||||
|
android:background="@color/actionbar_light_color"
|
||||||
|
app:contentInsetLeft="4dp"
|
||||||
|
app:contentInsetStart="4dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/context_menu_toolbar_back"
|
||||||
|
android:layout_width="@dimen/list_item_height"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="left"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/shared_string_collapse"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:src="@drawable/ic_arrow_back"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/context_menu_toolbar_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="left"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:textColor="@color/abc_primary_text_material_dark"
|
||||||
|
android:textSize="@dimen/abc_text_size_large_material"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:lines="1"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:singleLine="true"
|
||||||
|
tools:text="Toolbar"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
|
||||||
|
</android.support.v7.widget.Toolbar>
|
||||||
|
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/context_menu_fab_container"
|
android:id="@+id/context_menu_fab_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -63,6 +63,17 @@
|
||||||
android:textSize="@dimen/map_alarm_text_size"
|
android:textSize="@dimen/map_alarm_text_size"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
tools:text="60"/>
|
tools:text="60"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/map_alarm_warning_text_bottom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
|
android:layout_marginBottom="@dimen/map_alarm_bottom_text_margin"
|
||||||
|
android:textSize="@dimen/map_alarm_bottom_text_size"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:text="1.2 km"
|
||||||
|
tools:textColor="@color/color_black"/>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
|
@ -1,53 +1,61 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout android:id="@+id/share_fragment_layout"
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@android:color/transparent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/main_view"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom"
|
android:background="?attr/bg_color"
|
||||||
android:background="?attr/bottom_menu_view_bg"
|
|
||||||
android:clickable="true"
|
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/scroll_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="48dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/header_caption"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:orientation="vertical">
|
||||||
android:layout_marginLeft="16dp"
|
|
||||||
android:layout_weight="1"
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/title_text_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/bottom_sheet_title_height"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
android:text="@string/share_menu_location"
|
android:text="@string/share_menu_location"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
android:textSize="@dimen/default_list_text_size"/>
|
osmand:typeface="@string/font_roboto_medium"/>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:baselineAligned="false"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/list"
|
android:id="@+id/list"
|
||||||
android:divider="@null"
|
|
||||||
android:dividerHeight="0dp"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="wrap_content"
|
||||||
|
android:divider="@null"
|
||||||
</ListView>
|
android:dividerHeight="0dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?attr/dashboard_divider"/>
|
||||||
|
|
||||||
</FrameLayout>
|
<FrameLayout
|
||||||
|
android:id="@+id/cancel_row"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/bottom_sheet_cancel_button_height"
|
||||||
|
android:background="?attr/selectableItemBackground">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/cancel_row_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="@string/shared_string_cancel"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
android:textStyle="bold"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
|
@ -22,7 +22,9 @@
|
||||||
<dimen name="map_button_shadow_margin">6dp</dimen>
|
<dimen name="map_button_shadow_margin">6dp</dimen>
|
||||||
<dimen name="map_button_shadow_width">84dp</dimen>
|
<dimen name="map_button_shadow_width">84dp</dimen>
|
||||||
<dimen name="map_alarm_size">116dp</dimen>
|
<dimen name="map_alarm_size">116dp</dimen>
|
||||||
|
<dimen name="map_alarm_bottom_text_margin">12dp</dimen>
|
||||||
<dimen name="map_alarm_text_size">35sp</dimen>
|
<dimen name="map_alarm_text_size">35sp</dimen>
|
||||||
|
<dimen name="map_alarm_bottom_text_size">22sp</dimen>
|
||||||
|
|
||||||
<dimen name="map_alarm_bottom_margin">140dp</dimen>
|
<dimen name="map_alarm_bottom_margin">140dp</dimen>
|
||||||
<dimen name="map_alarm_bottom_margin_land">81dp</dimen>
|
<dimen name="map_alarm_bottom_margin_land">81dp</dimen>
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
<string name="poi_vehicle_inspection">Пункт техосмотра</string>
|
<string name="poi_vehicle_inspection">Пункт техосмотра</string>
|
||||||
<string name="poi_car_wash">Автомойка</string>
|
<string name="poi_car_wash">Автомойка</string>
|
||||||
<string name="poi_fuel">Автомобильная заправка</string>
|
<string name="poi_fuel">Автомобильная заправка</string>
|
||||||
<string name="poi_charging_station">Зарядная станция</string>
|
<string name="poi_electricity_combined_charging">Зарядная станция</string>
|
||||||
<string name="poi_vehicle_ramp">Ремонтная эстакада/яма</string>
|
<string name="poi_vehicle_ramp">Ремонтная эстакада/яма</string>
|
||||||
<string name="poi_compressed_air">Подкачка шин</string>
|
<string name="poi_compressed_air">Подкачка шин</string>
|
||||||
<string name="poi_parking">Парковка</string>
|
<string name="poi_parking">Парковка</string>
|
||||||
|
|
|
@ -331,7 +331,7 @@
|
||||||
<string name="poi_fuel_electricity">Electricity</string>
|
<string name="poi_fuel_electricity">Electricity</string>
|
||||||
<string name="poi_aeroway_fuel">Aircraft fuel station</string>
|
<string name="poi_aeroway_fuel">Aircraft fuel station</string>
|
||||||
<string name="poi_waterway_fuel">Gas station for boats</string>
|
<string name="poi_waterway_fuel">Gas station for boats</string>
|
||||||
<string name="poi_charging_station">Charging station</string>
|
<string name="poi_electricity_combined_charging">Charging station</string>
|
||||||
<string name="poi_vehicle_ramp">Vehicle ramp</string>
|
<string name="poi_vehicle_ramp">Vehicle ramp</string>
|
||||||
<string name="poi_compressed_air">Compressed air</string>
|
<string name="poi_compressed_air">Compressed air</string>
|
||||||
<string name="poi_parking">Parking</string>
|
<string name="poi_parking">Parking</string>
|
||||||
|
|
|
@ -76,6 +76,7 @@
|
||||||
<dimen name="map_ruler_width">120dp</dimen>
|
<dimen name="map_ruler_width">120dp</dimen>
|
||||||
<dimen name="map_ruler_bottom_margin">9dp</dimen>
|
<dimen name="map_ruler_bottom_margin">9dp</dimen>
|
||||||
<dimen name="map_alarm_size">78dp</dimen>
|
<dimen name="map_alarm_size">78dp</dimen>
|
||||||
|
<dimen name="map_alarm_bottom_text_margin">8dp</dimen>
|
||||||
|
|
||||||
|
|
||||||
<dimen name="map_alarm_bottom_margin">87dp</dimen>
|
<dimen name="map_alarm_bottom_margin">87dp</dimen>
|
||||||
|
@ -108,6 +109,7 @@
|
||||||
<dimen name="map_widget_text_size_small">15sp</dimen>
|
<dimen name="map_widget_text_size_small">15sp</dimen>
|
||||||
<dimen name="map_button_text_size">18sp</dimen>
|
<dimen name="map_button_text_size">18sp</dimen>
|
||||||
<dimen name="map_alarm_text_size">25sp</dimen>
|
<dimen name="map_alarm_text_size">25sp</dimen>
|
||||||
|
<dimen name="map_alarm_bottom_text_size">16sp</dimen>
|
||||||
<dimen name="map_widget_text_bottom_margin">1sp</dimen>
|
<dimen name="map_widget_text_bottom_margin">1sp</dimen>
|
||||||
<dimen name="map_widget_text_small_bottom_margin">3sp</dimen>
|
<dimen name="map_widget_text_small_bottom_margin">3sp</dimen>
|
||||||
<dimen name="map_widget_icon_margin">2dp</dimen>
|
<dimen name="map_widget_icon_margin">2dp</dimen>
|
||||||
|
|
|
@ -9,6 +9,13 @@
|
||||||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
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
|
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="make_as_start_point">Make as Start Point</string>
|
||||||
|
<string name="shared_string_current">Current</string>
|
||||||
|
<string name="last_intermediate_dest_description">Adds the last stop along the route</string>
|
||||||
|
<string name="first_intermediate_dest_description">Adds the first stop on the route</string>
|
||||||
|
<string name="subsequent_dest_description">Move destination up, and create destination</string>
|
||||||
|
<string name="show_closed_notes">Show closed notes</string>
|
||||||
|
<string name="switch_osm_notes_visibility_desc">Show/Hide OSM Notes on the map.</string>
|
||||||
<string name="gpx_file_desc">GPX - suitable for export to JOSM or other OSM editors.</string>
|
<string name="gpx_file_desc">GPX - suitable for export to JOSM or other OSM editors.</string>
|
||||||
<string name="osc_file_desc">OSC - suitable for export to OpenStreetMap.</string>
|
<string name="osc_file_desc">OSC - suitable for export to OpenStreetMap.</string>
|
||||||
<string name="gpx_file">GPX file</string>
|
<string name="gpx_file">GPX file</string>
|
||||||
|
@ -1710,7 +1717,7 @@
|
||||||
<string name="poi_filter_for_tourists">For tourists</string>
|
<string name="poi_filter_for_tourists">For tourists</string>
|
||||||
<string name="poi_filter_fuel">Fuel</string>
|
<string name="poi_filter_fuel">Fuel</string>
|
||||||
<string name="show_warnings_title">Show alerts…</string>
|
<string name="show_warnings_title">Show alerts…</string>
|
||||||
<string name="show_warnings_descr">Configure traffic warnings (speed limits, forced stops, speed bumps), speed camera warnings, and lane information.</string>
|
<string name="show_warnings_descr">Configure traffic warnings (speed limits, forced stops, speed bumps, tunnels), speed camera warnings, and lane information.</string>
|
||||||
<string name="use_compass_navigation_descr">Use the compass when no heading is detected otherwise.</string>
|
<string name="use_compass_navigation_descr">Use the compass when no heading is detected otherwise.</string>
|
||||||
<string name="use_compass_navigation">Use compass</string>
|
<string name="use_compass_navigation">Use compass</string>
|
||||||
<string name="avoid_motorway">Avoid motorways</string>
|
<string name="avoid_motorway">Avoid motorways</string>
|
||||||
|
@ -2867,4 +2874,6 @@
|
||||||
<string name="nautical_renderer">Nautical</string>
|
<string name="nautical_renderer">Nautical</string>
|
||||||
<string name="copy_location_name">Copy Point/POI name</string>
|
<string name="copy_location_name">Copy Point/POI name</string>
|
||||||
<string name="toast_empty_name_error">Location has no name</string>
|
<string name="toast_empty_name_error">Location has no name</string>
|
||||||
|
<string name="tunnel_warning">Tunnel ahead</string>
|
||||||
|
<string name="show_tunnels">Tunnels</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -365,7 +365,8 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SelectedGpxFile getSelectedFileByPath(String path) {
|
public SelectedGpxFile getSelectedFileByPath(String path) {
|
||||||
for (SelectedGpxFile s : selectedGPXFiles) {
|
List<SelectedGpxFile> newList = new ArrayList<>(selectedGPXFiles);
|
||||||
|
for (SelectedGpxFile s : newList) {
|
||||||
if (s.getGpxFile().path.equals(path)) {
|
if (s.getGpxFile().path.equals(path)) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class LockableScrollView extends ScrollView {
|
||||||
return super.onTouchEvent(ev);
|
return super.onTouchEvent(ev);
|
||||||
}
|
}
|
||||||
// only continue to handle the touch event if scrolling enabled
|
// only continue to handle the touch event if scrolling enabled
|
||||||
return mScrollable;
|
return false;
|
||||||
default:
|
default:
|
||||||
return super.onTouchEvent(ev);
|
return super.onTouchEvent(ev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,6 +119,15 @@ public class OsmAndFormatter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFormattedAlarmInfoDistance(OsmandApplication app, float meters) {
|
||||||
|
boolean kmAndMeters = app.getSettings().METRIC_SYSTEM.get() == MetricsConstants.KILOMETERS_AND_METERS;
|
||||||
|
int mainUnitStr = kmAndMeters ? R.string.km : R.string.mile;
|
||||||
|
float mainUnitInMeters = kmAndMeters ? METERS_IN_KILOMETER : METERS_IN_ONE_MILE;
|
||||||
|
DecimalFormat df = new DecimalFormat("#.#");
|
||||||
|
|
||||||
|
return df.format(meters / mainUnitInMeters) + " " + app.getString(mainUnitStr);
|
||||||
|
}
|
||||||
|
|
||||||
public static String getFormattedDistance(float meters, OsmandApplication ctx) {
|
public static String getFormattedDistance(float meters, OsmandApplication ctx) {
|
||||||
return getFormattedDistance(meters, ctx, true);
|
return getFormattedDistance(meters, ctx, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1070,6 +1070,12 @@ public class OsmandSettings {
|
||||||
SHOW_PEDESTRIAN.setModeDefaultValue(ApplicationMode.CAR, true);
|
SHOW_PEDESTRIAN.setModeDefaultValue(ApplicationMode.CAR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final CommonPreference<Boolean> SHOW_TUNNELS = new BooleanPreference("show_tunnels", false).makeProfile().cache();
|
||||||
|
|
||||||
|
{
|
||||||
|
SHOW_TUNNELS.setModeDefaultValue(ApplicationMode.CAR, true);
|
||||||
|
}
|
||||||
|
|
||||||
public final OsmandPreference<Boolean> SHOW_CAMERAS = new BooleanPreference("show_cameras", false).makeProfile().cache();
|
public final OsmandPreference<Boolean> SHOW_CAMERAS = new BooleanPreference("show_cameras", false).makeProfile().cache();
|
||||||
public final CommonPreference<Boolean> SHOW_LANES = new BooleanPreference("show_lanes", false).makeProfile().cache();
|
public final CommonPreference<Boolean> SHOW_LANES = new BooleanPreference("show_lanes", false).makeProfile().cache();
|
||||||
|
|
||||||
|
@ -1155,6 +1161,8 @@ public class OsmandSettings {
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<Boolean> SHOW_OSM_BUGS = new BooleanPreference("show_osm_bugs", false).makeGlobal();
|
public final OsmandPreference<Boolean> SHOW_OSM_BUGS = new BooleanPreference("show_osm_bugs", false).makeGlobal();
|
||||||
|
public final CommonPreference<Boolean> SHOW_CLOSED_OSM_BUGS = new BooleanPreference("show_closed_osm_bugs", false).makeGlobal();
|
||||||
|
public final CommonPreference<Integer> SHOW_OSM_BUGS_MIN_ZOOM = new IntPreference("show_osm_bugs_min_zoom", 8).makeGlobal();
|
||||||
|
|
||||||
public final CommonPreference<String> MAP_INFO_CONTROLS = new StringPreference("map_info_controls", "").makeProfile();
|
public final CommonPreference<String> MAP_INFO_CONTROLS = new StringPreference("map_info_controls", "").makeProfile();
|
||||||
{
|
{
|
||||||
|
|
|
@ -1660,6 +1660,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull final int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull final int[] grantResults) {
|
||||||
|
if (grantResults.length > 0) {
|
||||||
OsmandPlugin.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
OsmandPlugin.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
|
||||||
MapControlsLayer mcl = mapView.getLayerByClass(MapControlsLayer.class);
|
MapControlsLayer mcl = mapView.getLayerByClass(MapControlsLayer.class);
|
||||||
|
@ -1696,6 +1697,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
}
|
}
|
||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
}
|
}
|
||||||
|
|
|
@ -630,8 +630,8 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
|
||||||
return true;
|
return true;
|
||||||
} else if (preference == showAlarms) {
|
} else if (preference == showAlarms) {
|
||||||
showBooleanSettings(new String[] { getString(R.string.show_traffic_warnings), getString(R.string.show_pedestrian_warnings),
|
showBooleanSettings(new String[] { getString(R.string.show_traffic_warnings), getString(R.string.show_pedestrian_warnings),
|
||||||
getString(R.string.show_cameras), getString(R.string.show_lanes) }, new OsmandPreference[] { settings.SHOW_TRAFFIC_WARNINGS,
|
getString(R.string.show_cameras), getString(R.string.show_lanes), getString(R.string.show_tunnels) }, new OsmandPreference[] { settings.SHOW_TRAFFIC_WARNINGS,
|
||||||
settings.SHOW_PEDESTRIAN, settings.SHOW_CAMERAS, settings.SHOW_LANES }, preference.getTitle());
|
settings.SHOW_PEDESTRIAN, settings.SHOW_CAMERAS, settings.SHOW_LANES, settings.SHOW_TUNNELS }, preference.getTitle());
|
||||||
return true;
|
return true;
|
||||||
} else if (preference == speakAlarms) {
|
} else if (preference == speakAlarms) {
|
||||||
AlertDialog dlg = showBooleanSettings(new String[] { getString(R.string.speak_street_names),
|
AlertDialog dlg = showBooleanSettings(new String[] { getString(R.string.speak_street_names),
|
||||||
|
|
|
@ -90,7 +90,6 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
|
||||||
private static final Log log = PlatformUtil.getLog(SearchByNameAbstractActivity.class);
|
private static final Log log = PlatformUtil.getLog(SearchByNameAbstractActivity.class);
|
||||||
|
|
||||||
private static final int NAVIGATE_TO = 3;
|
private static final int NAVIGATE_TO = 3;
|
||||||
private static final int ADD_WAYPOINT = 4;
|
|
||||||
private static final int SHOW_ON_MAP = 5;
|
private static final int SHOW_ON_MAP = 5;
|
||||||
private static final int ADD_TO_FAVORITE = 6;
|
private static final int ADD_TO_FAVORITE = 6;
|
||||||
|
|
||||||
|
@ -571,9 +570,6 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
|
||||||
} else if (mode == NAVIGATE_TO) {
|
} else if (mode == NAVIGATE_TO) {
|
||||||
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
|
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
|
||||||
searchPoint.getLongitude(), ai.getHistoryName());
|
searchPoint.getLongitude(), ai.getHistoryName());
|
||||||
} else if (mode == ADD_WAYPOINT) {
|
|
||||||
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
|
|
||||||
searchPoint.getLongitude(), ai.getHistoryName());
|
|
||||||
} else if (mode == SHOW_ON_MAP) {
|
} else if (mode == SHOW_ON_MAP) {
|
||||||
showOnMap(searchPoint, ai);
|
showOnMap(searchPoint, ai);
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,14 +80,12 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AndroidUiHelper.isOrientationPortrait(activity)) {
|
if (AndroidUiHelper.isOrientationPortrait(activity)) {
|
||||||
AndroidUtils.setBackground(activity, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
|
mainView.setBackgroundResource(getPortraitBgResId());
|
||||||
} else {
|
} else {
|
||||||
if (screenHeight - statusBarHeight - mainView.getHeight() >= getResources().getDimension(R.dimen.bottom_sheet_content_padding_small)) {
|
if (screenHeight - statusBarHeight - mainView.getHeight() >= getResources().getDimension(R.dimen.bottom_sheet_content_padding_small)) {
|
||||||
AndroidUtils.setBackground(activity, mainView, nightMode,
|
mainView.setBackgroundResource(getLandscapeTopsidesBgResId());
|
||||||
R.drawable.bg_bottom_sheet_topsides_landscape_light, R.drawable.bg_bottom_sheet_topsides_landscape_dark);
|
|
||||||
} else {
|
} else {
|
||||||
AndroidUtils.setBackground(activity, mainView, nightMode,
|
mainView.setBackgroundResource(getLandscapeSidesBgResId());
|
||||||
R.drawable.bg_bottom_sheet_sides_landscape_light, R.drawable.bg_bottom_sheet_sides_landscape_dark);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,6 +99,21 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
protected int getPortraitBgResId() {
|
||||||
|
return nightMode ? R.drawable.bg_bottom_menu_dark : R.drawable.bg_bottom_menu_light;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
protected int getLandscapeTopsidesBgResId() {
|
||||||
|
return nightMode ? R.drawable.bg_bottom_sheet_topsides_landscape_dark : R.drawable.bg_bottom_sheet_topsides_landscape_light;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
protected int getLandscapeSidesBgResId() {
|
||||||
|
return nightMode ? R.drawable.bg_bottom_sheet_sides_landscape_dark : R.drawable.bg_bottom_sheet_sides_landscape_light;
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean isNightMode() {
|
protected boolean isNightMode() {
|
||||||
if (usedOnMap) {
|
if (usedOnMap) {
|
||||||
return getMyApplication().getDaynightHelper().isNightModeForMapControls();
|
return getMyApplication().getDaynightHelper().isNightModeForMapControls();
|
||||||
|
|
|
@ -76,6 +76,7 @@ import net.osmand.plus.mapcontextmenu.other.RoutePreferencesMenu;
|
||||||
import net.osmand.plus.mapcontextmenu.other.RoutePreferencesMenu.LocalRoutingParameter;
|
import net.osmand.plus.mapcontextmenu.other.RoutePreferencesMenu.LocalRoutingParameter;
|
||||||
import net.osmand.plus.mapillary.MapillaryFiltersFragment;
|
import net.osmand.plus.mapillary.MapillaryFiltersFragment;
|
||||||
import net.osmand.plus.mapillary.MapillaryPlugin.MapillaryFirstDialogFragment;
|
import net.osmand.plus.mapillary.MapillaryPlugin.MapillaryFirstDialogFragment;
|
||||||
|
import net.osmand.plus.osmedit.OsmNotesMenu;
|
||||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||||
import net.osmand.plus.routing.RoutingHelper;
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
import net.osmand.plus.routing.RoutingHelper.IRouteInformationListener;
|
import net.osmand.plus.routing.RoutingHelper.IRouteInformationListener;
|
||||||
|
@ -189,7 +190,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
||||||
UNDERLAY_MAP,
|
UNDERLAY_MAP,
|
||||||
MAPILLARY,
|
MAPILLARY,
|
||||||
CONTOUR_LINES,
|
CONTOUR_LINES,
|
||||||
HILLSHADE
|
HILLSHADE,
|
||||||
|
OSM_NOTES
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<DashboardActionButtonType, DashboardActionButton> actionButtons = new HashMap<>();
|
private Map<DashboardActionButtonType, DashboardActionButton> actionButtons = new HashMap<>();
|
||||||
|
@ -428,6 +430,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
||||||
tv.setText(R.string.srtm_plugin_name);
|
tv.setText(R.string.srtm_plugin_name);
|
||||||
} else if (visibleType == DashboardType.HILLSHADE) {
|
} else if (visibleType == DashboardType.HILLSHADE) {
|
||||||
tv.setText(R.string.layer_hillshade);
|
tv.setText(R.string.layer_hillshade);
|
||||||
|
} else if (visibleType == DashboardType.OSM_NOTES) {
|
||||||
|
tv.setText(R.string.osm_notes);
|
||||||
}
|
}
|
||||||
ImageView edit = (ImageView) dashboardView.findViewById(R.id.toolbar_edit);
|
ImageView edit = (ImageView) dashboardView.findViewById(R.id.toolbar_edit);
|
||||||
edit.setVisibility(View.GONE);
|
edit.setVisibility(View.GONE);
|
||||||
|
@ -822,7 +826,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
||||||
&& visibleType != DashboardType.CONFIGURE_SCREEN
|
&& visibleType != DashboardType.CONFIGURE_SCREEN
|
||||||
&& visibleType != DashboardType.CONFIGURE_MAP
|
&& visibleType != DashboardType.CONFIGURE_MAP
|
||||||
&& visibleType != DashboardType.CONTOUR_LINES
|
&& visibleType != DashboardType.CONTOUR_LINES
|
||||||
&& visibleType != DashboardType.HILLSHADE) {
|
&& visibleType != DashboardType.HILLSHADE
|
||||||
|
&& visibleType != DashboardType.OSM_NOTES) {
|
||||||
listView.setDivider(dividerDrawable);
|
listView.setDivider(dividerDrawable);
|
||||||
listView.setDividerHeight(dpToPx(1f));
|
listView.setDividerHeight(dpToPx(1f));
|
||||||
} else {
|
} else {
|
||||||
|
@ -879,6 +884,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
|
||||||
cm = ContourLinesMenu.createListAdapter(mapActivity);
|
cm = ContourLinesMenu.createListAdapter(mapActivity);
|
||||||
} else if (visibleType == DashboardType.HILLSHADE) {
|
} else if (visibleType == DashboardType.HILLSHADE) {
|
||||||
cm = HillshadeMenu.createListAdapter(mapActivity);
|
cm = HillshadeMenu.createListAdapter(mapActivity);
|
||||||
|
} else if (visibleType == DashboardType.OSM_NOTES) {
|
||||||
|
cm = OsmNotesMenu.createListAdapter(mapActivity);
|
||||||
}
|
}
|
||||||
if (cm != null) {
|
if (cm != null) {
|
||||||
updateListAdapter(cm);
|
updateListAdapter(cm);
|
||||||
|
|
|
@ -0,0 +1,171 @@
|
||||||
|
package net.osmand.plus.dialogs;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.LayerDrawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.DrawableRes;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.view.ContextThemeWrapper;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.data.PointDescription;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.TargetPointsHelper;
|
||||||
|
import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
|
|
||||||
|
public class AddWaypointBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
|
public static final String TAG = "AddWaypointBottomSheetDialogFragment";
|
||||||
|
public static final String LAT_KEY = "latitude";
|
||||||
|
public static final String LON_KEY = "longitude";
|
||||||
|
public static final String POINT_DESCRIPTION_KEY = "point_description";
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
Bundle args = getArguments();
|
||||||
|
final LatLon latLon = new LatLon(args.getDouble(LAT_KEY), args.getDouble(LON_KEY));
|
||||||
|
final PointDescription name = PointDescription.deserializeFromString(args.getString(POINT_DESCRIPTION_KEY), latLon);
|
||||||
|
final TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper();
|
||||||
|
|
||||||
|
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
|
||||||
|
final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||||
|
R.layout.fragment_add_waypoint_bottom_sheet_dialog, container);
|
||||||
|
|
||||||
|
((TextView) mainView.findViewById(R.id.current_dest_text_view))
|
||||||
|
.setText(getCurrentPointName(targetPointsHelper.getPointToNavigate(), false));
|
||||||
|
((TextView) mainView.findViewById(R.id.current_start_text_view))
|
||||||
|
.setText(getCurrentPointName(targetPointsHelper.getPointToStart(), true));
|
||||||
|
|
||||||
|
((ImageView) mainView.findViewById(R.id.subsequent_dest_icon)).setImageDrawable(getSubsequentDestIcon());
|
||||||
|
((ImageView) mainView.findViewById(R.id.first_interm_dest_icon)).setImageDrawable(getFirstIntermDestIcon());
|
||||||
|
((ImageView) mainView.findViewById(R.id.last_interm_dest_icon)).setImageDrawable(getLastIntermDistIcon());
|
||||||
|
|
||||||
|
View.OnClickListener onClickListener = new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
int id = v.getId();
|
||||||
|
if (id == R.id.replace_dest_row) {
|
||||||
|
targetPointsHelper.navigateToPoint(latLon, true, -1, name);
|
||||||
|
} else if (id == R.id.replace_start_row) {
|
||||||
|
TargetPoint start = targetPointsHelper.getPointToStart();
|
||||||
|
if (start != null) {
|
||||||
|
targetPointsHelper.navigateToPoint(new LatLon(start.getLatitude(), start.getLongitude()),
|
||||||
|
false, 0, start.getOriginalPointDescription());
|
||||||
|
}
|
||||||
|
targetPointsHelper.setStartPoint(latLon, true, name);
|
||||||
|
} else if (id == R.id.subsequent_dest_row) {
|
||||||
|
targetPointsHelper.navigateToPoint(latLon, true,
|
||||||
|
targetPointsHelper.getIntermediatePoints().size() + 1, name);
|
||||||
|
} else if (id == R.id.first_intermediate_dest_row) {
|
||||||
|
targetPointsHelper.navigateToPoint(latLon, true, 0, name);
|
||||||
|
} else if (id == R.id.last_intermediate_dest_row) {
|
||||||
|
targetPointsHelper.navigateToPoint(latLon, true, targetPointsHelper.getIntermediatePoints().size(), name);
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mainView.findViewById(R.id.replace_dest_row).setOnClickListener(onClickListener);
|
||||||
|
mainView.findViewById(R.id.replace_start_row).setOnClickListener(onClickListener);
|
||||||
|
mainView.findViewById(R.id.subsequent_dest_row).setOnClickListener(onClickListener);
|
||||||
|
mainView.findViewById(R.id.first_intermediate_dest_row).setOnClickListener(onClickListener);
|
||||||
|
mainView.findViewById(R.id.last_intermediate_dest_row).setOnClickListener(onClickListener);
|
||||||
|
mainView.findViewById(R.id.cancel_row).setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
if (nightMode) {
|
||||||
|
int dividerColor = ContextCompat.getColor(getContext(), R.color.route_info_bottom_view_bg_dark);
|
||||||
|
mainView.findViewById(R.id.current_dest_divider).setBackgroundColor(dividerColor);
|
||||||
|
mainView.findViewById(R.id.cancel_divider).setBackgroundColor(dividerColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
setupHeightAndBackground(mainView, R.id.scroll_view);
|
||||||
|
|
||||||
|
return mainView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDismiss(DialogInterface dialog) {
|
||||||
|
super.onDismiss(dialog);
|
||||||
|
closeContextMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Drawable getActiveIcon(@DrawableRes int id) {
|
||||||
|
return getIcon(id, nightMode ? R.color.ctx_menu_direction_color_dark : R.color.map_widget_blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getPortraitBgResId() {
|
||||||
|
return nightMode ? R.drawable.bg_additional_menu_dark : R.drawable.bg_bottom_menu_light;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLandscapeTopsidesBgResId() {
|
||||||
|
return nightMode ? R.drawable.bg_additional_menu_topsides_dark : R.drawable.bg_bottom_sheet_topsides_landscape_light;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLandscapeSidesBgResId() {
|
||||||
|
return nightMode ? R.drawable.bg_additional_menu_sides_dark : R.drawable.bg_bottom_sheet_sides_landscape_light;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Drawable getBackgroundIcon(@DrawableRes int resId) {
|
||||||
|
return getIcon(resId, R.color.searchbar_text_hint_light);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LayerDrawable getLayerDrawable(@DrawableRes int bgIdRes, @DrawableRes int icIdRes) {
|
||||||
|
return new LayerDrawable(new Drawable[]{getBackgroundIcon(bgIdRes), getActiveIcon(icIdRes)});
|
||||||
|
}
|
||||||
|
|
||||||
|
private LayerDrawable getSubsequentDestIcon() {
|
||||||
|
return getLayerDrawable(R.drawable.ic_action_route_subsequent_destination,
|
||||||
|
R.drawable.ic_action_route_subsequent_destination_point);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LayerDrawable getFirstIntermDestIcon() {
|
||||||
|
return getLayerDrawable(R.drawable.ic_action_route_first_intermediate,
|
||||||
|
R.drawable.ic_action_route_first_intermediate_point);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LayerDrawable getLastIntermDistIcon() {
|
||||||
|
return getLayerDrawable(R.drawable.ic_action_route_last_intermediate,
|
||||||
|
R.drawable.ic_action_route_last_intermediate_point);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getCurrentPointName(@Nullable TargetPoint point, boolean start) {
|
||||||
|
Context ctx = getContext();
|
||||||
|
StringBuilder builder = new StringBuilder(ctx.getString(R.string.shared_string_current));
|
||||||
|
builder.append(": ");
|
||||||
|
if (point != null) {
|
||||||
|
if (point.getOnlyName().length() > 0) {
|
||||||
|
builder.append(point.getOnlyName());
|
||||||
|
} else {
|
||||||
|
builder.append(ctx.getString(R.string.route_descr_map_location));
|
||||||
|
builder.append(" ");
|
||||||
|
builder.append(ctx.getString(R.string.route_descr_lat_lon, point.getLatitude(), point.getLongitude()));
|
||||||
|
}
|
||||||
|
} else if (start) {
|
||||||
|
builder.append(ctx.getString(R.string.shared_string_my_location));
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeContextMenu() {
|
||||||
|
Activity activity = getActivity();
|
||||||
|
if (activity instanceof MapActivity) {
|
||||||
|
((MapActivity) activity).getContextMenu().close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -42,15 +42,12 @@ import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.MapActivityLayers;
|
import net.osmand.plus.activities.MapActivityLayers;
|
||||||
import net.osmand.plus.activities.PluginActivity;
|
import net.osmand.plus.activities.PluginActivity;
|
||||||
import net.osmand.plus.activities.SettingsActivity;
|
import net.osmand.plus.activities.SettingsActivity;
|
||||||
import net.osmand.plus.dashboard.DashboardOnMap;
|
|
||||||
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
||||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||||
import net.osmand.plus.render.RendererRegistry;
|
import net.osmand.plus.render.RendererRegistry;
|
||||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||||
import net.osmand.plus.views.GPXLayer;
|
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.RouteLayer;
|
|
||||||
import net.osmand.plus.views.corenative.NativeCoreContext;
|
import net.osmand.plus.views.corenative.NativeCoreContext;
|
||||||
import net.osmand.render.RenderingRule;
|
import net.osmand.render.RenderingRule;
|
||||||
import net.osmand.render.RenderingRuleProperty;
|
import net.osmand.render.RenderingRuleProperty;
|
||||||
|
@ -62,7 +59,6 @@ import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -503,29 +499,33 @@ public class ConfigureMapMenu {
|
||||||
AlertDialog.Builder bld = new AlertDialog.Builder(activity);
|
AlertDialog.Builder bld = new AlertDialog.Builder(activity);
|
||||||
bld.setTitle(R.string.renderers);
|
bld.setTitle(R.string.renderers);
|
||||||
final OsmandApplication app = activity.getMyApplication();
|
final OsmandApplication app = activity.getMyApplication();
|
||||||
Collection<String> rendererNames = app.getRendererRegistry().getRendererNames();
|
final ArrayList<String> items = new ArrayList<>(app.getRendererRegistry().getRendererNames());
|
||||||
final String[] items = rendererNames.toArray(new String[rendererNames.size()]);
|
|
||||||
boolean nauticalPluginDisabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) == null;
|
boolean nauticalPluginDisabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) == null;
|
||||||
final List<String> visibleNamesList = new ArrayList<>();
|
final List<String> visibleNamesList = new ArrayList<>();
|
||||||
int selected = -1;
|
int selected = -1;
|
||||||
final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName();
|
final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (String item : items) {
|
Iterator<String> iterator = items.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
String item = iterator.next();
|
||||||
if (nauticalPluginDisabled && item.equals(RendererRegistry.NAUTICAL_RENDER)) {
|
if (nauticalPluginDisabled && item.equals(RendererRegistry.NAUTICAL_RENDER)) {
|
||||||
continue;
|
iterator.remove();
|
||||||
}
|
} else {
|
||||||
if (item.equals(selectedName)) {
|
if (item.equals(selectedName)) {
|
||||||
selected = i;
|
selected = i;
|
||||||
}
|
}
|
||||||
visibleNamesList.add(item.replace('_', ' ').replace('-', ' '));
|
String translation = RendererRegistry.getTranslatedRendererName(activity, item);
|
||||||
|
visibleNamesList.add(translation != null ? translation
|
||||||
|
: item.replace('_', ' ').replace('-', ' '));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bld.setSingleChoiceItems(visibleNamesList.toArray(new String[visibleNamesList.size()]), selected, new DialogInterface.OnClickListener() {
|
bld.setSingleChoiceItems(visibleNamesList.toArray(new String[visibleNamesList.size()]), selected, new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
String renderer = visibleNamesList.get(which);
|
String renderer = items.get(which);
|
||||||
RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer);
|
RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer);
|
||||||
if (loaded != null) {
|
if (loaded != null) {
|
||||||
OsmandMapTileView view = activity.getMapView();
|
OsmandMapTileView view = activity.getMapView();
|
||||||
|
@ -1135,7 +1135,8 @@ public class ConfigureMapMenu {
|
||||||
if (storage == null) {
|
if (storage == null) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
return storage.getName();
|
String translation = RendererRegistry.getTranslatedRendererName(activity, storage.getName());
|
||||||
|
return translation == null ? storage.getName() : translation;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getDayNightDescr(final MapActivity activity) {
|
protected String getDayNightDescr(final MapActivity activity) {
|
||||||
|
|
|
@ -2,7 +2,9 @@ package net.osmand.plus.dialogs;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.PopupMenu;
|
import android.support.v7.widget.PopupMenu;
|
||||||
|
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
|
@ -46,37 +48,16 @@ public class DirectionsDialogs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addWaypointDialogAndLaunchMap(final Activity act, final double lat, final double lon, final PointDescription name) {
|
public static void addWaypointDialogAndLaunchMap(final AppCompatActivity act, final double lat, final double lon, final PointDescription name) {
|
||||||
final OsmandApplication ctx = (OsmandApplication) act.getApplication();
|
final TargetPointsHelper targetPointsHelper = ((OsmandApplication) act.getApplication()).getTargetPointsHelper();
|
||||||
final TargetPointsHelper targetPointsHelper = ctx.getTargetPointsHelper();
|
|
||||||
if (targetPointsHelper.getPointToNavigate() != null) {
|
if (targetPointsHelper.getPointToNavigate() != null) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(act);
|
Bundle args = new Bundle();
|
||||||
builder.setTitle(R.string.new_destination_point_dialog);
|
args.putDouble(AddWaypointBottomSheetDialogFragment.LAT_KEY, lat);
|
||||||
builder.setItems(
|
args.putDouble(AddWaypointBottomSheetDialogFragment.LON_KEY, lon);
|
||||||
new String[] { act.getString(R.string.replace_destination_point),
|
args.putString(AddWaypointBottomSheetDialogFragment.POINT_DESCRIPTION_KEY, PointDescription.serializeToString(name));
|
||||||
act.getString(R.string.keep_and_add_destination_point),
|
AddWaypointBottomSheetDialogFragment fragment = new AddWaypointBottomSheetDialogFragment();
|
||||||
act.getString(R.string.add_as_first_destination_point), act.getString(R.string.add_as_last_destination_point) },
|
fragment.setArguments(args);
|
||||||
new DialogInterface.OnClickListener() {
|
fragment.show(act.getSupportFragmentManager(), AddWaypointBottomSheetDialogFragment.TAG);
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
if (which == 0) {
|
|
||||||
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, -1, name);
|
|
||||||
closeContextMenu(act);
|
|
||||||
} else if (which == 1) {
|
|
||||||
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true,
|
|
||||||
targetPointsHelper.getIntermediatePoints().size() + 1, name);
|
|
||||||
closeContextMenu(act);
|
|
||||||
} else if (which == 2) {
|
|
||||||
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, 0, name);
|
|
||||||
closeContextMenu(act);
|
|
||||||
} else {
|
|
||||||
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, targetPointsHelper.getIntermediatePoints().size(), name);
|
|
||||||
closeContextMenu(act);
|
|
||||||
}
|
|
||||||
MapActivity.launchMapActivityMoveToTop(act);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
} else {
|
} else {
|
||||||
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, -1, name);
|
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, -1, name);
|
||||||
closeContextMenu(act);
|
closeContextMenu(act);
|
||||||
|
|
|
@ -268,6 +268,8 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putBoolean(STORAGE_READOLNY_KEY, storageReadOnly);
|
args.putBoolean(STORAGE_READOLNY_KEY, storageReadOnly);
|
||||||
f.setArguments(args);
|
f.setArguments(args);
|
||||||
f.show(fragmentManager, DataStoragePlaceDialogFragment.TAG);
|
fragmentManager.beginTransaction()
|
||||||
|
.add(f, DataStoragePlaceDialogFragment.TAG)
|
||||||
|
.commitAllowingStateLoss();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,6 +178,7 @@ public class WaypointHelper {
|
||||||
}
|
}
|
||||||
AlarmInfo mostImportant = speedAlarm;
|
AlarmInfo mostImportant = speedAlarm;
|
||||||
int value = speedAlarm != null ? speedAlarm.updateDistanceAndGetPriority(0, 0) : Integer.MAX_VALUE;
|
int value = speedAlarm != null ? speedAlarm.updateDistanceAndGetPriority(0, 0) : Integer.MAX_VALUE;
|
||||||
|
float speed = lastProjection != null && lastProjection.hasSpeed() ? lastProjection.getSpeed() : 0;
|
||||||
if (ALARMS < pointsProgress.size()) {
|
if (ALARMS < pointsProgress.size()) {
|
||||||
int kIterator = pointsProgress.get(ALARMS);
|
int kIterator = pointsProgress.get(ALARMS);
|
||||||
List<LocationPointWrapper> lp = locationPoints.get(ALARMS);
|
List<LocationPointWrapper> lp = locationPoints.get(ALARMS);
|
||||||
|
@ -191,7 +192,6 @@ public class WaypointHelper {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
AlarmInfo inf = (AlarmInfo) lwp.point;
|
AlarmInfo inf = (AlarmInfo) lwp.point;
|
||||||
float speed = lastProjection != null && lastProjection.hasSpeed() ? lastProjection.getSpeed() : 0;
|
|
||||||
float time = speed > 0 ? d / speed : Integer.MAX_VALUE;
|
float time = speed > 0 ? d / speed : Integer.MAX_VALUE;
|
||||||
int vl = inf.updateDistanceAndGetPriority(time, d);
|
int vl = inf.updateDistanceAndGetPriority(time, d);
|
||||||
if (vl < value && (showCameras || inf.getType() != AlarmInfoType.SPEED_CAMERA)) {
|
if (vl < value && (showCameras || inf.getType() != AlarmInfoType.SPEED_CAMERA)) {
|
||||||
|
@ -704,32 +704,39 @@ public class WaypointHelper {
|
||||||
|
|
||||||
} else if (type == ALARMS) {
|
} else if (type == ALARMS) {
|
||||||
//assign alarm list icons manually for now
|
//assign alarm list icons manually for now
|
||||||
if (((AlarmInfo) point).getType().toString().equals("SPEED_CAMERA")) {
|
String typeString = ((AlarmInfo) point).getType().toString();
|
||||||
|
if (typeString.equals("SPEED_CAMERA")) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.mx_highway_speed_camera);
|
return uiCtx.getResources().getDrawable(R.drawable.mx_highway_speed_camera);
|
||||||
} else if (((AlarmInfo) point).getType().toString().equals("BORDER_CONTROL")) {
|
} else if (typeString.equals("BORDER_CONTROL")) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.mx_barrier_border_control);
|
return uiCtx.getResources().getDrawable(R.drawable.mx_barrier_border_control);
|
||||||
} else if (((AlarmInfo) point).getType().toString().equals("RAILWAY")) {
|
} else if (typeString.equals("RAILWAY")) {
|
||||||
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_railways_us);
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_railways_us);
|
||||||
} else {
|
} else {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_railways);
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_railways);
|
||||||
}
|
}
|
||||||
} else if (((AlarmInfo) point).getType().toString().equals("TRAFFIC_CALMING")) {
|
} else if (typeString.equals("TRAFFIC_CALMING")) {
|
||||||
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_traffic_calming_us);
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_traffic_calming_us);
|
||||||
} else {
|
} else {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_traffic_calming);
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_traffic_calming);
|
||||||
}
|
}
|
||||||
} else if (((AlarmInfo) point).getType().toString().equals("TOLL_BOOTH")) {
|
} else if (typeString.equals("TOLL_BOOTH")) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.mx_toll_booth);
|
return uiCtx.getResources().getDrawable(R.drawable.mx_toll_booth);
|
||||||
} else if (((AlarmInfo) point).getType().toString().equals("STOP")) {
|
} else if (typeString.equals("STOP")) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_stop);
|
return uiCtx.getResources().getDrawable(R.drawable.list_stop);
|
||||||
} else if (((AlarmInfo) point).getType().toString().equals("PEDESTRIAN")) {
|
} else if (typeString.equals("PEDESTRIAN")) {
|
||||||
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_pedestrian_us);
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_pedestrian_us);
|
||||||
} else {
|
} else {
|
||||||
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_pedestrian);
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_pedestrian);
|
||||||
}
|
}
|
||||||
|
} else if (typeString.equals("TUNNEL")) {
|
||||||
|
if (app.getSettings().DRIVING_REGION.get().americanSigns) {
|
||||||
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_tunnel_us);
|
||||||
|
} else {
|
||||||
|
return uiCtx.getResources().getDrawable(R.drawable.list_warnings_tunnel);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -665,6 +665,11 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasActiveToolbar() {
|
||||||
|
TopToolbarController toolbarController = mapActivity.getTopToolbarController(TopToolbarControllerType.CONTEXT_MENU);
|
||||||
|
return toolbarController != null && toolbarController instanceof ContextMenuToolbarController;
|
||||||
|
}
|
||||||
|
|
||||||
public void closeActiveToolbar() {
|
public void closeActiveToolbar() {
|
||||||
TopToolbarController toolbarController = mapActivity.getTopToolbarController(TopToolbarControllerType.CONTEXT_MENU);
|
TopToolbarController toolbarController = mapActivity.getTopToolbarController(TopToolbarControllerType.CONTEXT_MENU);
|
||||||
if (toolbarController != null && toolbarController instanceof ContextMenuToolbarController) {
|
if (toolbarController != null && toolbarController instanceof ContextMenuToolbarController) {
|
||||||
|
@ -1069,7 +1074,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
||||||
if (menuController != null) {
|
if (menuController != null) {
|
||||||
return menuController.getHalfScreenMaxHeightKoef();
|
return menuController.getHalfScreenMaxHeightKoef();
|
||||||
} else {
|
} else {
|
||||||
return 0f;
|
return .75f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1177,7 +1182,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
||||||
|
|
||||||
public int getAdditionalInfoColor() {
|
public int getAdditionalInfoColor() {
|
||||||
if (menuController != null) {
|
if (menuController != null) {
|
||||||
return menuController.getAdditionalInfoColor();
|
return menuController.getAdditionalInfoColorId();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import android.view.MotionEvent;
|
||||||
import android.view.VelocityTracker;
|
import android.view.VelocityTracker;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnLayoutChangeListener;
|
import android.view.View.OnLayoutChangeListener;
|
||||||
|
import android.view.ViewConfiguration;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
@ -29,6 +30,7 @@ import android.widget.GridView;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.OverScroller;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
@ -66,16 +68,23 @@ import static net.osmand.plus.mapcontextmenu.MenuBuilder.SHADOW_HEIGHT_TOP_DP;
|
||||||
public class MapContextMenuFragment extends BaseOsmAndFragment implements DownloadEvents {
|
public class MapContextMenuFragment extends BaseOsmAndFragment implements DownloadEvents {
|
||||||
public static final String TAG = "MapContextMenuFragment";
|
public static final String TAG = "MapContextMenuFragment";
|
||||||
|
|
||||||
public static final float FAB_PADDING_TOP_DP = 4f;
|
public static final float ZOOM_PADDING_TOP_DP = 4f;
|
||||||
public static final float MARKER_PADDING_DP = 20f;
|
public static final float MARKER_PADDING_DP = 20f;
|
||||||
public static final float MARKER_PADDING_X_DP = 50f;
|
public static final float MARKER_PADDING_X_DP = 50f;
|
||||||
public static final float SKIP_HALF_SCREEN_STATE_KOEF = .21f;
|
|
||||||
public static final int ZOOM_IN_STANDARD = 17;
|
public static final int ZOOM_IN_STANDARD = 17;
|
||||||
|
|
||||||
public static final int CURRENT_Y_UNDEFINED = Integer.MAX_VALUE;
|
public static final int CURRENT_Y_UNDEFINED = Integer.MAX_VALUE;
|
||||||
|
|
||||||
private View view;
|
private View view;
|
||||||
private InterceptorLinearLayout mainView;
|
private InterceptorLinearLayout mainView;
|
||||||
|
|
||||||
|
private View toolbarContainer;
|
||||||
|
private View toolbarView;
|
||||||
|
private View toolbarBackButton;
|
||||||
|
private TextView toolbarTextView;
|
||||||
|
private View topButtonContainer;
|
||||||
|
private LockableScrollView menuScrollView;
|
||||||
|
|
||||||
private View zoomButtonsView;
|
private View zoomButtonsView;
|
||||||
private ImageButton zoomInButtonView;
|
private ImageButton zoomInButtonView;
|
||||||
private ImageButton zoomOutButtonView;
|
private ImageButton zoomOutButtonView;
|
||||||
|
@ -87,6 +96,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
private int menuTopShadowAllHeight;
|
private int menuTopShadowAllHeight;
|
||||||
private int menuTitleHeight;
|
private int menuTitleHeight;
|
||||||
private int menuBottomViewHeight;
|
private int menuBottomViewHeight;
|
||||||
|
private int menuButtonsHeight;
|
||||||
private int menuFullHeight;
|
private int menuFullHeight;
|
||||||
private int menuFullHeightMax;
|
private int menuFullHeightMax;
|
||||||
private int menuTopViewHeightExcludingTitle;
|
private int menuTopViewHeightExcludingTitle;
|
||||||
|
@ -99,6 +109,10 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
private int markerPaddingPx;
|
private int markerPaddingPx;
|
||||||
private int markerPaddingXPx;
|
private int markerPaddingXPx;
|
||||||
private int topScreenPosY;
|
private int topScreenPosY;
|
||||||
|
private int bottomToolbarPosY;
|
||||||
|
private int minHalfY;
|
||||||
|
private int shadowHeight;
|
||||||
|
private int zoomPaddingTop;
|
||||||
|
|
||||||
private OsmandMapTileView map;
|
private OsmandMapTileView map;
|
||||||
private LatLon mapCenter;
|
private LatLon mapCenter;
|
||||||
|
@ -113,8 +127,6 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
private boolean wasDrawerDisabled;
|
private boolean wasDrawerDisabled;
|
||||||
private boolean zoomIn;
|
private boolean zoomIn;
|
||||||
|
|
||||||
private float skipScreenStateLimit;
|
|
||||||
|
|
||||||
private int screenOrientation;
|
private int screenOrientation;
|
||||||
private boolean created;
|
private boolean created;
|
||||||
|
|
||||||
|
@ -124,18 +136,46 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
|
|
||||||
processScreenHeight(container);
|
processScreenHeight(container);
|
||||||
|
|
||||||
|
menu = getMapActivity().getContextMenu();
|
||||||
|
|
||||||
markerPaddingPx = dpToPx(MARKER_PADDING_DP);
|
markerPaddingPx = dpToPx(MARKER_PADDING_DP);
|
||||||
markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP);
|
markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP);
|
||||||
topScreenPosY = addStatusBarHeightIfNeeded(-dpToPx(SHADOW_HEIGHT_TOP_DP));
|
shadowHeight = dpToPx(SHADOW_HEIGHT_TOP_DP);
|
||||||
|
topScreenPosY = addStatusBarHeightIfNeeded(-shadowHeight);
|
||||||
|
bottomToolbarPosY = addStatusBarHeightIfNeeded(getResources().getDimensionPixelSize(R.dimen.dashboard_map_toolbar));
|
||||||
|
minHalfY = viewHeight - (int) (viewHeight * menu.getHalfScreenMaxHeightKoef());
|
||||||
|
zoomPaddingTop = dpToPx(ZOOM_PADDING_TOP_DP);
|
||||||
|
|
||||||
menu = getMapActivity().getContextMenu();
|
|
||||||
view = inflater.inflate(R.layout.map_context_menu_fragment, container, false);
|
view = inflater.inflate(R.layout.map_context_menu_fragment, container, false);
|
||||||
if (!menu.isActive()) {
|
if (!menu.isActive()) {
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
AndroidUtils.addStatusBarPadding21v(getMapActivity(), view);
|
||||||
|
|
||||||
nightMode = menu.isNightMode();
|
nightMode = menu.isNightMode();
|
||||||
mainView = view.findViewById(R.id.context_menu_main);
|
mainView = view.findViewById(R.id.context_menu_main);
|
||||||
|
|
||||||
|
toolbarContainer = view.findViewById(R.id.context_menu_toolbar_container);
|
||||||
|
toolbarView = view.findViewById(R.id.context_menu_toolbar);
|
||||||
|
toolbarBackButton = view.findViewById(R.id.context_menu_toolbar_back);
|
||||||
|
toolbarTextView = (TextView) view.findViewById(R.id.context_menu_toolbar_text);
|
||||||
|
updateVisibility(toolbarContainer, 0);
|
||||||
|
toolbarBackButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
openMenuHeaderOnly();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
topButtonContainer = view.findViewById(R.id.context_menu_top_button_container);
|
||||||
|
view.findViewById(R.id.context_menu_top_back).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
openMenuHeaderOnly();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateVisibility(topButtonContainer, 0);
|
||||||
|
|
||||||
map = getMapActivity().getMapView();
|
map = getMapActivity().getMapView();
|
||||||
RotatedTileBox box = map.getCurrentRotatedTileBox().copy();
|
RotatedTileBox box = map.getCurrentRotatedTileBox().copy();
|
||||||
customMapCenter = menu.getMapCenter() != null;
|
customMapCenter = menu.getMapCenter() != null;
|
||||||
|
@ -252,30 +292,41 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
private float dy;
|
private float dy;
|
||||||
private float dyMain;
|
private float dyMain;
|
||||||
private float mDownY;
|
private float mDownY;
|
||||||
private VelocityTracker velocity;
|
|
||||||
|
private int minimumVelocity;
|
||||||
|
private int maximumVelocity;
|
||||||
|
private VelocityTracker velocityTracker;
|
||||||
|
private OverScroller scroller;
|
||||||
|
|
||||||
private boolean slidingUp;
|
private boolean slidingUp;
|
||||||
private boolean slidingDown;
|
private boolean slidingDown;
|
||||||
|
|
||||||
private float velocityY;
|
|
||||||
private float maxVelocityY;
|
|
||||||
private boolean hasMoved;
|
private boolean hasMoved;
|
||||||
|
|
||||||
|
{
|
||||||
|
scroller = new OverScroller(getContext());
|
||||||
|
final ViewConfiguration configuration = ViewConfiguration.get(getContext());
|
||||||
|
minimumVelocity = configuration.getScaledMinimumFlingVelocity();
|
||||||
|
maximumVelocity = configuration.getScaledMaximumFlingVelocity();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
|
||||||
if (event.getY() <= menuTopViewHeight) {
|
if (!hasMoved && event.getY() <= menuTopViewHeight) {
|
||||||
if (singleTapDetector.onTouchEvent(event)) {
|
if (singleTapDetector.onTouchEvent(event)) {
|
||||||
moving = false;
|
moving = false;
|
||||||
if (hasMoved) {
|
|
||||||
applyPosY(getViewY(), false, false, 0, 0, 0);
|
|
||||||
}
|
|
||||||
openMenuHalfScreen();
|
openMenuHalfScreen();
|
||||||
|
|
||||||
|
recycleVelocityTracker();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (menu.isLandscapeLayout()) {
|
if (menu.isLandscapeLayout()) {
|
||||||
if (swipeDetector.onTouchEvent(event)) {
|
if (swipeDetector.onTouchEvent(event)) {
|
||||||
menu.close();
|
menu.close();
|
||||||
|
|
||||||
|
recycleVelocityTracker();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -286,10 +337,9 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
mDownY = event.getRawY();
|
mDownY = event.getRawY();
|
||||||
dy = event.getY();
|
dy = event.getY();
|
||||||
dyMain = getViewY();
|
dyMain = getViewY();
|
||||||
velocity = VelocityTracker.obtain();
|
|
||||||
velocityY = 0;
|
initOrResetVelocityTracker();
|
||||||
maxVelocityY = 0;
|
velocityTracker.addMovement(event);
|
||||||
velocity.addMovement(event);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
|
@ -300,8 +350,8 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
hasMoved = true;
|
hasMoved = true;
|
||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
float newY = getViewY() + (y - dy);
|
float newY = getViewY() + (y - dy);
|
||||||
if (menu.isLandscapeLayout() && newY > 0) {
|
if (menu.isLandscapeLayout() && newY > topScreenPosY) {
|
||||||
newY = 0;
|
newY = topScreenPosY;
|
||||||
}
|
}
|
||||||
setViewY((int) newY, false, false);
|
setViewY((int) newY, false, false);
|
||||||
|
|
||||||
|
@ -311,39 +361,82 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
mainView.setLayoutParams(lp);
|
mainView.setLayoutParams(lp);
|
||||||
mainView.requestLayout();
|
mainView.requestLayout();
|
||||||
|
|
||||||
if (velocity != null) {
|
float newEventY = newY - (dyMain - dy);
|
||||||
velocity.addMovement(event);
|
MotionEvent ev = MotionEvent.obtain(event.getDownTime(), event.getEventTime(), event.getAction(),
|
||||||
velocity.computeCurrentVelocity(1000);
|
event.getX(), newEventY, event.getMetaState());
|
||||||
velocityY = Math.abs(velocity.getYVelocity());
|
|
||||||
if (velocityY > maxVelocityY) {
|
initVelocityTrackerIfNotExists();
|
||||||
maxVelocityY = velocityY;
|
velocityTracker.addMovement(ev);
|
||||||
}
|
|
||||||
}
|
updateToolbar();
|
||||||
|
updateTopButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MotionEvent.ACTION_UP:
|
case MotionEvent.ACTION_UP:
|
||||||
case MotionEvent.ACTION_CANCEL:
|
|
||||||
if (moving) {
|
if (moving) {
|
||||||
moving = false;
|
moving = false;
|
||||||
|
hasMoved = false;
|
||||||
int currentY = getViewY();
|
int currentY = getViewY();
|
||||||
|
|
||||||
slidingUp = Math.abs(maxVelocityY) > 500 && (currentY - dyMain) < -50;
|
final VelocityTracker velocityTracker = this.velocityTracker;
|
||||||
slidingDown = Math.abs(maxVelocityY) > 500 && (currentY - dyMain) > 50;
|
velocityTracker.computeCurrentVelocity(1000, maximumVelocity);
|
||||||
|
int initialVelocity = (int) velocityTracker.getYVelocity();
|
||||||
|
|
||||||
if (velocity != null) {
|
if ((Math.abs(initialVelocity) > minimumVelocity)) {
|
||||||
velocity.recycle();
|
|
||||||
|
scroller.abortAnimation();
|
||||||
|
scroller.fling(0, currentY, 0, initialVelocity, 0, 0,
|
||||||
|
Math.min(viewHeight - menuFullHeightMax, getFullScreenTopPosY()),
|
||||||
|
screenHeight,
|
||||||
|
0, 0);
|
||||||
|
currentY = scroller.getFinalY();
|
||||||
|
scroller.abortAnimation();
|
||||||
|
|
||||||
|
slidingUp = initialVelocity < -2000;
|
||||||
|
slidingDown = initialVelocity > 2000;
|
||||||
|
} else {
|
||||||
|
slidingUp = false;
|
||||||
|
slidingDown = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean skipScreenState = Math.abs(currentY - dyMain) > skipScreenStateLimit;
|
changeMenuState(currentY, slidingUp, slidingDown);
|
||||||
changeMenuState(currentY, skipScreenState, slidingUp, slidingDown);
|
|
||||||
}
|
}
|
||||||
|
recycleVelocityTracker();
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
moving = false;
|
||||||
|
hasMoved = false;
|
||||||
|
recycleVelocityTracker();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initOrResetVelocityTracker() {
|
||||||
|
if (velocityTracker == null) {
|
||||||
|
velocityTracker = VelocityTracker.obtain();
|
||||||
|
} else {
|
||||||
|
velocityTracker.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initVelocityTrackerIfNotExists() {
|
||||||
|
if (velocityTracker == null) {
|
||||||
|
velocityTracker = VelocityTracker.obtain();
|
||||||
|
velocityTracker.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recycleVelocityTracker() {
|
||||||
|
if (velocityTracker != null) {
|
||||||
|
velocityTracker.recycle();
|
||||||
|
velocityTracker = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
View topShadowAllView = view.findViewById(R.id.context_menu_top_shadow_all);
|
View topShadowAllView = view.findViewById(R.id.context_menu_top_shadow_all);
|
||||||
|
@ -541,6 +634,65 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private float getToolbarAlpha(int y) {
|
||||||
|
float a = 0;
|
||||||
|
if (menu != null && !menu.isLandscapeLayout()) {
|
||||||
|
if (y < bottomToolbarPosY) {
|
||||||
|
a = 1f - (y - topScreenPosY) * (1f / (bottomToolbarPosY - topScreenPosY));
|
||||||
|
}
|
||||||
|
if (a < 0) {
|
||||||
|
a = 0;
|
||||||
|
} else if (a > 1) {
|
||||||
|
a = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateToolbar() {
|
||||||
|
float a = getToolbarAlpha(getViewY());
|
||||||
|
updateVisibility(toolbarContainer, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
private float getTopButtonAlpha(int y) {
|
||||||
|
float a = 0;
|
||||||
|
if (menu != null && !menu.isLandscapeLayout() && !menu.hasActiveToolbar()) {
|
||||||
|
int headerTopY = getHeaderOnlyTopY();
|
||||||
|
if (y < headerTopY) {
|
||||||
|
a = 1f - (y - minHalfY) * (1f / (headerTopY - minHalfY));
|
||||||
|
}
|
||||||
|
if (a < 0) {
|
||||||
|
a = 0;
|
||||||
|
} else if (a > 1) {
|
||||||
|
a = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTopButton() {
|
||||||
|
float a = getTopButtonAlpha(getViewY());
|
||||||
|
updateVisibility(topButtonContainer, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateVisibility(View v, float alpha) {
|
||||||
|
boolean visible = alpha > 0;
|
||||||
|
v.setAlpha(alpha);
|
||||||
|
if (visible && v.getVisibility() != View.VISIBLE) {
|
||||||
|
v.setVisibility(View.VISIBLE);
|
||||||
|
} else if (!visible && v.getVisibility() == View.VISIBLE) {
|
||||||
|
v.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateVisibility(View v, boolean visible) {
|
||||||
|
if (visible && v.getVisibility() != View.VISIBLE) {
|
||||||
|
v.setVisibility(View.VISIBLE);
|
||||||
|
} else if (!visible && v.getVisibility() == View.VISIBLE) {
|
||||||
|
v.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void toggleDetailsHideButton() {
|
private void toggleDetailsHideButton() {
|
||||||
int menuState = menu.getCurrentMenuState();
|
int menuState = menu.getCurrentMenuState();
|
||||||
final boolean showShowHideButton = menuState == MenuState.HALF_SCREEN || (!menu.isLandscapeLayout() && menuState == MenuState.FULL_SCREEN);
|
final boolean showShowHideButton = menuState == MenuState.HALF_SCREEN || (!menu.isLandscapeLayout() && menuState == MenuState.FULL_SCREEN);
|
||||||
|
@ -582,61 +734,92 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processScreenHeight(ViewParent parent) {
|
private void processScreenHeight(ViewParent parent) {
|
||||||
View container = (View)parent;
|
View container = (View) parent;
|
||||||
screenHeight = container.getHeight() + AndroidUtils.getStatusBarHeight(getActivity());
|
screenHeight = container.getHeight() + AndroidUtils.getStatusBarHeight(getActivity());
|
||||||
skipScreenStateLimit = screenHeight * SKIP_HALF_SCREEN_STATE_KOEF;
|
|
||||||
viewHeight = screenHeight - AndroidUtils.getStatusBarHeight(getMapActivity());
|
viewHeight = screenHeight - AndroidUtils.getStatusBarHeight(getMapActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openMenuFullScreen() {
|
public void openMenuFullScreen() {
|
||||||
changeMenuState(getViewY(), true, true, false);
|
changeMenuState(getMenuStatePosY(MenuState.FULL_SCREEN), false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openMenuHeaderOnly() {
|
public void openMenuHeaderOnly() {
|
||||||
changeMenuState(getViewY(), true, false, true);
|
if (!menu.isLandscapeLayout()) {
|
||||||
|
changeMenuState(getMenuStatePosY(MenuState.HEADER_ONLY), false, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openMenuHalfScreen() {
|
public void openMenuHalfScreen() {
|
||||||
int oldMenuState = menu.getCurrentMenuState();
|
if (!menu.isLandscapeLayout()) {
|
||||||
if (oldMenuState == MenuState.HEADER_ONLY) {
|
changeMenuState(getMenuStatePosY(MenuState.HALF_SCREEN), false, false);
|
||||||
changeMenuState(getViewY(), false, true, false);
|
|
||||||
} else if (oldMenuState == MenuState.FULL_SCREEN && !menu.isLandscapeLayout()) {
|
|
||||||
changeMenuState(getViewY(), false, false, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeMenuState(int currentY, boolean skipScreenState,
|
private void changeMenuState(int currentY, boolean slidingUp, boolean slidingDown) {
|
||||||
boolean slidingUp, boolean slidingDown) {
|
|
||||||
boolean needCloseMenu = false;
|
boolean needCloseMenu = false;
|
||||||
|
|
||||||
int oldMenuState = menu.getCurrentMenuState();
|
int currentMenuState = menu.getCurrentMenuState();
|
||||||
if (!menu.isLandscapeLayout()) {
|
if (!menu.isLandscapeLayout()) {
|
||||||
if (slidingDown && !skipScreenState && oldMenuState == MenuState.FULL_SCREEN && currentY < topScreenPosY) {
|
int headerDist = Math.abs(currentY - getMenuStatePosY(MenuState.HEADER_ONLY));
|
||||||
|
int halfDist = Math.abs(currentY - getMenuStatePosY(MenuState.HALF_SCREEN));
|
||||||
|
int fullDist = Math.abs(currentY - getMenuStatePosY(MenuState.FULL_SCREEN));
|
||||||
|
int newState;
|
||||||
|
if (headerDist < halfDist && headerDist < fullDist) {
|
||||||
|
newState = MenuState.HEADER_ONLY;
|
||||||
|
} else if (halfDist < headerDist && halfDist < fullDist) {
|
||||||
|
newState = MenuState.HALF_SCREEN;
|
||||||
|
} else {
|
||||||
|
newState = MenuState.FULL_SCREEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slidingDown && currentMenuState == MenuState.FULL_SCREEN && getViewY() < getFullScreenTopPosY()) {
|
||||||
slidingDown = false;
|
slidingDown = false;
|
||||||
|
newState = MenuState.FULL_SCREEN;
|
||||||
}
|
}
|
||||||
if (menuBottomViewHeight > 0 && slidingUp) {
|
if (menuBottomViewHeight > 0 && slidingUp) {
|
||||||
menu.slideUp();
|
while (menu.getCurrentMenuState() != newState) {
|
||||||
if (skipScreenState) {
|
if (!menu.slideUp()) {
|
||||||
menu.slideUp();
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (slidingDown) {
|
} else if (slidingDown) {
|
||||||
needCloseMenu = !menu.slideDown();
|
if (currentMenuState == MenuState.HEADER_ONLY) {
|
||||||
if (!needCloseMenu && skipScreenState) {
|
needCloseMenu = true;
|
||||||
menu.slideDown();
|
} else {
|
||||||
|
while (menu.getCurrentMenuState() != newState) {
|
||||||
|
if (!menu.slideDown()) {
|
||||||
|
needCloseMenu = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentMenuState < newState) {
|
||||||
|
while (menu.getCurrentMenuState() != newState) {
|
||||||
|
if (!menu.slideUp()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (menu.getCurrentMenuState() != newState) {
|
||||||
|
if (!menu.slideDown()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int newMenuState = menu.getCurrentMenuState();
|
int newMenuState = menu.getCurrentMenuState();
|
||||||
boolean needMapAdjust = oldMenuState != newMenuState && newMenuState != MenuState.FULL_SCREEN;
|
boolean needMapAdjust = currentMenuState != newMenuState && newMenuState != MenuState.FULL_SCREEN;
|
||||||
|
|
||||||
if (newMenuState != oldMenuState) {
|
if (newMenuState != currentMenuState) {
|
||||||
restoreCustomMapRatio();
|
restoreCustomMapRatio();
|
||||||
menu.updateControlsVisibility(true);
|
menu.updateControlsVisibility(true);
|
||||||
doBeforeMenuStateChange(oldMenuState, newMenuState);
|
doBeforeMenuStateChange(currentMenuState, newMenuState);
|
||||||
toggleDetailsHideButton();
|
toggleDetailsHideButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
applyPosY(currentY, needCloseMenu, needMapAdjust, oldMenuState, newMenuState, 0);
|
applyPosY(currentY, needCloseMenu, needMapAdjust, currentMenuState, newMenuState, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restoreCustomMapRatio() {
|
private void restoreCustomMapRatio() {
|
||||||
|
@ -676,12 +859,42 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
|
|
||||||
private void applyPosY(final int currentY, final boolean needCloseMenu, boolean needMapAdjust,
|
private void applyPosY(final int currentY, final boolean needCloseMenu, boolean needMapAdjust,
|
||||||
final int previousMenuState, final int newMenuState, int dZoom) {
|
final int previousMenuState, final int newMenuState, int dZoom) {
|
||||||
final int posY = getPosY(currentY, needCloseMenu);
|
final int posY = getPosY(currentY, needCloseMenu, previousMenuState);
|
||||||
if (currentY != posY || dZoom != 0) {
|
if (getViewY() != posY || dZoom != 0) {
|
||||||
if (posY < currentY) {
|
if (posY < getViewY()) {
|
||||||
updateMainViewLayout(posY);
|
updateMainViewLayout(posY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final float topButtonAlpha = getTopButtonAlpha(posY);
|
||||||
|
if (topButtonAlpha > 0) {
|
||||||
|
updateVisibility(topButtonContainer, true);
|
||||||
|
}
|
||||||
|
topButtonContainer.animate().alpha(topButtonAlpha)
|
||||||
|
.setDuration(200)
|
||||||
|
.setInterpolator(new DecelerateInterpolator())
|
||||||
|
.setListener(new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
updateVisibility(topButtonContainer, topButtonAlpha);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
|
||||||
|
final float toolbarAlpha = getToolbarAlpha(posY);
|
||||||
|
if (toolbarAlpha > 0) {
|
||||||
|
updateVisibility(toolbarContainer, true);
|
||||||
|
}
|
||||||
|
toolbarContainer.animate().alpha(toolbarAlpha)
|
||||||
|
.setDuration(200)
|
||||||
|
.setInterpolator(new DecelerateInterpolator())
|
||||||
|
.setListener(new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
updateVisibility(toolbarContainer, toolbarAlpha);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
|
||||||
mainView.animate().y(posY)
|
mainView.animate().y(posY)
|
||||||
.setDuration(200)
|
.setDuration(200)
|
||||||
.setInterpolator(new DecelerateInterpolator())
|
.setInterpolator(new DecelerateInterpolator())
|
||||||
|
@ -739,7 +952,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
buttonView.setBackgroundResource(nightMode ? R.drawable.context_menu_controller_bg_dark : R.drawable.context_menu_controller_bg_light);
|
buttonView.setBackgroundResource(nightMode ? R.drawable.context_menu_controller_bg_dark : R.drawable.context_menu_controller_bg_light);
|
||||||
button.setTextColor(buttonColorStateList);
|
button.setTextColor(buttonColorStateList);
|
||||||
} else {
|
} else {
|
||||||
buttonView.setBackgroundResource(nightMode ? R.drawable.context_menu_controller_disabled_bg_dark: R.drawable.context_menu_controller_disabled_bg_light);
|
buttonView.setBackgroundResource(nightMode ? R.drawable.context_menu_controller_disabled_bg_dark : R.drawable.context_menu_controller_disabled_bg_light);
|
||||||
button.setTextColor(ContextCompat.getColor(getContext(), nightMode ? R.color.ctx_menu_controller_disabled_text_color_dark : R.color.ctx_menu_controller_disabled_text_color_light));
|
button.setTextColor(ContextCompat.getColor(getContext(), nightMode ? R.color.ctx_menu_controller_disabled_text_color_dark : R.color.ctx_menu_controller_disabled_text_color_light));
|
||||||
}
|
}
|
||||||
button.setEnabled(enabled);
|
button.setEnabled(enabled);
|
||||||
|
@ -1083,6 +1296,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
menuTopShadowAllHeight = newMenuTopShadowAllHeight;
|
menuTopShadowAllHeight = newMenuTopShadowAllHeight;
|
||||||
menuTitleHeight = menuTopShadowAllHeight + dy;
|
menuTitleHeight = menuTopShadowAllHeight + dy;
|
||||||
menuBottomViewHeight = view.findViewById(R.id.context_menu_bottom_view).getHeight();
|
menuBottomViewHeight = view.findViewById(R.id.context_menu_bottom_view).getHeight();
|
||||||
|
menuButtonsHeight = view.findViewById(R.id.context_menu_bottom_buttons).getHeight() + view.findViewById(R.id.buttons_bottom_border).getHeight() + view.findViewById(R.id.context_menu_buttons).getHeight();
|
||||||
|
|
||||||
menuFullHeightMax = menuTitleHeight + menuBottomViewHeight;
|
menuFullHeightMax = menuTitleHeight + menuBottomViewHeight;
|
||||||
|
|
||||||
|
@ -1163,6 +1377,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
// Text line 1
|
// Text line 1
|
||||||
TextView line1 = (TextView) view.findViewById(R.id.context_menu_line1);
|
TextView line1 = (TextView) view.findViewById(R.id.context_menu_line1);
|
||||||
line1.setText(menu.getTitleStr());
|
line1.setText(menu.getTitleStr());
|
||||||
|
toolbarTextView.setText(menu.getTitleStr());
|
||||||
|
|
||||||
// Text line 2
|
// Text line 2
|
||||||
LinearLayout line2layout = (LinearLayout) view.findViewById(R.id.context_menu_line2_layout);
|
LinearLayout line2layout = (LinearLayout) view.findViewById(R.id.context_menu_line2_layout);
|
||||||
|
@ -1206,8 +1421,10 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
line3.setCompoundDrawablePadding(dpToPx(5f));
|
line3.setCompoundDrawablePadding(dpToPx(5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImageView additionalInfoImageView = (ImageView) view.findViewById(R.id.additional_info_image_view);
|
||||||
TextView additionalInfoTextView = (TextView) view.findViewById(R.id.additional_info_text_view);
|
TextView additionalInfoTextView = (TextView) view.findViewById(R.id.additional_info_text_view);
|
||||||
CharSequence additionalInfoStr = menu.getAdditionalInfo();
|
CharSequence additionalInfoStr = menu.getAdditionalInfo();
|
||||||
|
boolean showAdditionalImage = false;
|
||||||
if (!TextUtils.isEmpty(additionalInfoStr)) {
|
if (!TextUtils.isEmpty(additionalInfoStr)) {
|
||||||
int colorId = menu.getAdditionalInfoColor();
|
int colorId = menu.getAdditionalInfoColor();
|
||||||
int additionalInfoIconRes = menu.getAdditionalInfoIconRes();
|
int additionalInfoIconRes = menu.getAdditionalInfoIconRes();
|
||||||
|
@ -1215,8 +1432,8 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
additionalInfoTextView.setTextColor(ContextCompat.getColor(getContext(), colorId));
|
additionalInfoTextView.setTextColor(ContextCompat.getColor(getContext(), colorId));
|
||||||
if (additionalInfoIconRes != 0) {
|
if (additionalInfoIconRes != 0) {
|
||||||
Drawable additionalIcon = getIcon(additionalInfoIconRes, colorId);
|
Drawable additionalIcon = getIcon(additionalInfoIconRes, colorId);
|
||||||
additionalInfoTextView.setCompoundDrawablesWithIntrinsicBounds(additionalIcon, null, null, null);
|
additionalInfoImageView.setImageDrawable(additionalIcon);
|
||||||
additionalInfoTextView.setCompoundDrawablePadding(dpToPx(8));
|
showAdditionalImage = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
additionalInfoTextView.setText(additionalInfoStr);
|
additionalInfoTextView.setText(additionalInfoStr);
|
||||||
|
@ -1224,6 +1441,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
} else {
|
} else {
|
||||||
additionalInfoTextView.setVisibility(View.GONE);
|
additionalInfoTextView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
additionalInfoImageView.setVisibility(showAdditionalImage ? View.VISIBLE : View.GONE);
|
||||||
}
|
}
|
||||||
updateCompassVisibility();
|
updateCompassVisibility();
|
||||||
}
|
}
|
||||||
|
@ -1267,23 +1485,48 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getHeaderOnlyTopY() {
|
||||||
|
return viewHeight - menuTitleHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getFullScreenTopPosY() {
|
||||||
|
return -menuTitleHeight + menuButtonsHeight + bottomToolbarPosY;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getMenuStatePosY(int menuState) {
|
||||||
|
if (menu.isLandscapeLayout()) {
|
||||||
|
return topScreenPosY;
|
||||||
|
}
|
||||||
|
switch (menuState) {
|
||||||
|
case MenuState.HEADER_ONLY:
|
||||||
|
return getHeaderOnlyTopY();
|
||||||
|
case MenuState.HALF_SCREEN:
|
||||||
|
return minHalfY;
|
||||||
|
case MenuState.FULL_SCREEN:
|
||||||
|
return getFullScreenTopPosY();
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int getPosY() {
|
private int getPosY() {
|
||||||
return getPosY(CURRENT_Y_UNDEFINED, false);
|
return getPosY(CURRENT_Y_UNDEFINED, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getPosY(final int currentY, boolean needCloseMenu) {
|
private int getPosY(final int currentY, boolean needCloseMenu) {
|
||||||
|
return getPosY(currentY, needCloseMenu, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getPosY(final int currentY, boolean needCloseMenu, int previousState) {
|
||||||
if (needCloseMenu) {
|
if (needCloseMenu) {
|
||||||
return screenHeight;
|
return screenHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
int destinationState;
|
int destinationState;
|
||||||
int minHalfY;
|
|
||||||
if (menu.isExtended()) {
|
if (menu.isExtended()) {
|
||||||
destinationState = menu.getCurrentMenuState();
|
destinationState = menu.getCurrentMenuState();
|
||||||
minHalfY = viewHeight - (int) (viewHeight * menu.getHalfScreenMaxHeightKoef());
|
|
||||||
} else {
|
} else {
|
||||||
destinationState = MenuState.HEADER_ONLY;
|
destinationState = MenuState.HEADER_ONLY;
|
||||||
minHalfY = viewHeight - (int) (viewHeight * .75f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateZoomButtonsVisibility(destinationState);
|
updateZoomButtonsVisibility(destinationState);
|
||||||
|
@ -1291,19 +1534,19 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
int posY = 0;
|
int posY = 0;
|
||||||
switch (destinationState) {
|
switch (destinationState) {
|
||||||
case MenuState.HEADER_ONLY:
|
case MenuState.HEADER_ONLY:
|
||||||
posY = viewHeight - menuTitleHeight;
|
posY = getMenuStatePosY(MenuState.HEADER_ONLY);
|
||||||
break;
|
break;
|
||||||
case MenuState.HALF_SCREEN:
|
case MenuState.HALF_SCREEN:
|
||||||
posY = minHalfY;
|
posY = getMenuStatePosY(MenuState.HALF_SCREEN);
|
||||||
break;
|
break;
|
||||||
case MenuState.FULL_SCREEN:
|
case MenuState.FULL_SCREEN:
|
||||||
if (currentY != CURRENT_Y_UNDEFINED) {
|
if (currentY != CURRENT_Y_UNDEFINED) {
|
||||||
int maxPosY = viewHeight - menuFullHeightMax;
|
int maxPosY = viewHeight - menuFullHeightMax;
|
||||||
int minPosY = topScreenPosY;
|
int minPosY = getMenuStatePosY(MenuState.FULL_SCREEN);
|
||||||
if (maxPosY > minPosY) {
|
if (maxPosY > minPosY) {
|
||||||
maxPosY = minPosY;
|
maxPosY = minPosY;
|
||||||
}
|
}
|
||||||
if (currentY > minPosY) {
|
if (currentY > minPosY || previousState != MenuState.FULL_SCREEN) {
|
||||||
posY = minPosY;
|
posY = minPosY;
|
||||||
} else if (currentY < maxPosY) {
|
} else if (currentY < maxPosY) {
|
||||||
posY = maxPosY;
|
posY = maxPosY;
|
||||||
|
@ -1311,7 +1554,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
posY = currentY;
|
posY = currentY;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
posY = topScreenPosY;
|
posY = getMenuStatePosY(MenuState.FULL_SCREEN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1362,7 +1605,8 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
int zoom = getZoom() + dZoom;
|
int zoom = getZoom() + dZoom;
|
||||||
LatLon latlon = getAdjustedMarkerLocation(y, menu.getLatLon(), center, zoom);
|
LatLon latlon = getAdjustedMarkerLocation(y, menu.getLatLon(), center, zoom);
|
||||||
|
|
||||||
if (map.getLatitude() == latlon.getLatitude() && map.getLongitude() == latlon.getLongitude() && dZoom == 0) {
|
if (map.hasCustomMapRatio()
|
||||||
|
|| (map.getLatitude() == latlon.getLatitude() && map.getLongitude() == latlon.getLongitude() && dZoom == 0)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1440,11 +1684,11 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getZoomButtonsY(int y) {
|
private int getZoomButtonsY(int y) {
|
||||||
return y - zoomButtonsHeight;
|
return y - zoomButtonsHeight - shadowHeight - zoomPaddingTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doLayoutMenu() {
|
private void doLayoutMenu() {
|
||||||
final int posY = getPosY(getViewY(), false);
|
final int posY = getPosY(getViewY(), false, menu.getCurrentMenuState());
|
||||||
setViewY(posY, true, !initLayout || !centered);
|
setViewY(posY, true, !initLayout || !centered);
|
||||||
updateMainViewLayout(posY);
|
updateMainViewLayout(posY);
|
||||||
}
|
}
|
||||||
|
|
|
@ -873,93 +873,6 @@ public class MenuBuilder {
|
||||||
return new CollapsableView(textView, this, collapsed);
|
return new CollapsableView(textView, this, collapsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CollapsableView getCollapsableFavouritesView(final Context context, boolean collapsed, @NonNull final FavoriteGroup group, FavouritePoint selectedPoint) {
|
|
||||||
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
|
||||||
|
|
||||||
List<FavouritePoint> points = group.points;
|
|
||||||
for (int i = 0; i < points.size() && i < 10; i++) {
|
|
||||||
final FavouritePoint point = points.get(i);
|
|
||||||
boolean selected = selectedPoint != null && selectedPoint.equals(point);
|
|
||||||
TextViewEx button = buildButtonInCollapsableView(context, selected, false);
|
|
||||||
String name = point.getName();
|
|
||||||
button.setText(name);
|
|
||||||
|
|
||||||
if (!selected) {
|
|
||||||
button.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
LatLon latLon = new LatLon(point.getLatitude(), point.getLongitude());
|
|
||||||
PointDescription pointDescription = new PointDescription(PointDescription.POINT_TYPE_FAVORITE, point.getName());
|
|
||||||
mapActivity.getContextMenu().show(latLon, pointDescription, point);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
view.addView(button);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (points.size() > 10) {
|
|
||||||
TextViewEx button = buildButtonInCollapsableView(context, false, true);
|
|
||||||
button.setText(context.getString(R.string.shared_string_show_all));
|
|
||||||
button.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
OsmAndAppCustomization appCustomization = app.getAppCustomization();
|
|
||||||
final Intent intent = new Intent(context, appCustomization.getFavoritesActivity());
|
|
||||||
intent.putExtra(FavoritesActivity.OPEN_FAVOURITES_TAB, true);
|
|
||||||
intent.putExtra(FavoritesActivity.GROUP_NAME_TO_SHOW, group.name);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
|
||||||
context.startActivity(intent);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
view.addView(button);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CollapsableView(view, this, collapsed);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected CollapsableView getCollapsableWaypointsView(final Context context, boolean collapsed, @NonNull final GPXFile gpxFile, WptPt selectedPoint) {
|
|
||||||
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
|
||||||
|
|
||||||
List<WptPt> points = gpxFile.getPoints();
|
|
||||||
for (int i = 0; i < points.size() && i < 10; i++) {
|
|
||||||
final WptPt point = points.get(i);
|
|
||||||
boolean selected = selectedPoint != null && selectedPoint.equals(point);
|
|
||||||
TextViewEx button = buildButtonInCollapsableView(context, selected, false);
|
|
||||||
button.setText(point.name);
|
|
||||||
|
|
||||||
if (!selected) {
|
|
||||||
button.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
LatLon latLon = new LatLon(point.getLatitude(), point.getLongitude());
|
|
||||||
PointDescription pointDescription = new PointDescription(PointDescription.POINT_TYPE_WPT, point.name);
|
|
||||||
mapActivity.getContextMenu().show(latLon, pointDescription, point);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
view.addView(button);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (points.size() > 10) {
|
|
||||||
TextViewEx button = buildButtonInCollapsableView(context, false, true);
|
|
||||||
button.setText(context.getString(R.string.shared_string_show_all));
|
|
||||||
button.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
OsmAndAppCustomization appCustomization = app.getAppCustomization();
|
|
||||||
final Intent intent = new Intent(context, appCustomization.getTrackActivity());
|
|
||||||
intent.putExtra(TrackActivity.TRACK_FILE_NAME, gpxFile.path);
|
|
||||||
intent.putExtra(TrackActivity.OPEN_POINTS_TAB, true);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
|
||||||
context.startActivity(intent);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
view.addView(button);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CollapsableView(view, this, collapsed);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected CollapsableView getCollapsableWikiView(Context context, boolean collapsed) {
|
protected CollapsableView getCollapsableWikiView(Context context, boolean collapsed) {
|
||||||
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
||||||
|
|
||||||
|
@ -995,9 +908,14 @@ public class MenuBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected TextViewEx buildButtonInCollapsableView(Context context, boolean selected, boolean showAll) {
|
protected TextViewEx buildButtonInCollapsableView(Context context, boolean selected, boolean showAll) {
|
||||||
|
return buildButtonInCollapsableView(context, selected, showAll, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected TextViewEx buildButtonInCollapsableView(Context context, boolean selected, boolean showAll, boolean singleLine) {
|
||||||
TextViewEx button = new TextViewEx(new ContextThemeWrapper(context, light ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme));
|
TextViewEx button = new TextViewEx(new ContextThemeWrapper(context, light ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme));
|
||||||
LinearLayout.LayoutParams llWikiButtonParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpToPx(36f));
|
LinearLayout.LayoutParams llWikiButtonParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
llWikiButtonParams.setMargins(0, 0, 0, dpToPx(8f));
|
llWikiButtonParams.setMargins(0, 0, 0, dpToPx(8f));
|
||||||
|
//button.setMinimumHeight(dpToPx(36f));
|
||||||
button.setLayoutParams(llWikiButtonParams);
|
button.setLayoutParams(llWikiButtonParams);
|
||||||
button.setTypeface(FontCache.getRobotoRegular(context));
|
button.setTypeface(FontCache.getRobotoRegular(context));
|
||||||
int bg;
|
int bg;
|
||||||
|
@ -1011,7 +929,7 @@ public class MenuBuilder {
|
||||||
button.setBackgroundResource(bg);
|
button.setBackgroundResource(bg);
|
||||||
button.setTextSize(14);
|
button.setTextSize(14);
|
||||||
int paddingSides = dpToPx(10f);
|
int paddingSides = dpToPx(10f);
|
||||||
button.setPadding(paddingSides, 0, paddingSides, 0);
|
button.setPadding(paddingSides, paddingSides, paddingSides, paddingSides);
|
||||||
if (!selected) {
|
if (!selected) {
|
||||||
ColorStateList buttonColorStateList = AndroidUtils.createColorStateList(context, !light,
|
ColorStateList buttonColorStateList = AndroidUtils.createColorStateList(context, !light,
|
||||||
R.color.ctx_menu_controller_button_text_color_light_n, R.color.ctx_menu_controller_button_text_color_light_p,
|
R.color.ctx_menu_controller_button_text_color_light_n, R.color.ctx_menu_controller_button_text_color_light_p,
|
||||||
|
@ -1021,7 +939,7 @@ public class MenuBuilder {
|
||||||
button.setTextColor(ContextCompat.getColor(context, light ? R.color.ctx_menu_bottom_view_text_color_light : R.color.ctx_menu_bottom_view_text_color_dark));
|
button.setTextColor(ContextCompat.getColor(context, light ? R.color.ctx_menu_bottom_view_text_color_light : R.color.ctx_menu_bottom_view_text_color_dark));
|
||||||
}
|
}
|
||||||
button.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
|
button.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
|
||||||
button.setSingleLine(true);
|
button.setSingleLine(singleLine);
|
||||||
button.setEllipsize(TextUtils.TruncateAt.END);
|
button.setEllipsize(TextUtils.TruncateAt.END);
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.StateListDrawable;
|
import android.graphics.drawable.StateListDrawable;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.support.annotation.ColorRes;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
@ -130,38 +131,13 @@ public abstract class MenuController extends BaseMenuController implements Colla
|
||||||
this.builder.setLight(isLight());
|
this.builder.setLight(isLight());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCreated() {
|
protected void onCreated() {
|
||||||
/*
|
|
||||||
toolbarController = new ContextMenuToolbarController(this);
|
|
||||||
toolbarController.setTitle(getNameStr());
|
|
||||||
toolbarController.setOnBackButtonClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mapContextMenu != null) {
|
|
||||||
mapContextMenu.backToolbarAction(MenuController.this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
toolbarController.setOnTitleClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
toolbarController.setOnCloseButtonClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mapContextMenu != null) {
|
|
||||||
mapContextMenu.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCollapseExpand(boolean collapsed) {
|
public void onCollapseExpand(boolean collapsed) {
|
||||||
if (mapContextMenu != null) {
|
if (mapContextMenu != null) {
|
||||||
mapContextMenu.updateMenuUI();
|
mapContextMenu.updateLayout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,9 +454,17 @@ public abstract class MenuController extends BaseMenuController implements Colla
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAdditionalInfoColor() {
|
@ColorRes
|
||||||
|
public int getAdditionalInfoColorId() {
|
||||||
if (openingHoursInfo != null) {
|
if (openingHoursInfo != null) {
|
||||||
return 0;
|
boolean open = false;
|
||||||
|
for (OpeningHours.Info info : openingHoursInfo) {
|
||||||
|
if (info.isOpened() || info.isOpened24_7()) {
|
||||||
|
open = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return open ? R.color.ctx_menu_amenity_opened_text_color : R.color.ctx_menu_amenity_closed_text_color;
|
||||||
} else if (indexItem != null) {
|
} else if (indexItem != null) {
|
||||||
return R.color.icon_color;
|
return R.color.icon_color;
|
||||||
}
|
}
|
||||||
|
@ -516,6 +500,7 @@ public abstract class MenuController extends BaseMenuController implements Colla
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
public int getAdditionalInfoIconRes() {
|
public int getAdditionalInfoIconRes() {
|
||||||
if (openingHoursInfo != null) {
|
if (openingHoursInfo != null) {
|
||||||
return R.drawable.ic_action_opening_hour_16;
|
return R.drawable.ic_action_opening_hour_16;
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders;
|
package net.osmand.plus.mapcontextmenu.builders;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.view.ContextThemeWrapper;
|
import android.support.v7.view.ContextThemeWrapper;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.SpannableString;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.style.URLSpan;
|
|
||||||
import android.text.util.Linkify;
|
import android.text.util.Linkify;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -36,11 +36,13 @@ import net.osmand.plus.helpers.FontCache;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||||
import net.osmand.plus.mapcontextmenu.WikipediaDialogFragment;
|
import net.osmand.plus.mapcontextmenu.WikipediaDialogFragment;
|
||||||
import net.osmand.plus.osmedit.OsmEditingPlugin;
|
import net.osmand.plus.osmedit.OsmEditingPlugin;
|
||||||
|
import net.osmand.plus.poi.PoiUIFilter;
|
||||||
import net.osmand.plus.views.POIMapLayer;
|
import net.osmand.plus.views.POIMapLayer;
|
||||||
import net.osmand.plus.widgets.TextViewEx;
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.OpeningHoursParser;
|
import net.osmand.util.OpeningHoursParser;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -66,26 +68,21 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
private void buildRow(View view, int iconId, String text, String textPrefix,
|
private void buildRow(View view, int iconId, String text, String textPrefix,
|
||||||
boolean collapsable, final CollapsableView collapsableView,
|
boolean collapsable, final CollapsableView collapsableView,
|
||||||
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
||||||
boolean isPhoneNumber, boolean isUrl, boolean matchWidthDivider) {
|
boolean isPhoneNumber, boolean isUrl, boolean matchWidthDivider, int textLinesLimit) {
|
||||||
buildRow(view, iconId == 0 ? null : getRowIcon(iconId), text, textPrefix, collapsable, collapsableView, textColor,
|
buildRow(view, iconId == 0 ? null : getRowIcon(iconId), text, textPrefix, collapsable, collapsableView, textColor,
|
||||||
isWiki, isText, needLinks, isPhoneNumber, isUrl, matchWidthDivider);
|
isWiki, isText, needLinks, isPhoneNumber, isUrl, matchWidthDivider, textLinesLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void buildRow(final View view, Drawable icon, final String text, final String textPrefix,
|
protected void buildRow(final View view, Drawable icon, final String text, final String textPrefix,
|
||||||
boolean collapsable, final CollapsableView collapsableView,
|
boolean collapsable, final CollapsableView collapsableView,
|
||||||
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
||||||
boolean isPhoneNumber, boolean isUrl, boolean matchWidthDivider) {
|
boolean isPhoneNumber, boolean isUrl, boolean matchWidthDivider, int textLinesLimit) {
|
||||||
|
|
||||||
if (!isFirstRow()) {
|
if (!isFirstRow()) {
|
||||||
buildRowDivider(view);
|
buildRowDivider(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String txt;
|
final String txt = text;
|
||||||
if (!Algorithms.isEmpty(textPrefix)) {
|
|
||||||
txt = textPrefix + ": " + text;
|
|
||||||
} else {
|
|
||||||
txt = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
LinearLayout baseView = new LinearLayout(view.getContext());
|
LinearLayout baseView = new LinearLayout(view.getContext());
|
||||||
baseView.setOrientation(LinearLayout.VERTICAL);
|
baseView.setOrientation(LinearLayout.VERTICAL);
|
||||||
|
@ -100,7 +97,8 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
ll.setOnLongClickListener(new View.OnLongClickListener() {
|
ll.setOnLongClickListener(new View.OnLongClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(View v) {
|
public boolean onLongClick(View v) {
|
||||||
copyToClipboard(txt, view.getContext());
|
String textToCopy = !Algorithms.isEmpty(textPrefix) ? textPrefix + ": " + txt : txt;
|
||||||
|
copyToClipboard(textToCopy, view.getContext());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -130,31 +128,35 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
llText.setOrientation(LinearLayout.VERTICAL);
|
llText.setOrientation(LinearLayout.VERTICAL);
|
||||||
ll.addView(llText);
|
ll.addView(llText);
|
||||||
|
|
||||||
|
TextView textPrefixView = null;
|
||||||
|
if (!Algorithms.isEmpty(textPrefix)) {
|
||||||
|
textPrefixView = new TextView(view.getContext());
|
||||||
|
LinearLayout.LayoutParams llTextParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
llTextParams.setMargins(icon == null ? dpToPx(16f) : 0, dpToPx(8f), 0, 0);
|
||||||
|
textPrefixView.setLayoutParams(llTextParams);
|
||||||
|
textPrefixView.setTextSize(12);
|
||||||
|
textPrefixView.setTextColor(app.getResources().getColor(R.color.ctx_menu_buttons_text_color));
|
||||||
|
textPrefixView.setEllipsize(TextUtils.TruncateAt.END);
|
||||||
|
textPrefixView.setMinLines(1);
|
||||||
|
textPrefixView.setMaxLines(1);
|
||||||
|
textPrefixView.setText(textPrefix);
|
||||||
|
}
|
||||||
|
|
||||||
TextView textView = new TextView(view.getContext());
|
TextView textView = new TextView(view.getContext());
|
||||||
LinearLayout.LayoutParams llTextParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
LinearLayout.LayoutParams llTextParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
llTextParams.setMargins(icon == null ? dpToPx(16f) : 0, collapsable ? dpToPx(13f) : dpToPx(8f), 0, collapsable ? dpToPx(13f) : dpToPx(8f));
|
llTextParams.setMargins(icon == null ? dpToPx(16f) : 0,
|
||||||
|
textPrefixView == null ? (collapsable ? dpToPx(13f) : dpToPx(8f)) : dpToPx(2f), 0, collapsable && textPrefixView == null ? dpToPx(13f) : dpToPx(8f));
|
||||||
textView.setLayoutParams(llTextParams);
|
textView.setLayoutParams(llTextParams);
|
||||||
textView.setTextSize(16);
|
textView.setTextSize(16);
|
||||||
textView.setTextColor(app.getResources().getColor(light ? R.color.ctx_menu_bottom_view_text_color_light : R.color.ctx_menu_bottom_view_text_color_dark));
|
textView.setTextColor(app.getResources().getColor(light ? R.color.ctx_menu_bottom_view_text_color_light : R.color.ctx_menu_bottom_view_text_color_dark));
|
||||||
|
|
||||||
int linkTextColor = ContextCompat.getColor(view.getContext(), light ? R.color.ctx_menu_bottom_view_url_color_light : R.color.ctx_menu_bottom_view_url_color_dark);
|
int linkTextColor = ContextCompat.getColor(view.getContext(), light ? R.color.ctx_menu_bottom_view_url_color_light : R.color.ctx_menu_bottom_view_url_color_dark);
|
||||||
|
|
||||||
boolean textDefined = false;
|
|
||||||
if (isPhoneNumber || isUrl) {
|
if (isPhoneNumber || isUrl) {
|
||||||
if (!Algorithms.isEmpty(textPrefix)) {
|
|
||||||
SpannableString spannableString = new SpannableString(txt);
|
|
||||||
spannableString.setSpan(new URLSpan(txt), textPrefix.length() + 2, txt.length(), 0);
|
|
||||||
textView.setText(spannableString);
|
|
||||||
textView.setLinkTextColor(linkTextColor);
|
|
||||||
textDefined = true;
|
|
||||||
} else {
|
|
||||||
textView.setTextColor(linkTextColor);
|
textView.setTextColor(linkTextColor);
|
||||||
}
|
|
||||||
needLinks = false;
|
needLinks = false;
|
||||||
}
|
}
|
||||||
if (!textDefined) {
|
|
||||||
textView.setText(txt);
|
textView.setText(txt);
|
||||||
}
|
|
||||||
if (needLinks) {
|
if (needLinks) {
|
||||||
Linkify.addLinks(textView, Linkify.ALL);
|
Linkify.addLinks(textView, Linkify.ALL);
|
||||||
textView.setLinksClickable(true);
|
textView.setLinksClickable(true);
|
||||||
|
@ -162,7 +164,10 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
AndroidUtils.removeLinkUnderline(textView);
|
AndroidUtils.removeLinkUnderline(textView);
|
||||||
}
|
}
|
||||||
textView.setEllipsize(TextUtils.TruncateAt.END);
|
textView.setEllipsize(TextUtils.TruncateAt.END);
|
||||||
if (isWiki) {
|
if (textLinesLimit > 0) {
|
||||||
|
textView.setMinLines(1);
|
||||||
|
textView.setMaxLines(textLinesLimit);
|
||||||
|
} else if (isWiki) {
|
||||||
textView.setMinLines(1);
|
textView.setMinLines(1);
|
||||||
textView.setMaxLines(15);
|
textView.setMaxLines(15);
|
||||||
} else if (isText) {
|
} else if (isText) {
|
||||||
|
@ -178,13 +183,16 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
llTextViewParams.setMargins(0, 0, dpToPx(10f), 0);
|
llTextViewParams.setMargins(0, 0, dpToPx(10f), 0);
|
||||||
llTextViewParams.gravity = Gravity.CENTER_VERTICAL;
|
llTextViewParams.gravity = Gravity.CENTER_VERTICAL;
|
||||||
llText.setLayoutParams(llTextViewParams);
|
llText.setLayoutParams(llTextViewParams);
|
||||||
|
if (textPrefixView != null) {
|
||||||
|
llText.addView(textPrefixView);
|
||||||
|
}
|
||||||
llText.addView(textView);
|
llText.addView(textView);
|
||||||
|
|
||||||
final ImageView iconViewCollapse = new ImageView(view.getContext());
|
final ImageView iconViewCollapse = new ImageView(view.getContext());
|
||||||
if (collapsable && collapsableView != null) {
|
if (collapsable && collapsableView != null) {
|
||||||
// Icon
|
// Icon
|
||||||
LinearLayout llIconCollapse = new LinearLayout(view.getContext());
|
LinearLayout llIconCollapse = new LinearLayout(view.getContext());
|
||||||
llIconCollapse.setLayoutParams(new LinearLayout.LayoutParams(dpToPx(40f), dpToPx(48f)));
|
llIconCollapse.setLayoutParams(new LinearLayout.LayoutParams(dpToPx(40f), ViewGroup.LayoutParams.MATCH_PARENT));
|
||||||
llIconCollapse.setOrientation(LinearLayout.HORIZONTAL);
|
llIconCollapse.setOrientation(LinearLayout.HORIZONTAL);
|
||||||
llIconCollapse.setGravity(Gravity.CENTER_VERTICAL);
|
llIconCollapse.setGravity(Gravity.CENTER_VERTICAL);
|
||||||
ll.addView(llIconCollapse);
|
ll.addView(llIconCollapse);
|
||||||
|
@ -316,6 +324,9 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
List<AmenityInfoRow> infoRows = new LinkedList<>();
|
List<AmenityInfoRow> infoRows = new LinkedList<>();
|
||||||
List<AmenityInfoRow> descriptions = new LinkedList<>();
|
List<AmenityInfoRow> descriptions = new LinkedList<>();
|
||||||
|
|
||||||
|
Map<String, List<PoiType>> poiAdditionalCategories = new HashMap<>();
|
||||||
|
AmenityInfoRow cuisineRow = null;
|
||||||
|
|
||||||
for (Map.Entry<String, String> e : amenity.getAdditionalInfo().entrySet()) {
|
for (Map.Entry<String, String> e : amenity.getAdditionalInfo().entrySet()) {
|
||||||
int iconId = 0;
|
int iconId = 0;
|
||||||
Drawable icon = null;
|
Drawable icon = null;
|
||||||
|
@ -336,6 +347,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
boolean needLinks = !"population".equals(key);
|
boolean needLinks = !"population".equals(key);
|
||||||
boolean isPhoneNumber = false;
|
boolean isPhoneNumber = false;
|
||||||
boolean isUrl = false;
|
boolean isUrl = false;
|
||||||
|
boolean isCuisine = false;
|
||||||
int poiTypeOrder = 0;
|
int poiTypeOrder = 0;
|
||||||
String poiTypeKeyName = "";
|
String poiTypeKeyName = "";
|
||||||
|
|
||||||
|
@ -353,6 +365,19 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
poiTypeKeyName = pType.getKeyName();
|
poiTypeKeyName = pType.getKeyName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pType != null && !pType.isText()) {
|
||||||
|
String categoryName = pType.getPoiAdditionalCategory();
|
||||||
|
if (!Algorithms.isEmpty(categoryName)) {
|
||||||
|
List<PoiType> poiAdditionalCategoryTypes = poiAdditionalCategories.get(categoryName);
|
||||||
|
if (poiAdditionalCategoryTypes == null) {
|
||||||
|
poiAdditionalCategoryTypes = new ArrayList<>();
|
||||||
|
poiAdditionalCategories.put(categoryName, poiAdditionalCategoryTypes);
|
||||||
|
}
|
||||||
|
poiAdditionalCategoryTypes.add(pType);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (amenity.getType().isWiki()) {
|
if (amenity.getType().isWiki()) {
|
||||||
if (!hasWiki) {
|
if (!hasWiki) {
|
||||||
String lng = amenity.getContentLanguage("content", preferredLang, "en");
|
String lng = amenity.getContentLanguage("content", preferredLang, "en");
|
||||||
|
@ -399,16 +424,18 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
iconId = R.drawable.ic_world_globe_dark;
|
iconId = R.drawable.ic_world_globe_dark;
|
||||||
isUrl = true;
|
isUrl = true;
|
||||||
} else if (Amenity.CUISINE.equals(key)) {
|
} else if (Amenity.CUISINE.equals(key)) {
|
||||||
|
isCuisine = true;
|
||||||
iconId = R.drawable.ic_action_cuisine;
|
iconId = R.drawable.ic_action_cuisine;
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (String c : e.getValue().split(";")) {
|
for (String c : e.getValue().split(";")) {
|
||||||
if (sb.length() > 0) {
|
if (sb.length() > 0) {
|
||||||
sb.append(", ");
|
sb.append(", ");
|
||||||
} else {
|
|
||||||
sb.append(app.getString(R.string.poi_cuisine)).append(": ");
|
|
||||||
}
|
|
||||||
sb.append(poiTypes.getPoiTranslation("cuisine_" + c).toLowerCase());
|
sb.append(poiTypes.getPoiTranslation("cuisine_" + c).toLowerCase());
|
||||||
|
} else {
|
||||||
|
sb.append(poiTypes.getPoiTranslation("cuisine_" + c));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
textPrefix = app.getString(R.string.poi_cuisine);
|
||||||
vl = sb.toString();
|
vl = sb.toString();
|
||||||
} else if (key.contains(Amenity.ROUTE)) {
|
} else if (key.contains(Amenity.ROUTE)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -425,11 +452,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
icon = getRowIcon(view.getContext(), ((PoiType) pType.getParentType()).getOsmTag() + "_" + pType.getOsmTag().replace(':', '_') + "_" + pType.getOsmValue());
|
icon = getRowIcon(view.getContext(), ((PoiType) pType.getParentType()).getOsmTag() + "_" + pType.getOsmTag().replace(':', '_') + "_" + pType.getOsmValue());
|
||||||
}
|
}
|
||||||
if (!pType.isText()) {
|
if (!pType.isText()) {
|
||||||
if (!Algorithms.isEmpty(pType.getPoiAdditionalCategory())) {
|
|
||||||
vl = pType.getPoiAdditionalCategoryTranslation() + ": " + pType.getTranslation();
|
|
||||||
} else {
|
|
||||||
vl = pType.getTranslation();
|
vl = pType.getTranslation();
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
isText = true;
|
isText = true;
|
||||||
isDescription = iconId == R.drawable.ic_action_note_dark;
|
isDescription = iconId == R.drawable.ic_action_note_dark;
|
||||||
|
@ -456,15 +479,69 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean matchWidthDivider = !isDescription && isWiki;
|
boolean matchWidthDivider = !isDescription && isWiki;
|
||||||
|
AmenityInfoRow row;
|
||||||
if (isDescription) {
|
if (isDescription) {
|
||||||
descriptions.add(new AmenityInfoRow(key, R.drawable.ic_action_note_dark, textPrefix,
|
row = new AmenityInfoRow(key, R.drawable.ic_action_note_dark, textPrefix,
|
||||||
vl, collapsable, collapsableView, 0, false, true, true, 0, "", false, false, matchWidthDivider));
|
vl, collapsable, collapsableView, 0, false, true,
|
||||||
|
true, 0, "", false, false, matchWidthDivider, 0);
|
||||||
} else if (icon != null) {
|
} else if (icon != null) {
|
||||||
infoRows.add(new AmenityInfoRow(key, icon, textPrefix, vl, collapsable, collapsableView,
|
row = new AmenityInfoRow(key, icon, textPrefix, vl, collapsable, collapsableView,
|
||||||
textColor, isWiki, isText, needLinks, poiTypeOrder, poiTypeKeyName, isPhoneNumber, isUrl, matchWidthDivider));
|
textColor, isWiki, isText, needLinks, poiTypeOrder, poiTypeKeyName,
|
||||||
|
isPhoneNumber, isUrl, matchWidthDivider, 0);
|
||||||
} else {
|
} else {
|
||||||
infoRows.add(new AmenityInfoRow(key, iconId, textPrefix, vl, collapsable, collapsableView,
|
row = new AmenityInfoRow(key, iconId, textPrefix, vl, collapsable, collapsableView,
|
||||||
textColor, isWiki, isText, needLinks, poiTypeOrder, poiTypeKeyName, isPhoneNumber, isUrl, matchWidthDivider));
|
textColor, isWiki, isText, needLinks, poiTypeOrder, poiTypeKeyName,
|
||||||
|
isPhoneNumber, isUrl, matchWidthDivider, 0);
|
||||||
|
}
|
||||||
|
if (isDescription) {
|
||||||
|
descriptions.add(row);
|
||||||
|
} else {
|
||||||
|
if (!isCuisine) {
|
||||||
|
infoRows.add(row);
|
||||||
|
} else {
|
||||||
|
cuisineRow = row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cuisineRow != null) {
|
||||||
|
boolean hasCuisineOrDish = poiAdditionalCategories.get(Amenity.CUISINE) != null
|
||||||
|
|| poiAdditionalCategories.get(Amenity.DISH) != null;
|
||||||
|
if (!hasCuisineOrDish) {
|
||||||
|
infoRows.add(cuisineRow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<PoiType>> e : poiAdditionalCategories.entrySet()) {
|
||||||
|
String categoryName = e.getKey();
|
||||||
|
List<PoiType> categoryTypes = e.getValue();
|
||||||
|
if (categoryTypes.size() > 0) {
|
||||||
|
Drawable icon;
|
||||||
|
PoiType pType = categoryTypes.get(0);
|
||||||
|
String poiAdditionalCategoryName = pType.getPoiAdditionalCategory();
|
||||||
|
String poiAddidionalIconName = poiTypes.getPoiAdditionalCategoryIconName(poiAdditionalCategoryName);
|
||||||
|
icon = getRowIcon(view.getContext(), poiAddidionalIconName);
|
||||||
|
if (icon == null) {
|
||||||
|
icon = getRowIcon(view.getContext(), poiAdditionalCategoryName);
|
||||||
|
}
|
||||||
|
if (icon == null) {
|
||||||
|
icon = getRowIcon(view.getContext(), pType.getIconKeyName());
|
||||||
|
}
|
||||||
|
if (icon == null) {
|
||||||
|
icon = getRowIcon(R.drawable.ic_action_note_dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (PoiType pt : categoryTypes) {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
sb.append(" • ");
|
||||||
|
}
|
||||||
|
sb.append(pt.getTranslation());
|
||||||
|
}
|
||||||
|
boolean cuisineOrDish = categoryName.equals(Amenity.CUISINE) || categoryName.equals(Amenity.DISH);
|
||||||
|
CollapsableView collapsableView = getPoiAdditionalCollapsableView(view.getContext(), true, categoryTypes, cuisineOrDish ? cuisineRow : null);
|
||||||
|
infoRows.add(new AmenityInfoRow(poiAdditionalCategoryName, icon, pType.getPoiAdditionalCategoryTranslation(), sb.toString(), true, collapsableView,
|
||||||
|
0, false, false, false, pType.getOrder(), pType.getKeyName(), false, false, false, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +584,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
AmenityInfoRow wikiInfo = new AmenityInfoRow(
|
AmenityInfoRow wikiInfo = new AmenityInfoRow(
|
||||||
"nearest_wiki", R.drawable.ic_action_wikipedia, null, app.getString(R.string.wiki_around) + " (" + nearestWiki.size() + ")", true,
|
"nearest_wiki", R.drawable.ic_action_wikipedia, null, app.getString(R.string.wiki_around) + " (" + nearestWiki.size() + ")", true,
|
||||||
getCollapsableWikiView(view.getContext(), true),
|
getCollapsableWikiView(view.getContext(), true),
|
||||||
0, false, false, false, 1000, null, false, false, false);
|
0, false, false, false, 1000, null, false, false, false, 0);
|
||||||
buildAmenityRow(view, wikiInfo);
|
buildAmenityRow(view, wikiInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -534,10 +611,12 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
public void buildAmenityRow(View view, AmenityInfoRow info) {
|
public void buildAmenityRow(View view, AmenityInfoRow info) {
|
||||||
if (info.icon != null) {
|
if (info.icon != null) {
|
||||||
buildRow(view, info.icon, info.text, info.textPrefix, info.collapsable, info.collapsableView,
|
buildRow(view, info.icon, info.text, info.textPrefix, info.collapsable, info.collapsableView,
|
||||||
info.textColor, info.isWiki, info.isText, info.needLinks, info.isPhoneNumber, info.isUrl, info.matchWidthDivider);
|
info.textColor, info.isWiki, info.isText, info.needLinks, info.isPhoneNumber,
|
||||||
|
info.isUrl, info.matchWidthDivider, info.textLinesLimit);
|
||||||
} else {
|
} else {
|
||||||
buildRow(view, info.iconId, info.text, info.textPrefix, info.collapsable, info.collapsableView,
|
buildRow(view, info.iconId, info.text, info.textPrefix, info.collapsable, info.collapsableView,
|
||||||
info.textColor, info.isWiki, info.isText, info.needLinks, info.isPhoneNumber, info.isUrl, info.matchWidthDivider);
|
info.textColor, info.isWiki, info.isText, info.needLinks, info.isPhoneNumber,
|
||||||
|
info.isUrl, info.matchWidthDivider, info.textLinesLimit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,6 +635,68 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CollapsableView getPoiAdditionalCollapsableView(
|
||||||
|
final Context context, boolean collapsed,
|
||||||
|
@NonNull final List<PoiType> categoryTypes, AmenityInfoRow textCuisineRow) {
|
||||||
|
|
||||||
|
final List<TextViewEx> buttons = new ArrayList<>();
|
||||||
|
|
||||||
|
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
||||||
|
|
||||||
|
for (final PoiType pt : categoryTypes) {
|
||||||
|
TextViewEx button = buildButtonInCollapsableView(context, false, false);
|
||||||
|
String name = pt.getTranslation();
|
||||||
|
button.setText(name);
|
||||||
|
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (amenity.getType() != null) {
|
||||||
|
PoiUIFilter filter = app.getPoiFilters().getFilterById(PoiUIFilter.STD_PREFIX + amenity.getType().getKeyName());
|
||||||
|
if (filter != null) {
|
||||||
|
filter.clearFilter();
|
||||||
|
filter.setTypeToAccept(amenity.getType(), true);
|
||||||
|
filter.updateTypesToAccept(pt);
|
||||||
|
filter.setFilterByName(pt.getKeyName().replace('_', ':').toLowerCase());
|
||||||
|
getMapActivity().showQuickSearch(filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttons.add(button);
|
||||||
|
if (buttons.size() > 3 && categoryTypes.size() > 4) {
|
||||||
|
button.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (textCuisineRow != null) {
|
||||||
|
TextViewEx button = buildButtonInCollapsableView(context, true, false, false);
|
||||||
|
String name = textCuisineRow.textPrefix + ": " + textCuisineRow.text.toLowerCase();
|
||||||
|
button.setText(name);
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryTypes.size() > 4) {
|
||||||
|
final TextViewEx button = buildButtonInCollapsableView(context, false, true);
|
||||||
|
button.setText(context.getString(R.string.shared_string_show_all));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
for (TextViewEx b : buttons) {
|
||||||
|
if (b.getVisibility() != View.VISIBLE) {
|
||||||
|
b.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
button.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CollapsableView(view, this, collapsed);
|
||||||
|
}
|
||||||
|
|
||||||
private static class AmenityInfoRow {
|
private static class AmenityInfoRow {
|
||||||
private String key;
|
private String key;
|
||||||
private Drawable icon;
|
private Drawable icon;
|
||||||
|
@ -573,11 +714,13 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
private int order;
|
private int order;
|
||||||
private String name;
|
private String name;
|
||||||
private boolean matchWidthDivider;
|
private boolean matchWidthDivider;
|
||||||
|
private int textLinesLimit;
|
||||||
|
|
||||||
public AmenityInfoRow(String key, Drawable icon, String textPrefix, String text,
|
public AmenityInfoRow(String key, Drawable icon, String textPrefix, String text,
|
||||||
boolean collapsable, CollapsableView collapsableView,
|
boolean collapsable, CollapsableView collapsableView,
|
||||||
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
||||||
int order, String name, boolean isPhoneNumber, boolean isUrl, boolean matchWidthDivider) {
|
int order, String name, boolean isPhoneNumber, boolean isUrl,
|
||||||
|
boolean matchWidthDivider, int textLinesLimit) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
this.textPrefix = textPrefix;
|
this.textPrefix = textPrefix;
|
||||||
|
@ -593,12 +736,14 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
this.isPhoneNumber = isPhoneNumber;
|
this.isPhoneNumber = isPhoneNumber;
|
||||||
this.isUrl = isUrl;
|
this.isUrl = isUrl;
|
||||||
this.matchWidthDivider = matchWidthDivider;
|
this.matchWidthDivider = matchWidthDivider;
|
||||||
|
this.textLinesLimit = textLinesLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AmenityInfoRow(String key, int iconId, String textPrefix, String text,
|
public AmenityInfoRow(String key, int iconId, String textPrefix, String text,
|
||||||
boolean collapsable, CollapsableView collapsableView,
|
boolean collapsable, CollapsableView collapsableView,
|
||||||
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
int textColor, boolean isWiki, boolean isText, boolean needLinks,
|
||||||
int order, String name, boolean isPhoneNumber, boolean isUrl, boolean matchWidthDivider) {
|
int order, String name, boolean isPhoneNumber, boolean isUrl,
|
||||||
|
boolean matchWidthDivider, int textLinesLimit) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
this.iconId = iconId;
|
this.iconId = iconId;
|
||||||
this.textPrefix = textPrefix;
|
this.textPrefix = textPrefix;
|
||||||
|
@ -614,6 +759,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
this.isPhoneNumber = isPhoneNumber;
|
this.isPhoneNumber = isPhoneNumber;
|
||||||
this.isUrl = isUrl;
|
this.isUrl = isUrl;
|
||||||
this.matchWidthDivider = matchWidthDivider;
|
this.matchWidthDivider = matchWidthDivider;
|
||||||
|
this.textLinesLimit = textLinesLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,28 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders;
|
package net.osmand.plus.mapcontextmenu.builders;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import net.osmand.ResultMatcher;
|
import net.osmand.ResultMatcher;
|
||||||
import net.osmand.binary.BinaryMapIndexReader;
|
import net.osmand.binary.BinaryMapIndexReader;
|
||||||
import net.osmand.data.Amenity;
|
import net.osmand.data.Amenity;
|
||||||
import net.osmand.data.FavouritePoint;
|
import net.osmand.data.FavouritePoint;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.data.TransportStop;
|
import net.osmand.data.TransportStop;
|
||||||
import net.osmand.osm.PoiCategory;
|
import net.osmand.osm.PoiCategory;
|
||||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||||
|
import net.osmand.plus.OsmAndAppCustomization;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||||
|
import net.osmand.plus.myplaces.FavoritesActivity;
|
||||||
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -127,4 +136,48 @@ public class FavouritePointMenuBuilder extends MenuBuilder {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CollapsableView getCollapsableFavouritesView(final Context context, boolean collapsed, @NonNull final FavoriteGroup group, FavouritePoint selectedPoint) {
|
||||||
|
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
||||||
|
|
||||||
|
List<FavouritePoint> points = group.points;
|
||||||
|
for (int i = 0; i < points.size() && i < 10; i++) {
|
||||||
|
final FavouritePoint point = points.get(i);
|
||||||
|
boolean selected = selectedPoint != null && selectedPoint.equals(point);
|
||||||
|
TextViewEx button = buildButtonInCollapsableView(context, selected, false);
|
||||||
|
String name = point.getName();
|
||||||
|
button.setText(name);
|
||||||
|
|
||||||
|
if (!selected) {
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
LatLon latLon = new LatLon(point.getLatitude(), point.getLongitude());
|
||||||
|
PointDescription pointDescription = new PointDescription(PointDescription.POINT_TYPE_FAVORITE, point.getName());
|
||||||
|
mapActivity.getContextMenu().show(latLon, pointDescription, point);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (points.size() > 10) {
|
||||||
|
TextViewEx button = buildButtonInCollapsableView(context, false, true);
|
||||||
|
button.setText(context.getString(R.string.shared_string_show_all));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
OsmAndAppCustomization appCustomization = app.getAppCustomization();
|
||||||
|
final Intent intent = new Intent(context, appCustomization.getFavoritesActivity());
|
||||||
|
intent.putExtra(FavoritesActivity.OPEN_FAVOURITES_TAB, true);
|
||||||
|
intent.putExtra(FavoritesActivity.GROUP_NAME_TO_SHOW, group.name);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CollapsableView(view, this, collapsed);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,20 +1,28 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders;
|
package net.osmand.plus.mapcontextmenu.builders;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.support.annotation.ColorInt;
|
import android.support.annotation.ColorInt;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.plus.GPXUtilities;
|
import net.osmand.plus.GPXUtilities;
|
||||||
import net.osmand.plus.GPXUtilities.WptPt;
|
import net.osmand.plus.GPXUtilities.WptPt;
|
||||||
import net.osmand.plus.GpxSelectionHelper;
|
import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
|
import net.osmand.plus.OsmAndAppCustomization;
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
import net.osmand.plus.OsmAndFormatter;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.activities.TrackActivity;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||||
import net.osmand.plus.mapillary.MapillaryPlugin;
|
import net.osmand.plus.mapillary.MapillaryPlugin;
|
||||||
import net.osmand.plus.views.POIMapLayer;
|
import net.osmand.plus.views.POIMapLayer;
|
||||||
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -121,4 +129,47 @@ public class WptPtMenuBuilder extends MenuBuilder {
|
||||||
}
|
}
|
||||||
return visit;
|
return visit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CollapsableView getCollapsableWaypointsView(final Context context, boolean collapsed, @NonNull final GPXUtilities.GPXFile gpxFile, WptPt selectedPoint) {
|
||||||
|
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed, true);
|
||||||
|
|
||||||
|
List<WptPt> points = gpxFile.getPoints();
|
||||||
|
for (int i = 0; i < points.size() && i < 10; i++) {
|
||||||
|
final WptPt point = points.get(i);
|
||||||
|
boolean selected = selectedPoint != null && selectedPoint.equals(point);
|
||||||
|
TextViewEx button = buildButtonInCollapsableView(context, selected, false);
|
||||||
|
button.setText(point.name);
|
||||||
|
|
||||||
|
if (!selected) {
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
LatLon latLon = new LatLon(point.getLatitude(), point.getLongitude());
|
||||||
|
PointDescription pointDescription = new PointDescription(PointDescription.POINT_TYPE_WPT, point.name);
|
||||||
|
mapActivity.getContextMenu().show(latLon, pointDescription, point);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (points.size() > 10) {
|
||||||
|
TextViewEx button = buildButtonInCollapsableView(context, false, true);
|
||||||
|
button.setText(context.getString(R.string.shared_string_show_all));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
OsmAndAppCustomization appCustomization = app.getAppCustomization();
|
||||||
|
final Intent intent = new Intent(context, appCustomization.getTrackActivity());
|
||||||
|
intent.putExtra(TrackActivity.TRACK_FILE_NAME, gpxFile.path);
|
||||||
|
intent.putExtra(TrackActivity.OPEN_POINTS_TAB, true);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
view.addView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CollapsableView(view, this, collapsed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,7 +191,7 @@ public class MapDataMenuController extends MenuController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAdditionalInfoColor() {
|
public int getAdditionalInfoColorId() {
|
||||||
return R.color.icon_color;
|
return R.color.icon_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -306,7 +306,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startPoint != null) {
|
if (startPoint != null && endPoint != null) {
|
||||||
targetPointsHelper.navigateToPoint(startPoint.point, false, -1, startPoint.getPointDescription(mapActivity));
|
targetPointsHelper.navigateToPoint(startPoint.point, false, -1, startPoint.getPointDescription(mapActivity));
|
||||||
targetPointsHelper.setStartPoint(endPoint.point, false, endPoint.getPointDescription(mapActivity));
|
targetPointsHelper.setStartPoint(endPoint.point, false, endPoint.getPointDescription(mapActivity));
|
||||||
targetPointsHelper.updateRouteAndRefresh(true);
|
targetPointsHelper.updateRouteAndRefresh(true);
|
||||||
|
|
|
@ -3,7 +3,7 @@ package net.osmand.plus.mapcontextmenu.other;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -17,13 +17,14 @@ import android.widget.TextView;
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.mapcontextmenu.other.ShareMenu.ShareItem;
|
import net.osmand.plus.mapcontextmenu.other.ShareMenu.ShareItem;
|
||||||
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class ShareMenuFragment extends BaseOsmAndFragment implements OnItemClickListener {
|
public class ShareMenuFragment extends MenuBottomSheetDialogFragment implements OnItemClickListener {
|
||||||
public static final String TAG = "ShareMenuFragment";
|
public static final String TAG = "ShareMenuFragment";
|
||||||
|
|
||||||
private ArrayAdapter<ShareItem> listAdapter;
|
private ArrayAdapter<ShareItem> listAdapter;
|
||||||
|
@ -40,56 +41,41 @@ public class ShareMenuFragment extends BaseOsmAndFragment implements OnItemClick
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.share_menu_fragment, container, false);
|
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
|
||||||
|
final View view = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||||
|
R.layout.share_menu_fragment, container);
|
||||||
|
|
||||||
View mainView = view.findViewById(R.id.main_view);
|
if (nightMode) {
|
||||||
if (menu.isLandscapeLayout()) {
|
((TextViewEx) view.findViewById(R.id.title_text_view)).setTextColor(getResources().getColor(R.color.ctx_menu_info_text_dark));
|
||||||
AndroidUtils.addStatusBarPadding21v(getContext(), view);
|
|
||||||
AndroidUtils.setBackground(view.getContext(), mainView, !menu.isLight(),
|
|
||||||
R.drawable.bg_left_menu_light, R.drawable.bg_left_menu_dark);
|
|
||||||
} else {
|
|
||||||
AndroidUtils.setBackground(view.getContext(), mainView, !menu.isLight(),
|
|
||||||
R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TextView headerCaption = (TextView) view.findViewById(R.id.header_caption);
|
|
||||||
AndroidUtils.setTextSecondaryColor(view.getContext(), headerCaption, !menu.isLight());
|
|
||||||
|
|
||||||
ListView listView = (ListView) view.findViewById(R.id.list);
|
ListView listView = (ListView) view.findViewById(R.id.list);
|
||||||
listAdapter = createAdapter();
|
listAdapter = createAdapter();
|
||||||
listView.setAdapter(listAdapter);
|
listView.setAdapter(listAdapter);
|
||||||
listView.setOnItemClickListener(this);
|
listView.setOnItemClickListener(this);
|
||||||
|
|
||||||
|
view.findViewById(R.id.cancel_row).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
setupHeightAndBackground(view, R.id.scroll_view);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
menu.getMapActivity().getContextMenu().setBaseFragmentVisibility(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
menu.getMapActivity().getContextMenu().setBaseFragmentVisibility(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
menu.saveMenu(outState);
|
menu.saveMenu(outState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showInstance(ShareMenu menu) {
|
public static void showInstance(ShareMenu menu) {
|
||||||
int slideInAnim = menu.getSlideInAnimation();
|
|
||||||
int slideOutAnim = menu.getSlideOutAnimation();
|
|
||||||
|
|
||||||
ShareMenuFragment fragment = new ShareMenuFragment();
|
ShareMenuFragment fragment = new ShareMenuFragment();
|
||||||
fragment.menu = menu;
|
fragment.menu = menu;
|
||||||
menu.getMapActivity().getSupportFragmentManager().beginTransaction()
|
fragment.setUsedOnMap(true);
|
||||||
.setCustomAnimations(slideInAnim, slideOutAnim, slideInAnim, slideOutAnim)
|
fragment.show(menu.getMapActivity().getSupportFragmentManager(), ShareMenuFragment.TAG);
|
||||||
.add(R.id.fragmentContainer, fragment, TAG)
|
|
||||||
.addToBackStack(TAG).commit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArrayAdapter<ShareItem> createAdapter() {
|
private ArrayAdapter<ShareItem> createAdapter() {
|
||||||
|
@ -103,13 +89,13 @@ public class ShareMenuFragment extends BaseOsmAndFragment implements OnItemClick
|
||||||
if (v == null) {
|
if (v == null) {
|
||||||
v = menu.getMapActivity().getLayoutInflater().inflate(R.layout.share_list_item, null);
|
v = menu.getMapActivity().getLayoutInflater().inflate(R.layout.share_list_item, null);
|
||||||
}
|
}
|
||||||
AndroidUtils.setBackground(v.getContext(), v, !menu.isLight(), R.drawable.expandable_list_item_background_light, R.drawable.expandable_list_item_background_dark);
|
AndroidUtils.setBackground(v.getContext(), v, nightMode, R.drawable.expandable_list_item_background_light, R.drawable.expandable_list_item_background_dark);
|
||||||
final ShareItem item = getItem(position);
|
final ShareItem item = getItem(position);
|
||||||
ImageView icon = (ImageView) v.findViewById(R.id.icon);
|
ImageView icon = (ImageView) v.findViewById(R.id.icon);
|
||||||
icon.setImageDrawable(menu.getMapActivity().getMyApplication()
|
icon.setImageDrawable(menu.getMapActivity().getMyApplication()
|
||||||
.getIconsCache().getIcon(item.getIconResourceId(), menu.isLight()));
|
.getIconsCache().getIcon(item.getIconResourceId(), !nightMode));
|
||||||
TextView name = (TextView) v.findViewById(R.id.name);
|
TextView name = (TextView) v.findViewById(R.id.name);
|
||||||
AndroidUtils.setTextPrimaryColor(v.getContext(), name, !menu.isLight());
|
AndroidUtils.setTextPrimaryColor(v.getContext(), name, nightMode);
|
||||||
name.setText(getContext().getText(item.getTitleResourceId()));
|
name.setText(getContext().getText(item.getTitleResourceId()));
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
@ -118,15 +104,12 @@ public class ShareMenuFragment extends BaseOsmAndFragment implements OnItemClick
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
dismiss();
|
||||||
menu.share(listAdapter.getItem(position));
|
menu.share(listAdapter.getItem(position));
|
||||||
disableTransitionAnimation();
|
|
||||||
dismissMenu();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dismissMenu() {
|
public void dismissMenu() {
|
||||||
menu.getMapActivity().getSupportFragmentManager().popBackStackImmediate(TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
dismiss();
|
||||||
if (menu.getMapActivity().getContextMenu().isVisible()) {
|
|
||||||
menu.getMapActivity().getContextMenu().close();
|
menu.getMapActivity().getContextMenu().close();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,7 @@ public class EditPOIMenuController extends MenuController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAdditionalInfoColor() {
|
public int getAdditionalInfoColorId() {
|
||||||
if (osmPoint.getAction() == Action.DELETE) {
|
if (osmPoint.getAction() == Action.DELETE) {
|
||||||
return R.color.color_osm_edit_delete;
|
return R.color.color_osm_edit_delete;
|
||||||
} else if (osmPoint.getAction() == Action.MODIFY || osmPoint.getAction() == Action.REOPEN) {
|
} else if (osmPoint.getAction() == Action.MODIFY || osmPoint.getAction() == Action.REOPEN) {
|
||||||
|
|
|
@ -50,7 +50,6 @@ import java.util.List;
|
||||||
public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider {
|
public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider {
|
||||||
|
|
||||||
private static final Log log = PlatformUtil.getLog(OsmBugsLayer.class);
|
private static final Log log = PlatformUtil.getLog(OsmBugsLayer.class);
|
||||||
private final static int startZoom = 8;
|
|
||||||
private final OsmEditingPlugin plugin;
|
private final OsmEditingPlugin plugin;
|
||||||
|
|
||||||
private OsmandMapTileView view;
|
private OsmandMapTileView view;
|
||||||
|
@ -65,6 +64,8 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
private OsmBugsLocalUtil local;
|
private OsmBugsLocalUtil local;
|
||||||
private MapLayerData<List<OpenStreetNote>> data;
|
private MapLayerData<List<OpenStreetNote>> data;
|
||||||
|
|
||||||
|
private int startZoom;
|
||||||
|
|
||||||
public OsmBugsLayer(MapActivity activity, OsmEditingPlugin plugin) {
|
public OsmBugsLayer(MapActivity activity, OsmEditingPlugin plugin) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
@ -116,6 +117,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
|
public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
|
||||||
|
startZoom = activity.getMyApplication().getSettings().SHOW_OSM_BUGS_MIN_ZOOM.get();
|
||||||
if (tileBox.getZoom() >= startZoom) {
|
if (tileBox.getZoom() >= startZoom) {
|
||||||
// request to load
|
// request to load
|
||||||
data.queryNewData(tileBox);
|
data.queryNewData(tileBox);
|
||||||
|
@ -127,7 +129,11 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
List<OpenStreetNote> fullObjects = new ArrayList<>();
|
List<OpenStreetNote> fullObjects = new ArrayList<>();
|
||||||
List<LatLon> fullObjectsLatLon = new ArrayList<>();
|
List<LatLon> fullObjectsLatLon = new ArrayList<>();
|
||||||
List<LatLon> smallObjectsLatLon = new ArrayList<>();
|
List<LatLon> smallObjectsLatLon = new ArrayList<>();
|
||||||
|
boolean showClosed = activity.getMyApplication().getSettings().SHOW_CLOSED_OSM_BUGS.get();
|
||||||
for (OpenStreetNote o : objects) {
|
for (OpenStreetNote o : objects) {
|
||||||
|
if (!o.isOpened() && !showClosed) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
float x = tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
|
float x = tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
|
||||||
float y = tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
|
float y = tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
|
||||||
|
|
||||||
|
@ -146,6 +152,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (OpenStreetNote o : fullObjects) {
|
for (OpenStreetNote o : fullObjects) {
|
||||||
|
if (!o.isOpened() && !showClosed) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
float x = tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
|
float x = tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
|
||||||
float y = tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
|
float y = tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
|
||||||
Bitmap b;
|
Bitmap b;
|
||||||
|
@ -200,9 +209,13 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
final int rad = getRadiusBug(tb);
|
final int rad = getRadiusBug(tb);
|
||||||
int radius = rad * 3 / 2;
|
int radius = rad * 3 / 2;
|
||||||
int small = rad * 3 / 4;
|
int small = rad * 3 / 4;
|
||||||
|
boolean showClosed = activity.getMyApplication().getSettings().SHOW_CLOSED_OSM_BUGS.get();
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < objects.size(); i++) {
|
for (int i = 0; i < objects.size(); i++) {
|
||||||
OpenStreetNote n = objects.get(i);
|
OpenStreetNote n = objects.get(i);
|
||||||
|
if (!n.isOpened() && !showClosed) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
int x = (int) tb.getPixXFromLatLon(n.getLatitude(), n.getLongitude());
|
int x = (int) tb.getPixXFromLatLon(n.getLatitude(), n.getLongitude());
|
||||||
int y = (int) tb.getPixYFromLatLon(n.getLatitude(), n.getLongitude());
|
int y = (int) tb.getPixYFromLatLon(n.getLatitude(), n.getLongitude());
|
||||||
if (Math.abs(x - ex) <= radius && Math.abs(y - ey) <= radius) {
|
if (Math.abs(x - ex) <= radius && Math.abs(y - ey) <= radius) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import android.widget.EditText;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.data.Amenity;
|
import net.osmand.data.Amenity;
|
||||||
import net.osmand.osm.PoiType;
|
import net.osmand.osm.PoiType;
|
||||||
|
@ -30,6 +31,7 @@ import net.osmand.plus.activities.EnumAdapter;
|
||||||
import net.osmand.plus.activities.EnumAdapter.IEnumWithResource;
|
import net.osmand.plus.activities.EnumAdapter.IEnumWithResource;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.TabActivity;
|
import net.osmand.plus.activities.TabActivity;
|
||||||
|
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
|
||||||
import net.osmand.plus.dashboard.tools.DashFragmentData;
|
import net.osmand.plus.dashboard.tools.DashFragmentData;
|
||||||
import net.osmand.plus.myplaces.AvailableGPXFragment;
|
import net.osmand.plus.myplaces.AvailableGPXFragment;
|
||||||
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
|
import net.osmand.plus.myplaces.AvailableGPXFragment.GpxInfo;
|
||||||
|
@ -258,11 +260,23 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerLayerContextMenuActions(OsmandMapTileView mapView, ContextMenuAdapter adapter, final MapActivity mapActivity) {
|
public void registerLayerContextMenuActions(OsmandMapTileView mapView, ContextMenuAdapter adapter, final MapActivity mapActivity) {
|
||||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.layer_osm_bugs, mapActivity)
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(R.string.layer_osm_bugs, mapActivity)
|
||||||
.setSelected(settings.SHOW_OSM_BUGS.get())
|
.setSelected(settings.SHOW_OSM_BUGS.get())
|
||||||
.setIcon(R.drawable.ic_action_bug_dark)
|
.setIcon(R.drawable.ic_action_bug_dark)
|
||||||
.setColor(settings.SHOW_OSM_BUGS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
.setColor(settings.SHOW_OSM_BUGS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
||||||
.setListener(new ContextMenuAdapter.ItemClickListener() {
|
.setSecondaryIcon(R.drawable.ic_action_additional_option)
|
||||||
|
.setListener(new ContextMenuAdapter.OnRowItemClick() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onRowItemClick(ArrayAdapter<ContextMenuItem> adapter, View view, int itemId, int position) {
|
||||||
|
if (itemId == R.string.layer_osm_bugs) {
|
||||||
|
mapActivity.getDashboard().setDashboardVisibility(true,
|
||||||
|
DashboardType.OSM_NOTES, AndroidUtils.getCenterViewCoordinates(view));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
||||||
|
@ -279,7 +293,6 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
||||||
})
|
})
|
||||||
.setPosition(16)
|
.setPosition(16)
|
||||||
.createItem());
|
.createItem());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
135
OsmAnd/src/net/osmand/plus/osmedit/OsmNotesMenu.java
Normal file
135
OsmAnd/src/net/osmand/plus/osmedit/OsmNotesMenu.java
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
package net.osmand.plus.osmedit;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
|
||||||
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
|
import net.osmand.plus.ContextMenuItem;
|
||||||
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
|
import net.osmand.plus.OsmandSettings.CommonPreference;
|
||||||
|
import net.osmand.plus.OsmandSettings.OsmandPreference;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class OsmNotesMenu {
|
||||||
|
|
||||||
|
private static Integer[] zoomIntValues = {8, 9, 10, 11, 12, 13, 14, 15, 16};
|
||||||
|
|
||||||
|
public static ContextMenuAdapter createListAdapter(final MapActivity mapActivity) {
|
||||||
|
ContextMenuAdapter adapter = new ContextMenuAdapter();
|
||||||
|
adapter.setDefaultLayoutId(R.layout.list_item_icon_and_menu);
|
||||||
|
createLayersItems(adapter, mapActivity);
|
||||||
|
return adapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createLayersItems(final ContextMenuAdapter adapter, final MapActivity mapActivity) {
|
||||||
|
final OsmandSettings settings = mapActivity.getMyApplication().getSettings();
|
||||||
|
final OsmEditingPlugin plugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class);
|
||||||
|
|
||||||
|
if (plugin == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int osmNotesStringId = R.string.layer_osm_bugs;
|
||||||
|
final int showZoomLevelStringId = R.string.show_from_zoom_level;
|
||||||
|
final int showClosedNotesStringId = R.string.show_closed_notes;
|
||||||
|
|
||||||
|
final OsmandPreference<Boolean> showOsmBugsPref = settings.SHOW_OSM_BUGS;
|
||||||
|
final CommonPreference<Boolean> showClosedOsmBugsPref = settings.SHOW_CLOSED_OSM_BUGS;
|
||||||
|
final CommonPreference<Integer> showOsmBugsZoomPref = settings.SHOW_OSM_BUGS_MIN_ZOOM;
|
||||||
|
|
||||||
|
final String[] zoomStrings = getZoomStrings(mapActivity);
|
||||||
|
|
||||||
|
ContextMenuAdapter.OnRowItemClick l = new ContextMenuAdapter.OnRowItemClick() {
|
||||||
|
@Override
|
||||||
|
public boolean onContextMenuClick(final ArrayAdapter<ContextMenuItem> adapter, int itemId,
|
||||||
|
final int position, boolean isChecked, int[] viewCoordinates) {
|
||||||
|
if (itemId == osmNotesStringId) {
|
||||||
|
showOsmBugsPref.set(isChecked);
|
||||||
|
plugin.updateLayers(mapActivity.getMapView(), mapActivity);
|
||||||
|
mapActivity.refreshMap();
|
||||||
|
mapActivity.getDashboard().refreshContent(true);
|
||||||
|
} else if (itemId == showZoomLevelStringId) {
|
||||||
|
int checked = Arrays.asList(zoomIntValues).indexOf(showOsmBugsZoomPref.get());
|
||||||
|
|
||||||
|
new AlertDialog.Builder(mapActivity)
|
||||||
|
.setTitle(R.string.show_from_zoom_level)
|
||||||
|
.setSingleChoiceItems(zoomStrings, checked, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
showOsmBugsZoomPref.set(zoomIntValues[which]);
|
||||||
|
ContextMenuItem item = adapter.getItem(position);
|
||||||
|
if (item != null) {
|
||||||
|
item.setDescription(zoomStrings[which]);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
mapActivity.refreshMap();
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.shared_string_dismiss, null)
|
||||||
|
.show();
|
||||||
|
} else if (itemId == showClosedNotesStringId) {
|
||||||
|
showClosedOsmBugsPref.set(isChecked);
|
||||||
|
mapActivity.refreshMap();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
boolean showOsmBugs = showOsmBugsPref.get();
|
||||||
|
boolean nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightModeForMapControls();
|
||||||
|
int toggleIconColorId;
|
||||||
|
if (showOsmBugs) {
|
||||||
|
toggleIconColorId = nightMode ? R.color.color_dialog_buttons_dark : R.color.color_dialog_buttons_light;
|
||||||
|
} else {
|
||||||
|
toggleIconColorId = nightMode ? 0 : R.color.icon_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(osmNotesStringId, mapActivity)
|
||||||
|
.setDescription(mapActivity.getString(R.string.switch_osm_notes_visibility_desc))
|
||||||
|
.setIcon(R.drawable.ic_action_bug_dark)
|
||||||
|
.setColor(toggleIconColorId)
|
||||||
|
.setListener(l)
|
||||||
|
.setSelected(showOsmBugs)
|
||||||
|
.createItem());
|
||||||
|
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(showZoomLevelStringId, mapActivity)
|
||||||
|
.setDescription(zoomStrings[Arrays.asList(zoomIntValues).indexOf(showOsmBugsZoomPref.get())])
|
||||||
|
.setLayout(R.layout.list_item_single_line_descrition_narrow)
|
||||||
|
.setIcon(R.drawable.ic_action_map_magnifier)
|
||||||
|
.setListener(l)
|
||||||
|
.setClickable(showOsmBugs)
|
||||||
|
.createItem());
|
||||||
|
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(showClosedNotesStringId, mapActivity)
|
||||||
|
.setIcon(R.drawable.ic_action_note_dark)
|
||||||
|
.setListener(l)
|
||||||
|
.setSelected(showClosedOsmBugsPref.get())
|
||||||
|
.setClickable(showOsmBugs)
|
||||||
|
.hideDivider(true)
|
||||||
|
.createItem());
|
||||||
|
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setLayout(R.layout.card_bottom_divider)
|
||||||
|
.setClickable(false)
|
||||||
|
.createItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] getZoomStrings(Context context) {
|
||||||
|
String[] res = new String[zoomIntValues.length];
|
||||||
|
for (int i = 0; i < zoomIntValues.length; i++) {
|
||||||
|
String strVal = String.valueOf(zoomIntValues[i]);
|
||||||
|
res[i] = i == 0 ? context.getString(R.string.rendering_value_default_name) + " (" + strVal + ")" : strVal;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
|
@ -73,7 +73,7 @@ public class ParkingPositionMenuController extends MenuController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAdditionalInfoColor() {
|
public int getAdditionalInfoColorId() {
|
||||||
return plugin.getParkingType() ? R.color.ctx_menu_amenity_closed_text_color : R.color.icon_color;
|
return plugin.getParkingType() ? R.color.ctx_menu_amenity_closed_text_color : R.color.icon_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@ import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.render.RenderingRulesStorage;
|
import net.osmand.render.RenderingRulesStorage;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MapStyleAction extends SwitchableAction<String> {
|
public class MapStyleAction extends SwitchableAction<String> {
|
||||||
|
@ -120,17 +120,19 @@ public class MapStyleAction extends SwitchableAction<String> {
|
||||||
|
|
||||||
final OsmandApplication app = activity.getMyApplication();
|
final OsmandApplication app = activity.getMyApplication();
|
||||||
final List<String> visibleNamesList = new ArrayList<>();
|
final List<String> visibleNamesList = new ArrayList<>();
|
||||||
final Collection<String> rendererNames = app.getRendererRegistry().getRendererNames();
|
final ArrayList<String> items = new ArrayList<>(app.getRendererRegistry().getRendererNames());
|
||||||
final String[] items = rendererNames.toArray(new String[rendererNames.size()]);
|
|
||||||
final boolean nauticalPluginDisabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) == null;
|
final boolean nauticalPluginDisabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) == null;
|
||||||
|
|
||||||
for (String item : items) {
|
Iterator<String> iterator = items.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
String item = iterator.next();
|
||||||
if (nauticalPluginDisabled && item.equals(RendererRegistry.NAUTICAL_RENDER)) {
|
if (nauticalPluginDisabled && item.equals(RendererRegistry.NAUTICAL_RENDER)) {
|
||||||
continue;
|
iterator.remove();
|
||||||
|
} else {
|
||||||
|
String translation = RendererRegistry.getTranslatedRendererName(activity, item);
|
||||||
|
visibleNamesList.add(translation != null ? translation
|
||||||
|
: item.replace('_', ' ').replace('-', ' '));
|
||||||
}
|
}
|
||||||
|
|
||||||
visibleNamesList.add(item.replace('_', ' ').replace('-', ' '));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(activity, R.layout.dialog_text_item);
|
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(activity, R.layout.dialog_text_item);
|
||||||
|
@ -140,7 +142,7 @@ public class MapStyleAction extends SwitchableAction<String> {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
|
|
||||||
String renderer = visibleNamesList.get(i);
|
String renderer = items.get(i);
|
||||||
RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer);
|
RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer);
|
||||||
|
|
||||||
if (loaded != null) {
|
if (loaded != null) {
|
||||||
|
|
|
@ -1,15 +1,8 @@
|
||||||
package net.osmand.plus.render;
|
package net.osmand.plus.render;
|
||||||
|
|
||||||
import java.io.File;
|
import android.content.Context;
|
||||||
import java.io.FileInputStream;
|
import android.support.annotation.NonNull;
|
||||||
import java.io.FileNotFoundException;
|
import android.support.annotation.Nullable;
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.osmand.IProgress;
|
import net.osmand.IProgress;
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
|
@ -25,6 +18,17 @@ import org.apache.commons.logging.Log;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
public class RendererRegistry {
|
public class RendererRegistry {
|
||||||
|
|
||||||
|
@ -32,12 +36,11 @@ public class RendererRegistry {
|
||||||
|
|
||||||
public final static String DEFAULT_RENDER = "OsmAnd"; //$NON-NLS-1$
|
public final static String DEFAULT_RENDER = "OsmAnd"; //$NON-NLS-1$
|
||||||
public final static String DEFAULT_RENDER_FILE_PATH = "default.render.xml";
|
public final static String DEFAULT_RENDER_FILE_PATH = "default.render.xml";
|
||||||
|
public final static String TOURING_VIEW = "Touring view (contrast and details)"; //$NON-NLS-1$
|
||||||
|
public final static String WINTER_SKI_RENDER = "Winter and ski"; //$NON-NLS-1$
|
||||||
|
public final static String NAUTICAL_RENDER = "Nautical"; //$NON-NLS-1$
|
||||||
public final static String TOPO_RENDER = "Topo"; //$NON-NLS-1$
|
public final static String TOPO_RENDER = "Topo"; //$NON-NLS-1$
|
||||||
public final static String MAPNIK_RENDER = "Mapnik"; //$NON-NLS-1$
|
public final static String MAPNIK_RENDER = "Mapnik"; //$NON-NLS-1$
|
||||||
// Translatable renders
|
|
||||||
public static String TOURING_VIEW;
|
|
||||||
public static String WINTER_SKI_RENDER;
|
|
||||||
public static String NAUTICAL_RENDER;
|
|
||||||
|
|
||||||
private RenderingRulesStorage defaultRender = null;
|
private RenderingRulesStorage defaultRender = null;
|
||||||
private RenderingRulesStorage currentSelectedRender = null;
|
private RenderingRulesStorage currentSelectedRender = null;
|
||||||
|
@ -57,9 +60,6 @@ public class RendererRegistry {
|
||||||
|
|
||||||
public RendererRegistry(OsmandApplication app){
|
public RendererRegistry(OsmandApplication app){
|
||||||
this.app = app;
|
this.app = app;
|
||||||
WINTER_SKI_RENDER = app.getResources().getString(R.string.winter_and_ski_renderer);
|
|
||||||
TOURING_VIEW = app.getResources().getString(R.string.touring_view_renderer);
|
|
||||||
NAUTICAL_RENDER = app.getResources().getString(R.string.nautical_renderer);
|
|
||||||
internalRenderers.put(DEFAULT_RENDER, DEFAULT_RENDER_FILE_PATH);
|
internalRenderers.put(DEFAULT_RENDER, DEFAULT_RENDER_FILE_PATH);
|
||||||
internalRenderers.put(TOURING_VIEW, "Touring-view_(more-contrast-and-details)" +".render.xml");
|
internalRenderers.put(TOURING_VIEW, "Touring-view_(more-contrast-and-details)" +".render.xml");
|
||||||
internalRenderers.put(TOPO_RENDER, "topo" + ".render.xml");
|
internalRenderers.put(TOPO_RENDER, "topo" + ".render.xml");
|
||||||
|
@ -247,6 +247,19 @@ public class RendererRegistry {
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static String getTranslatedRendererName(@NonNull Context ctx, @NonNull String key) {
|
||||||
|
switch (key) {
|
||||||
|
case TOURING_VIEW:
|
||||||
|
return ctx.getString(R.string.touring_view_renderer);
|
||||||
|
case WINTER_SKI_RENDER:
|
||||||
|
return ctx.getString(R.string.winter_and_ski_renderer);
|
||||||
|
case NAUTICAL_RENDER:
|
||||||
|
return ctx.getString(R.string.nautical_renderer);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public RenderingRulesStorage getCurrentSelectedRenderer() {
|
public RenderingRulesStorage getCurrentSelectedRenderer() {
|
||||||
if(currentSelectedRender == null){
|
if(currentSelectedRender == null){
|
||||||
return defaultRender();
|
return defaultRender();
|
||||||
|
|
|
@ -88,7 +88,8 @@ public class IncrementalChangesManager {
|
||||||
if (!regionUpdateFiles.dayUpdates.isEmpty()) {
|
if (!regionUpdateFiles.dayUpdates.isEmpty()) {
|
||||||
ArrayList<String> list = new ArrayList<String>(regionUpdateFiles.dayUpdates.keySet());
|
ArrayList<String> list = new ArrayList<String>(regionUpdateFiles.dayUpdates.keySet());
|
||||||
for (String month : list) {
|
for (String month : list) {
|
||||||
Iterator<RegionUpdate> it = regionUpdateFiles.dayUpdates.get(month).iterator();
|
List<RegionUpdate> newList = new ArrayList<>(regionUpdateFiles.dayUpdates.get(month));
|
||||||
|
Iterator<RegionUpdate> it = newList.iterator();
|
||||||
RegionUpdate monthRu = regionUpdateFiles.monthUpdates.get(month);
|
RegionUpdate monthRu = regionUpdateFiles.monthUpdates.get(month);
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
RegionUpdate ru = it.next();
|
RegionUpdate ru = it.next();
|
||||||
|
@ -100,6 +101,7 @@ public class IncrementalChangesManager {
|
||||||
log.info("Delete overlapping day update " + ru.file.getName());
|
log.info("Delete overlapping day update " + ru.file.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
regionUpdateFiles.dayUpdates.put(month, newList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -716,18 +716,18 @@ public class ResourceManager {
|
||||||
int left31 = MapUtils.get31TileNumberX(leftLongitude);
|
int left31 = MapUtils.get31TileNumberX(leftLongitude);
|
||||||
int bottom31 = MapUtils.get31TileNumberY(bottomLatitude);
|
int bottom31 = MapUtils.get31TileNumberY(bottomLatitude);
|
||||||
int right31 = MapUtils.get31TileNumberX(rightLongitude);
|
int right31 = MapUtils.get31TileNumberX(rightLongitude);
|
||||||
List<String> fileNames = new ArrayList<String>(amenityRepositories.keySet());
|
List<String> fileNames = new ArrayList<>(amenityRepositories.keySet());
|
||||||
Collections.sort(fileNames, Algorithms.getStringVersionComparator());
|
Collections.sort(fileNames, Algorithms.getStringVersionComparator());
|
||||||
for (String name : fileNames) {
|
for (String name : fileNames) {
|
||||||
AmenityIndexRepository index = amenityRepositories.get(name);
|
|
||||||
if (matcher != null && matcher.isCancelled()) {
|
if (matcher != null && matcher.isCancelled()) {
|
||||||
searchAmenitiesInProgress = false;
|
searchAmenitiesInProgress = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (index.checkContainsInt(top31, left31, bottom31, right31)) {
|
AmenityIndexRepository index = amenityRepositories.get(name);
|
||||||
|
if (index != null && index.checkContainsInt(top31, left31, bottom31, right31)) {
|
||||||
List<Amenity> r = index.searchAmenities(top31,
|
List<Amenity> r = index.searchAmenities(top31,
|
||||||
left31, bottom31, right31, zoom, filter, matcher);
|
left31, bottom31, right31, zoom, filter, matcher);
|
||||||
if(r != null) {
|
if (r != null) {
|
||||||
amenities.addAll(r);
|
amenities.addAll(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,8 @@ public class AlarmInfo implements LocationPoint {
|
||||||
STOP(7, R.string.traffic_warning_stop),
|
STOP(7, R.string.traffic_warning_stop),
|
||||||
PEDESTRIAN(8, R.string.traffic_warning_pedestrian),
|
PEDESTRIAN(8, R.string.traffic_warning_pedestrian),
|
||||||
HAZARD(9, R.string.traffic_warning_hazard),
|
HAZARD(9, R.string.traffic_warning_hazard),
|
||||||
MAXIMUM(10, R.string.traffic_warning);
|
MAXIMUM(10, R.string.traffic_warning),
|
||||||
|
TUNNEL(8, R.string.tunnel_warning);
|
||||||
|
|
||||||
private int priority;
|
private int priority;
|
||||||
private int string;
|
private int string;
|
||||||
|
@ -41,6 +42,7 @@ public class AlarmInfo implements LocationPoint {
|
||||||
private AlarmInfoType type;
|
private AlarmInfoType type;
|
||||||
protected final int locationIndex;
|
protected final int locationIndex;
|
||||||
private int intValue;
|
private int intValue;
|
||||||
|
private float floatValue;
|
||||||
private double latitude;
|
private double latitude;
|
||||||
private double longitude;
|
private double longitude;
|
||||||
|
|
||||||
|
@ -54,6 +56,14 @@ public class AlarmInfo implements LocationPoint {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getFloatValue() {
|
||||||
|
return floatValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFloatValue(float floatValue) {
|
||||||
|
this.floatValue = floatValue;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getLatitude() {
|
public double getLatitude() {
|
||||||
return latitude;
|
return latitude;
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package net.osmand.plus.routing;
|
package net.osmand.plus.routing;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import android.content.Context;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.osmand.Location;
|
import net.osmand.Location;
|
||||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
||||||
|
@ -12,12 +10,14 @@ import net.osmand.data.LocationPoint;
|
||||||
import net.osmand.plus.ApplicationMode;
|
import net.osmand.plus.ApplicationMode;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.routing.AlarmInfo.AlarmInfoType;
|
||||||
import net.osmand.router.RouteSegmentResult;
|
import net.osmand.router.RouteSegmentResult;
|
||||||
import net.osmand.router.TurnType;
|
import net.osmand.router.TurnType;
|
||||||
import net.osmand.plus.routing.AlarmInfo.AlarmInfoType;
|
|
||||||
import net.osmand.util.Algorithms;
|
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
import android.content.Context;
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static net.osmand.binary.RouteDataObject.HEIGHT_UNDEFINED;
|
import static net.osmand.binary.RouteDataObject.HEIGHT_UNDEFINED;
|
||||||
|
|
||||||
|
@ -221,12 +221,26 @@ public class RouteCalculationResult {
|
||||||
float prevDirectionDistance = 0;
|
float prevDirectionDistance = 0;
|
||||||
double lastHeight = HEIGHT_UNDEFINED;
|
double lastHeight = HEIGHT_UNDEFINED;
|
||||||
List<RouteSegmentResult> segmentsToPopulate = new ArrayList<RouteSegmentResult>();
|
List<RouteSegmentResult> segmentsToPopulate = new ArrayList<RouteSegmentResult>();
|
||||||
|
AlarmInfo tunnelAlarm = null;
|
||||||
for (int routeInd = 0; routeInd < list.size(); routeInd++) {
|
for (int routeInd = 0; routeInd < list.size(); routeInd++) {
|
||||||
RouteSegmentResult s = list.get(routeInd);
|
RouteSegmentResult s = list.get(routeInd);
|
||||||
float[] vls = s.getObject().calculateHeightArray();
|
float[] vls = s.getObject().calculateHeightArray();
|
||||||
boolean plus = s.getStartPointIndex() < s.getEndPointIndex();
|
boolean plus = s.getStartPointIndex() < s.getEndPointIndex();
|
||||||
int i = s.getStartPointIndex();
|
int i = s.getStartPointIndex();
|
||||||
int prevLocationSize = locations.size();
|
int prevLocationSize = locations.size();
|
||||||
|
if (s.getObject().tunnel()) {
|
||||||
|
if (tunnelAlarm == null) {
|
||||||
|
LatLon latLon = s.getPoint(i);
|
||||||
|
tunnelAlarm = new AlarmInfo(AlarmInfoType.TUNNEL, prevLocationSize);
|
||||||
|
tunnelAlarm.setLatLon(latLon.getLatitude(), latLon.getLongitude());
|
||||||
|
tunnelAlarm.setFloatValue(s.getDistance());
|
||||||
|
alarms.add(tunnelAlarm);
|
||||||
|
} else {
|
||||||
|
tunnelAlarm.setFloatValue(tunnelAlarm.getFloatValue() + s.getDistance());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tunnelAlarm = null;
|
||||||
|
}
|
||||||
while (true) {
|
while (true) {
|
||||||
Location n = new Location(""); //$NON-NLS-1$
|
Location n = new Location(""); //$NON-NLS-1$
|
||||||
LatLon point = s.getPoint(i);
|
LatLon point = s.getPoint(i);
|
||||||
|
|
|
@ -1134,8 +1134,10 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
QuickSearchDialogFragment.this, filter.getFilterId());
|
QuickSearchDialogFragment.this, filter.getFilterId());
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
if (categoriesSearchFragment != null) {
|
||||||
categoriesSearchFragment.updateListAdapter(rows, false);
|
categoriesSearchFragment.updateListAdapter(rows, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
LOG.info("--- categories loaded");
|
LOG.info("--- categories loaded");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -1815,6 +1817,21 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
sr.objectType = ObjectType.POI_TYPE;
|
sr.objectType = ObjectType.POI_TYPE;
|
||||||
searchUICore.selectSearchResult(sr);
|
searchUICore.selectSearchResult(sr);
|
||||||
|
|
||||||
|
bundle.putBoolean(QUICK_SEARCH_PHRASE_DEFINED_KEY, true);
|
||||||
|
|
||||||
|
} else if (object instanceof PoiUIFilter) {
|
||||||
|
PoiUIFilter filter = (PoiUIFilter) object;
|
||||||
|
objectLocalizedName = filter.getName();
|
||||||
|
SearchUICore searchUICore = mapActivity.getMyApplication().getSearchUICore().getCore();
|
||||||
|
SearchPhrase phrase = searchUICore.resetPhrase();
|
||||||
|
SearchResult sr = new SearchResult(phrase);
|
||||||
|
sr.localeName = objectLocalizedName;
|
||||||
|
sr.object = filter;
|
||||||
|
sr.priority = SEARCH_AMENITY_TYPE_PRIORITY;
|
||||||
|
sr.priorityDistance = 0;
|
||||||
|
sr.objectType = ObjectType.POI_TYPE;
|
||||||
|
searchUICore.selectSearchResult(sr);
|
||||||
|
|
||||||
bundle.putBoolean(QUICK_SEARCH_PHRASE_DEFINED_KEY, true);
|
bundle.putBoolean(QUICK_SEARCH_PHRASE_DEFINED_KEY, true);
|
||||||
}
|
}
|
||||||
searchQuery = objectLocalizedName.trim() + " ";
|
searchQuery = objectLocalizedName.trim() + " ";
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.widget.AppCompatButton;
|
|
||||||
import android.support.v7.widget.PopupMenu;
|
import android.support.v7.widget.PopupMenu;
|
||||||
import android.support.v7.widget.SwitchCompat;
|
import android.support.v7.widget.SwitchCompat;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
@ -558,7 +557,7 @@ public class QuickSearchPoiFilterFragment extends DialogFragment {
|
||||||
boolean showAll = showAllCategories.contains(category);
|
boolean showAll = showAllCategories.contains(category);
|
||||||
items.add(new PoiFilterListItem(PoiFilterListItemType.DIVIDER, 0, null, -1, false, false, false, null, null));
|
items.add(new PoiFilterListItem(PoiFilterListItemType.DIVIDER, 0, null, -1, false, false, false, null, null));
|
||||||
|
|
||||||
String categoryIconStr = poiTypes.getPoiAdditionalCategoryIcon(category);
|
String categoryIconStr = poiTypes.getPoiAdditionalCategoryIconName(category);
|
||||||
int categoryIconId = 0;
|
int categoryIconId = 0;
|
||||||
if (!Algorithms.isEmpty(categoryIconStr)) {
|
if (!Algorithms.isEmpty(categoryIconStr)) {
|
||||||
categoryIconId = RenderingIcons.getBigIconResourceId(categoryIconStr);
|
categoryIconId = RenderingIcons.getBigIconResourceId(categoryIconStr);
|
||||||
|
|
|
@ -604,6 +604,9 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
||||||
if (entry.getKey().startsWith("name:") && !entry.getValue().equals("")) {
|
if (entry.getKey().startsWith("name:") && !entry.getValue().equals("")) {
|
||||||
names.add(entry.getValue());
|
names.add(entry.getValue());
|
||||||
}
|
}
|
||||||
|
if (entry.getKey().equals("name") && !entry.getValue().equals("")) {
|
||||||
|
names.add(entry.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LatLon searchLatLon = objectLatLon;
|
LatLon searchLatLon = objectLatLon;
|
||||||
if (searchLatLon == null) {
|
if (searchLatLon == null) {
|
||||||
|
|
|
@ -806,12 +806,12 @@ public class MapControlsLayer extends OsmandMapLayer {
|
||||||
boolean routeFollowingMode = !routePlanningMode && rh.isFollowingMode();
|
boolean routeFollowingMode = !routePlanningMode && rh.isFollowingMode();
|
||||||
boolean routeDialogOpened = MapRouteInfoMenu.isVisible();
|
boolean routeDialogOpened = MapRouteInfoMenu.isVisible();
|
||||||
boolean trackDialogOpened = TrackDetailsMenu.isVisible();
|
boolean trackDialogOpened = TrackDetailsMenu.isVisible();
|
||||||
boolean contextMenuOpened = mapActivity.getContextMenu().shouldShowTopControls();
|
boolean contextMenuOpened = !mapActivity.getContextMenu().shouldShowTopControls();
|
||||||
boolean showRouteCalculationControls = routePlanningMode ||
|
boolean showRouteCalculationControls = routePlanningMode ||
|
||||||
((app.accessibilityEnabled() || (System.currentTimeMillis() - touchEvent < TIMEOUT_TO_SHOW_BUTTONS)) && routeFollowingMode);
|
((app.accessibilityEnabled() || (System.currentTimeMillis() - touchEvent < TIMEOUT_TO_SHOW_BUTTONS)) && routeFollowingMode);
|
||||||
updateMyLocation(rh, routeDialogOpened || trackDialogOpened || !contextMenuOpened);
|
updateMyLocation(rh, routeDialogOpened || trackDialogOpened || contextMenuOpened);
|
||||||
boolean showButtons = (showRouteCalculationControls || !routeFollowingMode)
|
boolean showButtons = (showRouteCalculationControls || !routeFollowingMode)
|
||||||
&& !isInMovingMarkerMode() && !isInGpxDetailsMode() && !isInMeasurementToolMode() && !isInPlanRouteMode() && contextMenuOpened;
|
&& !isInMovingMarkerMode() && !isInGpxDetailsMode() && !isInMeasurementToolMode() && !isInPlanRouteMode() && !contextMenuOpened;
|
||||||
//routePlanningBtn.setIconResId(routeFollowingMode ? R.drawable.ic_action_gabout_dark : R.drawable.map_directions);
|
//routePlanningBtn.setIconResId(routeFollowingMode ? R.drawable.ic_action_gabout_dark : R.drawable.map_directions);
|
||||||
if (rh.isFollowingMode()) {
|
if (rh.isFollowingMode()) {
|
||||||
routePlanningBtn.setIconResId(R.drawable.map_start_navigation);
|
routePlanningBtn.setIconResId(R.drawable.map_start_navigation);
|
||||||
|
@ -826,18 +826,20 @@ public class MapControlsLayer extends OsmandMapLayer {
|
||||||
routePlanningBtn.updateVisibility(showButtons);
|
routePlanningBtn.updateVisibility(showButtons);
|
||||||
menuControl.updateVisibility(showButtons);
|
menuControl.updateVisibility(showButtons);
|
||||||
|
|
||||||
mapZoomIn.updateVisibility(!routeDialogOpened && contextMenuOpened);
|
mapZoomIn.updateVisibility(!routeDialogOpened && !contextMenuOpened);
|
||||||
mapZoomOut.updateVisibility(!routeDialogOpened && contextMenuOpened);
|
mapZoomOut.updateVisibility(!routeDialogOpened && !contextMenuOpened);
|
||||||
compassHud.updateVisibility(!routeDialogOpened && !trackDialogOpened && shouldShowCompass()
|
boolean forceHideCompass = routeDialogOpened || trackDialogOpened
|
||||||
&& !isInMeasurementToolMode() && !isInPlanRouteMode() && contextMenuOpened);
|
|| isInMeasurementToolMode() || isInPlanRouteMode() || contextMenuOpened;
|
||||||
|
compassHud.forceHideCompass = forceHideCompass;
|
||||||
|
compassHud.updateVisibility(!forceHideCompass && shouldShowCompass());
|
||||||
|
|
||||||
if (layersHud.setIconResId(settings.getApplicationMode().getMapIconId())) {
|
if (layersHud.setIconResId(settings.getApplicationMode().getMapIconId())) {
|
||||||
layersHud.update(app, isNight);
|
layersHud.update(app, isNight);
|
||||||
}
|
}
|
||||||
layersHud.updateVisibility(!routeDialogOpened && !trackDialogOpened && !isInMeasurementToolMode() && !isInPlanRouteMode()
|
layersHud.updateVisibility(!routeDialogOpened && !trackDialogOpened && !isInMeasurementToolMode() && !isInPlanRouteMode()
|
||||||
&& contextMenuOpened);
|
&& !contextMenuOpened);
|
||||||
quickSearchHud.updateVisibility(!routeDialogOpened && !trackDialogOpened && !isInMeasurementToolMode() && !isInPlanRouteMode()
|
quickSearchHud.updateVisibility(!routeDialogOpened && !trackDialogOpened && !isInMeasurementToolMode() && !isInPlanRouteMode()
|
||||||
&& contextMenuOpened);
|
&& !contextMenuOpened);
|
||||||
|
|
||||||
if (!routePlanningMode && !routeFollowingMode) {
|
if (!routePlanningMode && !routeFollowingMode) {
|
||||||
if (mapView.isZooming()) {
|
if (mapView.isZooming()) {
|
||||||
|
@ -854,7 +856,9 @@ public class MapControlsLayer extends OsmandMapLayer {
|
||||||
}
|
}
|
||||||
|
|
||||||
mapRouteInfoMenu.setVisible(showRouteCalculationControls);
|
mapRouteInfoMenu.setVisible(showRouteCalculationControls);
|
||||||
|
if (!forceHideCompass) {
|
||||||
updateCompass(isNight);
|
updateCompass(isNight);
|
||||||
|
}
|
||||||
|
|
||||||
for (MapHudButton mc : controls) {
|
for (MapHudButton mc : controls) {
|
||||||
mc.update(mapActivity.getMyApplication(), isNight);
|
mc.update(mapActivity.getMyApplication(), isNight);
|
||||||
|
@ -1027,6 +1031,7 @@ public class MapControlsLayer extends OsmandMapLayer {
|
||||||
boolean f = true;
|
boolean f = true;
|
||||||
boolean compass;
|
boolean compass;
|
||||||
boolean compassOutside;
|
boolean compassOutside;
|
||||||
|
boolean forceHideCompass;
|
||||||
ViewPropertyAnimatorCompat hideAnimator;
|
ViewPropertyAnimatorCompat hideAnimator;
|
||||||
|
|
||||||
public MapHudButton setRoundTransparent() {
|
public MapHudButton setRoundTransparent() {
|
||||||
|
@ -1088,9 +1093,10 @@ public class MapControlsLayer extends OsmandMapLayer {
|
||||||
iv.setVisibility(View.VISIBLE);
|
iv.setVisibility(View.VISIBLE);
|
||||||
iv.invalidate();
|
iv.invalidate();
|
||||||
} else if (hideAnimator == null) {
|
} else if (hideAnimator == null) {
|
||||||
if (compass) {
|
if (compass && !forceHideCompass) {
|
||||||
hideDelayed(5000);
|
hideDelayed(5000);
|
||||||
} else {
|
} else {
|
||||||
|
forceHideCompass = false;
|
||||||
iv.setVisibility(View.GONE);
|
iv.setVisibility(View.GONE);
|
||||||
iv.invalidate();
|
iv.invalidate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,6 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
||||||
|
|
||||||
private float mapRatioX;
|
private float mapRatioX;
|
||||||
private float mapRatioY;
|
private float mapRatioY;
|
||||||
private LatLon originalRatioCenterLatLon;
|
|
||||||
|
|
||||||
private boolean showMapPosition = true;
|
private boolean showMapPosition = true;
|
||||||
|
|
||||||
|
@ -496,16 +495,20 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
||||||
public void setCustomMapRatio(float ratioX, float ratioY) {
|
public void setCustomMapRatio(float ratioX, float ratioY) {
|
||||||
this.mapRatioX = ratioX;
|
this.mapRatioX = ratioX;
|
||||||
this.mapRatioY = ratioY;
|
this.mapRatioY = ratioY;
|
||||||
originalRatioCenterLatLon = currentViewport.getCenterLatLon();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restoreMapRatio() {
|
public void restoreMapRatio() {
|
||||||
|
RotatedTileBox box = currentViewport.copy();
|
||||||
|
float rx = (float)box.getCenterPixelX() / box.getPixWidth();
|
||||||
|
float ry = (float)box.getCenterPixelY() / box.getPixHeight();
|
||||||
|
if (mapPosition == OsmandSettings.BOTTOM_CONSTANT) {
|
||||||
|
ry -= 0.35;
|
||||||
|
}
|
||||||
|
box.setCenterLocation(rx, ry);
|
||||||
|
LatLon screenCenter = box.getLatLonFromPixel(box.getPixWidth() / 2, box.getPixHeight() / 2);
|
||||||
mapRatioX = 0;
|
mapRatioX = 0;
|
||||||
mapRatioY = 0;
|
mapRatioY = 0;
|
||||||
if (originalRatioCenterLatLon != null) {
|
setLatLon(screenCenter.getLatitude(), screenCenter.getLongitude());
|
||||||
setLatLon(originalRatioCenterLatLon.getLatitude(), originalRatioCenterLatLon.getLongitude());
|
|
||||||
originalRatioCenterLatLon = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasCustomMapRatio() {
|
public boolean hasCustomMapRatio() {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.hardware.GeomagneticField;
|
import android.hardware.GeomagneticField;
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -55,6 +56,7 @@ import net.osmand.router.RouteResultPreparation;
|
||||||
import net.osmand.router.TurnType;
|
import net.osmand.router.TurnType;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -1191,6 +1193,7 @@ public class RouteInfoWidgetsFactory {
|
||||||
private View layout;
|
private View layout;
|
||||||
private ImageView icon;
|
private ImageView icon;
|
||||||
private TextView text;
|
private TextView text;
|
||||||
|
private TextView bottomText;
|
||||||
private OsmandSettings settings;
|
private OsmandSettings settings;
|
||||||
private RoutingHelper rh;
|
private RoutingHelper rh;
|
||||||
private MapViewTrackingUtilities trackingUtilities;
|
private MapViewTrackingUtilities trackingUtilities;
|
||||||
|
@ -1198,11 +1201,13 @@ public class RouteInfoWidgetsFactory {
|
||||||
private WaypointHelper wh;
|
private WaypointHelper wh;
|
||||||
private int imgId;
|
private int imgId;
|
||||||
private String textString;
|
private String textString;
|
||||||
|
private String bottomTextString;
|
||||||
|
|
||||||
public AlarmWidget(final OsmandApplication app, MapActivity ma) {
|
public AlarmWidget(final OsmandApplication app, MapActivity ma) {
|
||||||
layout = ma.findViewById(R.id.map_alarm_warning);
|
layout = ma.findViewById(R.id.map_alarm_warning);
|
||||||
icon = (ImageView) ma.findViewById(R.id.map_alarm_warning_icon);
|
icon = (ImageView) ma.findViewById(R.id.map_alarm_warning_icon);
|
||||||
text = (TextView) ma.findViewById(R.id.map_alarm_warning_text);
|
text = (TextView) ma.findViewById(R.id.map_alarm_warning_text);
|
||||||
|
bottomText = (TextView) ma.findViewById(R.id.map_alarm_warning_text_bottom);
|
||||||
settings = app.getSettings();
|
settings = app.getSettings();
|
||||||
rh = ma.getRoutingHelper();
|
rh = ma.getRoutingHelper();
|
||||||
trackingUtilities = ma.getMapViewTrackingUtilities();
|
trackingUtilities = ma.getMapViewTrackingUtilities();
|
||||||
|
@ -1214,6 +1219,7 @@ public class RouteInfoWidgetsFactory {
|
||||||
boolean trafficWarnings = settings.SHOW_TRAFFIC_WARNINGS.get();
|
boolean trafficWarnings = settings.SHOW_TRAFFIC_WARNINGS.get();
|
||||||
boolean cams = settings.SHOW_CAMERAS.get();
|
boolean cams = settings.SHOW_CAMERAS.get();
|
||||||
boolean peds = settings.SHOW_PEDESTRIAN.get();
|
boolean peds = settings.SHOW_PEDESTRIAN.get();
|
||||||
|
boolean tunnels = settings.SHOW_TUNNELS.get();
|
||||||
boolean visible = false;
|
boolean visible = false;
|
||||||
if ((rh.isFollowingMode() || trackingUtilities.isMapLinkedToLocation())
|
if ((rh.isFollowingMode() || trackingUtilities.isMapLinkedToLocation())
|
||||||
&& (trafficWarnings || cams)) {
|
&& (trafficWarnings || cams)) {
|
||||||
|
@ -1232,6 +1238,7 @@ public class RouteInfoWidgetsFactory {
|
||||||
if(alarm != null) {
|
if(alarm != null) {
|
||||||
int locimgId = R.drawable.warnings_limit;
|
int locimgId = R.drawable.warnings_limit;
|
||||||
String text = "";
|
String text = "";
|
||||||
|
String bottomText = "";
|
||||||
if(alarm.getType() == AlarmInfoType.SPEED_LIMIT) {
|
if(alarm.getType() == AlarmInfoType.SPEED_LIMIT) {
|
||||||
if(settings.DRIVING_REGION.get().americanSigns){
|
if(settings.DRIVING_REGION.get().americanSigns){
|
||||||
locimgId = R.drawable.warnings_speed_limit_us;
|
locimgId = R.drawable.warnings_speed_limit_us;
|
||||||
|
@ -1271,8 +1278,16 @@ public class RouteInfoWidgetsFactory {
|
||||||
} else {
|
} else {
|
||||||
locimgId = R.drawable.warnings_pedestrian;
|
locimgId = R.drawable.warnings_pedestrian;
|
||||||
}
|
}
|
||||||
|
} else if(alarm.getType() == AlarmInfoType.TUNNEL) {
|
||||||
|
if(settings.DRIVING_REGION.get().americanSigns){
|
||||||
|
locimgId = R.drawable.warnings_tunnel_us;
|
||||||
|
} else {
|
||||||
|
locimgId = R.drawable.warnings_tunnel;
|
||||||
|
}
|
||||||
|
bottomText = OsmAndFormatter.getFormattedAlarmInfoDistance(settings.getContext(), alarm.getFloatValue());
|
||||||
} else {
|
} else {
|
||||||
text = null;
|
text = null;
|
||||||
|
bottomText = null;
|
||||||
}
|
}
|
||||||
visible = (text != null && text.length() > 0) || (locimgId != 0);
|
visible = (text != null && text.length() > 0) || (locimgId != 0);
|
||||||
if (visible) {
|
if (visible) {
|
||||||
|
@ -1280,6 +1295,8 @@ public class RouteInfoWidgetsFactory {
|
||||||
visible = cams;
|
visible = cams;
|
||||||
} else if (alarm.getType() == AlarmInfoType.PEDESTRIAN) {
|
} else if (alarm.getType() == AlarmInfoType.PEDESTRIAN) {
|
||||||
visible = peds;
|
visible = peds;
|
||||||
|
} else if (alarm.getType() == AlarmInfoType.TUNNEL) {
|
||||||
|
visible = tunnels;
|
||||||
} else {
|
} else {
|
||||||
visible = trafficWarnings;
|
visible = trafficWarnings;
|
||||||
}
|
}
|
||||||
|
@ -1293,6 +1310,12 @@ public class RouteInfoWidgetsFactory {
|
||||||
textString = text;
|
textString = text;
|
||||||
this.text.setText(this.textString);
|
this.text.setText(this.textString);
|
||||||
}
|
}
|
||||||
|
if (!Algorithms.objectEquals(bottomText, this.bottomTextString)) {
|
||||||
|
bottomTextString = bottomText;
|
||||||
|
this.bottomText.setText(this.bottomTextString);
|
||||||
|
this.bottomText.setTextColor(ContextCompat.getColor(layout.getContext(),
|
||||||
|
settings.DRIVING_REGION.get().americanSigns ? R.color.color_black : R.color.color_white));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue