Merge pull request #8738 from osmandapp/WikipediaDashboard
Add Wikipedia POI separate screen and logic
This commit is contained in:
commit
600a7a45f0
27 changed files with 1164 additions and 101 deletions
|
@ -35,6 +35,7 @@ public interface OsmAndCustomizationConstants {
|
||||||
String POI_OVERLAY_LABELS_ID = SHOW_ITEMS_ID_SCHEME + "poi_overlay_labels";
|
String POI_OVERLAY_LABELS_ID = SHOW_ITEMS_ID_SCHEME + "poi_overlay_labels";
|
||||||
String TRANSPORT_ID = SHOW_ITEMS_ID_SCHEME + "transport";
|
String TRANSPORT_ID = SHOW_ITEMS_ID_SCHEME + "transport";
|
||||||
String GPX_FILES_ID = SHOW_ITEMS_ID_SCHEME + "gpx_files";
|
String GPX_FILES_ID = SHOW_ITEMS_ID_SCHEME + "gpx_files";
|
||||||
|
String WIKIPEDIA_ID = SHOW_ITEMS_ID_SCHEME + "wikipedia";
|
||||||
String MAP_MARKERS_ID = SHOW_ITEMS_ID_SCHEME + "map_markers";
|
String MAP_MARKERS_ID = SHOW_ITEMS_ID_SCHEME + "map_markers";
|
||||||
String MAP_SOURCE_ID = SHOW_ITEMS_ID_SCHEME + "map_source";
|
String MAP_SOURCE_ID = SHOW_ITEMS_ID_SCHEME + "map_source";
|
||||||
String RECORDING_LAYER = SHOW_ITEMS_ID_SCHEME + "recording_layer";
|
String RECORDING_LAYER = SHOW_ITEMS_ID_SCHEME + "recording_layer";
|
||||||
|
|
|
@ -36,7 +36,10 @@ public class MapPoiTypes {
|
||||||
private PoiCategory otherCategory;
|
private PoiCategory otherCategory;
|
||||||
private PoiCategory otherMapCategory;
|
private PoiCategory otherMapCategory;
|
||||||
|
|
||||||
static final String OSM_WIKI_CATEGORY = "osmwiki";
|
public static final String WIKI_LANG = "wiki_lang";
|
||||||
|
public static final String WIKI_PLACE = "wiki_place";
|
||||||
|
public static final String OSM_WIKI_CATEGORY = "osmwiki";
|
||||||
|
|
||||||
private PoiTranslator poiTranslator = null;
|
private PoiTranslator poiTranslator = null;
|
||||||
private boolean init;
|
private boolean init;
|
||||||
Map<String, PoiType> poiTypesByTag = new LinkedHashMap<String, PoiType>();
|
Map<String, PoiType> poiTypesByTag = new LinkedHashMap<String, PoiType>();
|
||||||
|
@ -127,6 +130,28 @@ public class MapPoiTypes {
|
||||||
return lf;
|
return lf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PoiCategory getOsmwiki() {
|
||||||
|
for (PoiCategory category : categories) {
|
||||||
|
if (category.isWiki()) {
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getAllAvailableWikiLocales() {
|
||||||
|
List<String> availableWikiLocales = new ArrayList<>();
|
||||||
|
for (PoiType type : getOsmwiki().getPoiTypeByKeyName(WIKI_PLACE).getPoiAdditionals()) {
|
||||||
|
String name = type.getKeyName();
|
||||||
|
String wikiLang = WIKI_LANG + ":";
|
||||||
|
if (name != null && name.startsWith(wikiLang)) {
|
||||||
|
String locale = name.substring(wikiLang.length());
|
||||||
|
availableWikiLocales.add(locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return availableWikiLocales;
|
||||||
|
}
|
||||||
|
|
||||||
private void sortList(List<? extends AbstractPoiType> lf) {
|
private void sortList(List<? extends AbstractPoiType> lf) {
|
||||||
final Collator instance = Collator.getInstance();
|
final Collator instance = Collator.getInstance();
|
||||||
Collections.sort(lf, new Comparator<AbstractPoiType>() {
|
Collections.sort(lf, new Comparator<AbstractPoiType>() {
|
||||||
|
@ -401,7 +426,7 @@ public class MapPoiTypes {
|
||||||
} else if (name.equals("poi_type")) {
|
} else if (name.equals("poi_type")) {
|
||||||
if (lastCategory == null) {
|
if (lastCategory == null) {
|
||||||
lastCategory = getOtherMapCategory();
|
lastCategory = getOtherMapCategory();
|
||||||
}
|
}
|
||||||
if(!Algorithms.isEmpty(parser.getAttributeValue("", "deprecated_of"))){
|
if(!Algorithms.isEmpty(parser.getAttributeValue("", "deprecated_of"))){
|
||||||
String vl = parser.getAttributeValue("", "name");
|
String vl = parser.getAttributeValue("", "name");
|
||||||
String target = parser.getAttributeValue("", "deprecated_of");
|
String target = parser.getAttributeValue("", "deprecated_of");
|
||||||
|
@ -595,7 +620,7 @@ public class MapPoiTypes {
|
||||||
tp.setOsmValue(parser.getAttributeValue("", "value"));
|
tp.setOsmValue(parser.getAttributeValue("", "value"));
|
||||||
tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"),
|
tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"),
|
||||||
parser.getAttributeValue("", "edit_value"));
|
parser.getAttributeValue("", "edit_value"));
|
||||||
|
|
||||||
tp.setOsmTag2(parser.getAttributeValue("", "tag2"));
|
tp.setOsmTag2(parser.getAttributeValue("", "tag2"));
|
||||||
tp.setOsmValue2(parser.getAttributeValue("", "value2"));
|
tp.setOsmValue2(parser.getAttributeValue("", "value2"));
|
||||||
tp.setText("text".equals(parser.getAttributeValue("", "type")));
|
tp.setText("text".equals(parser.getAttributeValue("", "type")));
|
||||||
|
@ -806,7 +831,7 @@ public class MapPoiTypes {
|
||||||
poiTypesByTag.put(key, p);
|
poiTypesByTag.put(key, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String replaceDeprecatedSubtype(PoiCategory type, String subtype) {
|
public String replaceDeprecatedSubtype(PoiCategory type, String subtype) {
|
||||||
if(deprecatedTags.containsKey(subtype)) {
|
if(deprecatedTags.containsKey(subtype)) {
|
||||||
return deprecatedTags.get(subtype);
|
return deprecatedTags.get(subtype);
|
||||||
|
@ -892,9 +917,9 @@ public class MapPoiTypes {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
39
OsmAnd/res/layout/bottom_sheet_item_title_with_checkbox.xml
Normal file
39
OsmAnd/res/layout/bottom_sheet_item_title_with_checkbox.xml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/card_row_min_height"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="Some title" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatCheckBox
|
||||||
|
android:id="@+id/compound_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||||
|
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:focusable="false"
|
||||||
|
android:focusableInTouchMode="false" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?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">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/button_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="Some Title" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
android:id="@+id/compound_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical|end"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:focusable="false"
|
||||||
|
android:focusableInTouchMode="false" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
80
OsmAnd/res/layout/dash_item_with_description_72dp.xml
Normal file
80
OsmAnd/res/layout/dash_item_with_description_72dp.xml
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?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">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/bg_color"
|
||||||
|
android:minHeight="@dimen/setting_list_item_large_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/icon"
|
||||||
|
android:layout_width="@dimen/standard_icon_size"
|
||||||
|
android:layout_height="@dimen/standard_icon_size"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginTop="@dimen/bottom_sheet_icon_margin"
|
||||||
|
android:layout_marginBottom="@dimen/bottom_sheet_icon_margin"
|
||||||
|
tools:src="@drawable/ic_action_info_dark"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingTop="@dimen/content_padding"
|
||||||
|
android:paddingBottom="@dimen/content_padding">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:fadingEdge="horizontal"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="title"/>
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="?android:textColorSecondary"
|
||||||
|
android:letterSpacing="@dimen/description_letter_spacing"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="description"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
android:id="@+id/toggle_item"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:visibility="visible"
|
||||||
|
android:focusable="false"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -21,7 +21,7 @@
|
||||||
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:layout_gravity="bottom"
|
||||||
android:minHeight="48dp"
|
android:minHeight="@dimen/setting_list_item_large_height"
|
||||||
android:background="?attr/bg_color"
|
android:background="?attr/bg_color"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
|
@ -34,9 +34,9 @@
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="@color/preference_category_title"
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
tools:text="Download map"/>
|
tools:text="Download map"/>
|
||||||
|
|
||||||
|
@ -44,18 +44,13 @@
|
||||||
android:id="@+id/description"
|
android:id="@+id/description"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="@dimen/content_padding_half"
|
||||||
|
android:paddingBottom="@dimen/content_padding"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
android:paddingBottom="10dp"
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
tools:text="For view contour lines on the map, you need to download contour line map of this region."/>
|
tools:text="For view contour lines on the map, you need to download contour line map of this region."/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/divider"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dashboard_divider"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -15,8 +15,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="16dp"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
tools:src="@drawable/ic_action_gabout_dark"/>
|
tools:src="@drawable/ic_action_gabout_dark"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -25,8 +25,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="16dp"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:layout_toEndOf="@+id/icon"
|
android:layout_toEndOf="@+id/icon"
|
||||||
android:layout_toLeftOf="@+id/secondary_icon"
|
android:layout_toLeftOf="@+id/secondary_icon"
|
||||||
android:layout_toRightOf="@+id/icon"
|
android:layout_toRightOf="@+id/icon"
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="@dimen/content_padding"
|
||||||
android:layout_toLeftOf="@+id/toggle_item"
|
android:layout_toLeftOf="@+id/toggle_item"
|
||||||
android:layout_toStartOf="@+id/toggle_item"
|
android:layout_toStartOf="@+id/toggle_item"
|
||||||
tools:src="@drawable/ic_action_gabout_dark"/>
|
tools:src="@drawable/ic_action_gabout_dark"/>
|
||||||
|
@ -81,8 +81,8 @@
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
android:focusable="false"/>
|
android:focusable="false"/>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
|
|
@ -160,6 +160,7 @@
|
||||||
<dimen name="bottom_sheet_divider_margin_start">84dp</dimen>
|
<dimen name="bottom_sheet_divider_margin_start">84dp</dimen>
|
||||||
<dimen name="bottom_sheet_image_text_margin_start">15dp</dimen>
|
<dimen name="bottom_sheet_image_text_margin_start">15dp</dimen>
|
||||||
<dimen name="bottom_sheet_selected_item_title_height">84dp</dimen>
|
<dimen name="bottom_sheet_selected_item_title_height">84dp</dimen>
|
||||||
|
<dimen name="bottom_sheet_big_item_height">192dp</dimen>
|
||||||
|
|
||||||
<dimen name="action_bar_image_width_land">354dp</dimen>
|
<dimen name="action_bar_image_width_land">354dp</dimen>
|
||||||
<dimen name="action_bar_image_top_margin_land">102dp</dimen>
|
<dimen name="action_bar_image_top_margin_land">102dp</dimen>
|
||||||
|
|
|
@ -258,6 +258,7 @@
|
||||||
<dimen name="bottom_sheet_image_text_margin_start">10dp</dimen>
|
<dimen name="bottom_sheet_image_text_margin_start">10dp</dimen>
|
||||||
<dimen name="bottom_sheet_selected_item_title_height">56dp</dimen>
|
<dimen name="bottom_sheet_selected_item_title_height">56dp</dimen>
|
||||||
<dimen name="bottom_sheet_text_spacing_multiplier" format="float">1.25</dimen>
|
<dimen name="bottom_sheet_text_spacing_multiplier" format="float">1.25</dimen>
|
||||||
|
<dimen name="bottom_sheet_big_item_height">128dp</dimen>
|
||||||
|
|
||||||
<dimen name="action_bar_image_width_land">236dp</dimen>
|
<dimen name="action_bar_image_width_land">236dp</dimen>
|
||||||
<dimen name="action_bar_image_top_margin_land">68dp</dimen>
|
<dimen name="action_bar_image_top_margin_land">68dp</dimen>
|
||||||
|
|
|
@ -11,6 +11,11 @@
|
||||||
Thx - Hardy
|
Thx - Hardy
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
<string name="wiki_menu_download_descr">Additional maps are needed to view Wikipedia POIs on the map.</string>
|
||||||
|
<string name="wikipedia_poi_languages_promo">Some Wikipedia articles may not be available in your name, select the languages in which Wikipedia articles will appear on the map.\nYou will be able to switch between all available languages while reading the article.</string>
|
||||||
|
<string name="shared_string_all_languages">All languages</string>
|
||||||
|
<string name="shared_string_language">Language</string>
|
||||||
|
<string name="shared_string_languages">Languages</string>
|
||||||
<string name="select_track_file">Select track file</string>
|
<string name="select_track_file">Select track file</string>
|
||||||
<string name="settings_item_import_error">Could not import %1$s.</string>
|
<string name="settings_item_import_error">Could not import %1$s.</string>
|
||||||
<string name="settings_item_write_error">Could not write %1$s.</string>
|
<string name="settings_item_write_error">Could not write %1$s.</string>
|
||||||
|
|
|
@ -408,7 +408,7 @@ public class ContextMenuAdapter {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ch.setOnCheckedChangeListener(listener);
|
ch.setOnCheckedChangeListener(listener);
|
||||||
ch.setVisibility(View.VISIBLE);
|
ch.setVisibility(item.shouldHideCompoundButton() ? View.GONE : View.VISIBLE);
|
||||||
} else if (ch != null) {
|
} else if (ch != null) {
|
||||||
ch.setVisibility(View.GONE);
|
ch.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ public class ContextMenuItem {
|
||||||
private final ContextMenuAdapter.OnIntegerValueChangedListener integerListener;
|
private final ContextMenuAdapter.OnIntegerValueChangedListener integerListener;
|
||||||
private final ContextMenuAdapter.ProgressListener progressListener;
|
private final ContextMenuAdapter.ProgressListener progressListener;
|
||||||
private final boolean hideDivider;
|
private final boolean hideDivider;
|
||||||
|
private final boolean hideCompoundButton;
|
||||||
private final int minHeight;
|
private final int minHeight;
|
||||||
private final int tag;
|
private final int tag;
|
||||||
private final String id;
|
private final String id;
|
||||||
|
@ -60,6 +61,7 @@ public class ContextMenuItem {
|
||||||
ContextMenuAdapter.OnIntegerValueChangedListener integerListener,
|
ContextMenuAdapter.OnIntegerValueChangedListener integerListener,
|
||||||
ContextMenuAdapter.ProgressListener progressListener,
|
ContextMenuAdapter.ProgressListener progressListener,
|
||||||
boolean hideDivider,
|
boolean hideDivider,
|
||||||
|
boolean hideCompoundButton,
|
||||||
int minHeight,
|
int minHeight,
|
||||||
int tag,
|
int tag,
|
||||||
String id) {
|
String id) {
|
||||||
|
@ -82,6 +84,7 @@ public class ContextMenuItem {
|
||||||
this.integerListener = integerListener;
|
this.integerListener = integerListener;
|
||||||
this.progressListener = progressListener;
|
this.progressListener = progressListener;
|
||||||
this.hideDivider = hideDivider;
|
this.hideDivider = hideDivider;
|
||||||
|
this.hideCompoundButton = hideCompoundButton;
|
||||||
this.minHeight = minHeight;
|
this.minHeight = minHeight;
|
||||||
this.tag = tag;
|
this.tag = tag;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
@ -182,6 +185,10 @@ public class ContextMenuItem {
|
||||||
return hideDivider;
|
return hideDivider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldHideCompoundButton() {
|
||||||
|
return hideCompoundButton;
|
||||||
|
}
|
||||||
|
|
||||||
public void setTitle(String title) {
|
public void setTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
@ -255,6 +262,7 @@ public class ContextMenuItem {
|
||||||
private ContextMenuAdapter.ProgressListener mProgressListener = null;
|
private ContextMenuAdapter.ProgressListener mProgressListener = null;
|
||||||
private boolean mSkipPaintingWithoutColor;
|
private boolean mSkipPaintingWithoutColor;
|
||||||
private boolean mHideDivider;
|
private boolean mHideDivider;
|
||||||
|
private boolean mHideCompoundButton;
|
||||||
private int mMinHeight;
|
private int mMinHeight;
|
||||||
private int mTag;
|
private int mTag;
|
||||||
private String mId;
|
private String mId;
|
||||||
|
@ -358,6 +366,11 @@ public class ContextMenuItem {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemBuilder hideCompoundButton(boolean hideCompoundButton) {
|
||||||
|
mHideCompoundButton = hideCompoundButton;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ItemBuilder setMinHeight(int minHeight) {
|
public ItemBuilder setMinHeight(int minHeight) {
|
||||||
this.mMinHeight = minHeight;
|
this.mMinHeight = minHeight;
|
||||||
return this;
|
return this;
|
||||||
|
@ -381,7 +394,7 @@ public class ContextMenuItem {
|
||||||
return new ContextMenuItem(mTitleId, mTitle, mIcon, mColorRes, mSecondaryIcon,
|
return new ContextMenuItem(mTitleId, mTitle, mIcon, mColorRes, mSecondaryIcon,
|
||||||
mSelected, mProgress, mLayout, mLoading, mIsCategory, mIsClickable, mSkipPaintingWithoutColor,
|
mSelected, mProgress, mLayout, mLoading, mIsCategory, mIsClickable, mSkipPaintingWithoutColor,
|
||||||
mPosition, mOrder, mDescription, mItemClickListener, mIntegerListener, mProgressListener,
|
mPosition, mOrder, mDescription, mItemClickListener, mIntegerListener, mProgressListener,
|
||||||
mHideDivider, mMinHeight, mTag, mId);
|
mHideDivider, mHideCompoundButton, mMinHeight, mTag, mId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1012,42 +1012,58 @@ public class OsmandSettings {
|
||||||
super(id, defaultValue);
|
super(id, defaultValue);
|
||||||
this.delimiter = delimiter;
|
this.delimiter = delimiter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addValue(String res) {
|
public boolean addValue(String res) {
|
||||||
String vl = get();
|
return addModeValue(getApplicationMode(), res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addModeValue(ApplicationMode appMode, String res) {
|
||||||
|
String vl = getModeValue(appMode);
|
||||||
if (vl == null || vl.isEmpty()) {
|
if (vl == null || vl.isEmpty()) {
|
||||||
vl = res + delimiter;
|
vl = res + delimiter;
|
||||||
} else {
|
} else {
|
||||||
vl = vl + res + delimiter;
|
vl = vl + res + delimiter;
|
||||||
}
|
}
|
||||||
set(vl);
|
setModeValue(appMode, vl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearAll() {
|
public void clearAll() {
|
||||||
set("");
|
clearAllForProfile(getApplicationMode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearAllForProfile(ApplicationMode appMode) {
|
||||||
|
setModeValue(appMode, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean containsValue(String res) {
|
public boolean containsValue(String res) {
|
||||||
String vl = get();
|
return containsValue(getApplicationMode(), res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsValue(ApplicationMode appMode, String res) {
|
||||||
|
String vl = getModeValue(appMode);
|
||||||
String r = res + delimiter;
|
String r = res + delimiter;
|
||||||
return vl.startsWith(r) || vl.indexOf(delimiter + r) >= 0;
|
return vl.startsWith(r) || vl.contains(delimiter + r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean removeValue(String res) {
|
public boolean removeValue(String res) {
|
||||||
String vl = get();
|
return removeValueForProfile(getApplicationMode(), res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean removeValueForProfile(ApplicationMode appMode, String res) {
|
||||||
|
String vl = getModeValue(appMode);
|
||||||
String r = res + delimiter;
|
String r = res + delimiter;
|
||||||
if(vl != null) {
|
if(vl != null) {
|
||||||
if(vl.startsWith(r)) {
|
if(vl.startsWith(r)) {
|
||||||
vl = vl.substring(r.length());
|
vl = vl.substring(r.length());
|
||||||
set(vl);
|
setModeValue(appMode, vl);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
int it = vl.indexOf(delimiter + r);
|
int it = vl.indexOf(delimiter + r);
|
||||||
if(it >= 0) {
|
if(it >= 0) {
|
||||||
vl = vl.substring(0, it + delimiter.length()) + vl.substring(it + delimiter.length() + r.length());
|
vl = vl.substring(0, it + delimiter.length()) + vl.substring(it + delimiter.length() + r.length());
|
||||||
}
|
}
|
||||||
set(vl);
|
setModeValue(appMode, vl);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1055,7 +1071,11 @@ public class OsmandSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getStringsList() {
|
public List<String> getStringsList() {
|
||||||
final String listAsString = get();
|
return getStringsListForProfile(getApplicationMode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getStringsListForProfile(ApplicationMode appMode) {
|
||||||
|
final String listAsString = getModeValue(appMode);
|
||||||
if (listAsString != null) {
|
if (listAsString != null) {
|
||||||
if (listAsString.contains(delimiter)) {
|
if (listAsString.contains(delimiter)) {
|
||||||
return Arrays.asList(listAsString.split(delimiter));
|
return Arrays.asList(listAsString.split(delimiter));
|
||||||
|
@ -1069,13 +1089,17 @@ public class OsmandSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStringsList(List<String> values) {
|
public void setStringsList(List<String> values) {
|
||||||
|
setStringsListForProfile(getApplicationMode(), values);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringsListForProfile(ApplicationMode appMode, List<String> values) {
|
||||||
if (values == null || values.size() == 0) {
|
if (values == null || values.size() == 0) {
|
||||||
set(null);
|
setModeValue(appMode, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clearAll();
|
clearAllForProfile(appMode);
|
||||||
for (String value : values) {
|
for (String value : values) {
|
||||||
addValue(value);
|
addModeValue(appMode, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1261,6 +1285,9 @@ public class OsmandSettings {
|
||||||
|
|
||||||
public final CommonPreference<Boolean> WIKI_ARTICLE_SHOW_IMAGES_ASKED = new BooleanPreference("wikivoyage_show_images_asked", false).makeGlobal();
|
public final CommonPreference<Boolean> WIKI_ARTICLE_SHOW_IMAGES_ASKED = new BooleanPreference("wikivoyage_show_images_asked", false).makeGlobal();
|
||||||
public final CommonPreference<WikiArticleShowImages> WIKI_ARTICLE_SHOW_IMAGES = new EnumIntPreference<>("wikivoyage_show_imgs", WikiArticleShowImages.OFF, WikiArticleShowImages.values()).makeGlobal();
|
public final CommonPreference<WikiArticleShowImages> WIKI_ARTICLE_SHOW_IMAGES = new EnumIntPreference<>("wikivoyage_show_imgs", WikiArticleShowImages.OFF, WikiArticleShowImages.values()).makeGlobal();
|
||||||
|
public final CommonPreference<Boolean> SHOW_WIKIPEDIA_POI = new BooleanPreference("show_wikipedia_poi", false).makeProfile();
|
||||||
|
public final CommonPreference<Boolean> GLOBAL_WIKIPEDIA_POI_ENABLED = new BooleanPreference("global_wikipedia_poi_enabled", false).makeProfile();
|
||||||
|
public final ListStringPreference WIKIPEDIA_POI_ENABLED_LANGUAGES = (ListStringPreference) new ListStringPreference("wikipedia_poi_enabled_languages", null, ",").makeProfile().cache();
|
||||||
|
|
||||||
public final CommonPreference<Boolean> SELECT_MARKER_ON_SINGLE_TAP = new BooleanPreference("select_marker_on_single_tap", false).makeProfile();
|
public final CommonPreference<Boolean> SELECT_MARKER_ON_SINGLE_TAP = new BooleanPreference("select_marker_on_single_tap", false).makeProfile();
|
||||||
public final CommonPreference<Boolean> KEEP_PASSED_MARKERS_ON_MAP = new BooleanPreference("keep_passed_markers_on_map", true).makeProfile();
|
public final CommonPreference<Boolean> KEEP_PASSED_MARKERS_ON_MAP = new BooleanPreference("keep_passed_markers_on_map", true).makeProfile();
|
||||||
|
|
|
@ -65,6 +65,8 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object is responsible to maintain layers using by map activity
|
* Object is responsible to maintain layers using by map activity
|
||||||
*/
|
*/
|
||||||
|
@ -304,9 +306,9 @@ public class MapActivityLayers {
|
||||||
if (filter.isStandardFilter()) {
|
if (filter.isStandardFilter()) {
|
||||||
filter.removeUnsavedFilterByName();
|
filter.removeUnsavedFilterByName();
|
||||||
}
|
}
|
||||||
getApplication().getPoiFilters().addSelectedPoiFilter(filter);
|
poiFilters.addSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
} else {
|
} else {
|
||||||
getApplication().getPoiFilters().removeSelectedPoiFilter(filter);
|
poiFilters.removeSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mapView.refreshMap();
|
mapView.refreshMap();
|
||||||
|
@ -368,8 +370,8 @@ public class MapActivityLayers {
|
||||||
if (pf.isStandardFilter()) {
|
if (pf.isStandardFilter()) {
|
||||||
pf.removeUnsavedFilterByName();
|
pf.removeUnsavedFilterByName();
|
||||||
}
|
}
|
||||||
getApplication().getPoiFilters().clearSelectedPoiFilters();
|
poiFilters.clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
getApplication().getPoiFilters().addSelectedPoiFilter(pf);
|
poiFilters.addSelectedPoiFilter(PoiTemplateList.POI, pf);
|
||||||
mapView.refreshMap();
|
mapView.refreshMap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,8 @@ import java.util.TreeMap;
|
||||||
|
|
||||||
import gnu.trove.set.hash.TLongHashSet;
|
import gnu.trove.set.hash.TLongHashSet;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search poi activity
|
* Search poi activity
|
||||||
*/
|
*/
|
||||||
|
@ -164,7 +166,7 @@ public class SearchPOIActivity extends OsmandListActivity implements OsmAndCompa
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
OsmandSettings settings = app.getSettings();
|
OsmandSettings settings = app.getSettings();
|
||||||
filter.setFilterByName(searchFilter.getText().toString().trim());
|
filter.setFilterByName(searchFilter.getText().toString().trim());
|
||||||
app.getPoiFilters().addSelectedPoiFilter(filter);
|
app.getPoiFilters().addSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(), 15);
|
settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(), 15);
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,10 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
|
||||||
this.compoundButtonColorId = compoundButtonColorId;
|
this.compoundButtonColorId = compoundButtonColorId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompoundButton getCompoundButton() {
|
||||||
|
return compoundButton;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void inflate(Context context, ViewGroup container, boolean nightMode) {
|
public void inflate(Context context, ViewGroup container, boolean nightMode) {
|
||||||
super.inflate(context, container, nightMode);
|
super.inflate(context, container, nightMode);
|
||||||
|
|
|
@ -84,6 +84,7 @@ import net.osmand.plus.views.DownloadedRegionsLayer;
|
||||||
import net.osmand.plus.views.MapInfoLayer;
|
import net.osmand.plus.views.MapInfoLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.mapwidgets.MapWidgetRegistry;
|
import net.osmand.plus.views.mapwidgets.MapWidgetRegistry;
|
||||||
|
import net.osmand.plus.wikipedia.WikipediaPoiMenu;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -174,6 +175,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
MAPILLARY,
|
MAPILLARY,
|
||||||
CONTOUR_LINES,
|
CONTOUR_LINES,
|
||||||
OSM_NOTES,
|
OSM_NOTES,
|
||||||
|
WIKIPEDIA,
|
||||||
TERRAIN
|
TERRAIN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,6 +323,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
tv.setText(R.string.osm_notes);
|
tv.setText(R.string.osm_notes);
|
||||||
} else if (visibleType == DashboardType.TERRAIN) {
|
} else if (visibleType == DashboardType.TERRAIN) {
|
||||||
tv.setText(R.string.shared_string_terrain);
|
tv.setText(R.string.shared_string_terrain);
|
||||||
|
} else if (visibleType == DashboardType.WIKIPEDIA) {
|
||||||
|
tv.setText(R.string.shared_string_wikipedia);
|
||||||
}
|
}
|
||||||
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);
|
||||||
|
@ -676,7 +680,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
&& visibleType != DashboardType.CONFIGURE_MAP
|
&& visibleType != DashboardType.CONFIGURE_MAP
|
||||||
&& visibleType != DashboardType.CONTOUR_LINES
|
&& visibleType != DashboardType.CONTOUR_LINES
|
||||||
&& visibleType != DashboardType.TERRAIN
|
&& visibleType != DashboardType.TERRAIN
|
||||||
&& visibleType != DashboardType.OSM_NOTES) {
|
&& visibleType != DashboardType.OSM_NOTES
|
||||||
|
&& visibleType != DashboardType.WIKIPEDIA) {
|
||||||
listView.setDivider(dividerDrawable);
|
listView.setDivider(dividerDrawable);
|
||||||
listView.setDividerHeight(AndroidUtils.dpToPx(mapActivity, 1f));
|
listView.setDividerHeight(AndroidUtils.dpToPx(mapActivity, 1f));
|
||||||
} else {
|
} else {
|
||||||
|
@ -712,6 +717,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
cm = ContourLinesMenu.createListAdapter(mapActivity);
|
cm = ContourLinesMenu.createListAdapter(mapActivity);
|
||||||
} else if (visibleType == DashboardType.OSM_NOTES) {
|
} else if (visibleType == DashboardType.OSM_NOTES) {
|
||||||
cm = OsmNotesMenu.createListAdapter(mapActivity);
|
cm = OsmNotesMenu.createListAdapter(mapActivity);
|
||||||
|
} else if (visibleType == DashboardType.WIKIPEDIA) {
|
||||||
|
cm = WikipediaPoiMenu.createListAdapter(mapActivity);
|
||||||
}
|
}
|
||||||
if (cm != null) {
|
if (cm != null) {
|
||||||
updateListAdapter(cm);
|
updateListAdapter(cm);
|
||||||
|
@ -730,14 +737,17 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onNewDownloadIndexes() {
|
public void onNewDownloadIndexes() {
|
||||||
if (visibleType == DashboardType.CONTOUR_LINES || visibleType == DashboardType.TERRAIN) {
|
if (visibleType == DashboardType.CONTOUR_LINES
|
||||||
|
|| visibleType == DashboardType.TERRAIN
|
||||||
|
|| visibleType == DashboardType.WIKIPEDIA) {
|
||||||
refreshContent(true);
|
refreshContent(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void onDownloadInProgress() {
|
public void onDownloadInProgress() {
|
||||||
if (visibleType == DashboardType.CONTOUR_LINES || visibleType == DashboardType.TERRAIN) {
|
if (visibleType == DashboardType.CONTOUR_LINES || visibleType == DashboardType.TERRAIN
|
||||||
|
|| visibleType == DashboardType.WIKIPEDIA) {
|
||||||
DownloadIndexesThread downloadThread = getMyApplication().getDownloadThread();
|
DownloadIndexesThread downloadThread = getMyApplication().getDownloadThread();
|
||||||
IndexItem downloadIndexItem = downloadThread.getCurrentDownloadingItem();
|
IndexItem downloadIndexItem = downloadThread.getCurrentDownloadingItem();
|
||||||
if (downloadIndexItem != null) {
|
if (downloadIndexItem != null) {
|
||||||
|
@ -764,6 +774,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
SRTMPlugin.refreshMapComplete(mapActivity);
|
||||||
|
} else if (visibleType == DashboardType.WIKIPEDIA) {
|
||||||
|
refreshContent(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import androidx.appcompat.widget.SwitchCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.CallbackWithObject;
|
||||||
import net.osmand.GPXUtilities;
|
import net.osmand.GPXUtilities;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.core.android.MapRendererContext;
|
import net.osmand.core.android.MapRendererContext;
|
||||||
|
@ -47,6 +48,7 @@ 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.inapp.InAppPurchaseHelper;
|
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||||
|
@ -54,6 +56,7 @@ import net.osmand.plus.render.RendererRegistry;
|
||||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.corenative.NativeCoreContext;
|
import net.osmand.plus.views.corenative.NativeCoreContext;
|
||||||
|
import net.osmand.plus.wikipedia.WikipediaPoiMenu;
|
||||||
import net.osmand.render.RenderingRule;
|
import net.osmand.render.RenderingRule;
|
||||||
import net.osmand.render.RenderingRuleProperty;
|
import net.osmand.render.RenderingRuleProperty;
|
||||||
import net.osmand.render.RenderingRuleStorageProperties;
|
import net.osmand.render.RenderingRuleStorageProperties;
|
||||||
|
@ -98,6 +101,8 @@ import static net.osmand.aidlapi.OsmAndCustomizationConstants.SHOW_CATEGORY_ID;
|
||||||
import static net.osmand.aidlapi.OsmAndCustomizationConstants.TEXT_SIZE_ID;
|
import static net.osmand.aidlapi.OsmAndCustomizationConstants.TEXT_SIZE_ID;
|
||||||
import static net.osmand.aidlapi.OsmAndCustomizationConstants.TRANSPORT_ID;
|
import static net.osmand.aidlapi.OsmAndCustomizationConstants.TRANSPORT_ID;
|
||||||
import static net.osmand.aidlapi.OsmAndCustomizationConstants.TRANSPORT_RENDERING_ID;
|
import static net.osmand.aidlapi.OsmAndCustomizationConstants.TRANSPORT_RENDERING_ID;
|
||||||
|
import static net.osmand.aidlapi.OsmAndCustomizationConstants.WIKIPEDIA_ID;
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_DENSITY_ATTR;
|
import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_DENSITY_ATTR;
|
||||||
import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_LINES_ATTR;
|
import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_LINES_ATTR;
|
||||||
import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_LINES_SCHEME_ATTR;
|
import static net.osmand.plus.srtmplugin.SRTMPlugin.CONTOUR_LINES_SCHEME_ATTR;
|
||||||
|
@ -195,6 +200,10 @@ public class ConfigureMapMenu {
|
||||||
} else if (itemId == R.string.layer_gpx_layer && cm.getItem(pos).getSelected()) {
|
} else if (itemId == R.string.layer_gpx_layer && cm.getItem(pos).getSelected()) {
|
||||||
showGpxSelectionDialog(adapter, adapter.getItem(pos));
|
showGpxSelectionDialog(adapter, adapter.getItem(pos));
|
||||||
return false;
|
return false;
|
||||||
|
} else if (itemId == R.string.shared_string_wikipedia) {
|
||||||
|
ma.getDashboard().setDashboardVisibility(true, DashboardOnMap.DashboardType.WIKIPEDIA,
|
||||||
|
AndroidUtils.getCenterViewCoordinates(view));
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
CompoundButton btn = (CompoundButton) view.findViewById(R.id.toggle_item);
|
CompoundButton btn = (CompoundButton) view.findViewById(R.id.toggle_item);
|
||||||
if (btn != null && btn.getVisibility() == View.VISIBLE) {
|
if (btn != null && btn.getVisibility() == View.VISIBLE) {
|
||||||
|
@ -217,11 +226,12 @@ public class ConfigureMapMenu {
|
||||||
item.setColorRes(isChecked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
item.setColorRes(isChecked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
||||||
}
|
}
|
||||||
if (itemId == R.string.layer_poi) {
|
if (itemId == R.string.layer_poi) {
|
||||||
poiFiltersHelper.clearSelectedPoiFilters();
|
poiFiltersHelper.clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
showPoiFilterDialog(adapter, adapter.getItem(pos));
|
showPoiFilterDialog(adapter, adapter.getItem(pos));
|
||||||
} else {
|
} else {
|
||||||
adapter.getItem(pos).setDescription(poiFiltersHelper.getSelectedPoiFiltersName());
|
adapter.getItem(pos).setDescription(
|
||||||
|
poiFiltersHelper.getSelectedPoiFiltersName(PoiTemplateList.POI));
|
||||||
}
|
}
|
||||||
} else if (itemId == R.string.layer_amenity_label) {
|
} else if (itemId == R.string.layer_amenity_label) {
|
||||||
settings.SHOW_POI_LABEL.set(isChecked);
|
settings.SHOW_POI_LABEL.set(isChecked);
|
||||||
|
@ -235,6 +245,17 @@ public class ConfigureMapMenu {
|
||||||
} else {
|
} else {
|
||||||
showGpxSelectionDialog(adapter, adapter.getItem(pos));
|
showGpxSelectionDialog(adapter, adapter.getItem(pos));
|
||||||
}
|
}
|
||||||
|
} else if (itemId == R.string.shared_string_wikipedia) {
|
||||||
|
WikipediaPoiMenu.toggleWikipediaPoi(ma, isChecked, true,
|
||||||
|
new CallbackWithObject<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public boolean processResult(Boolean result) {
|
||||||
|
item.setSelected(result);
|
||||||
|
item.setColorRes(result ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (itemId == R.string.map_markers) {
|
} else if (itemId == R.string.map_markers) {
|
||||||
settings.SHOW_MAP_MARKERS.set(isChecked);
|
settings.SHOW_MAP_MARKERS.set(isChecked);
|
||||||
} else if (itemId == R.string.layer_map) {
|
} else if (itemId == R.string.layer_map) {
|
||||||
|
@ -278,14 +299,14 @@ public class ConfigureMapMenu {
|
||||||
@Override
|
@Override
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
PoiFiltersHelper pf = ma.getMyApplication().getPoiFilters();
|
PoiFiltersHelper pf = ma.getMyApplication().getPoiFilters();
|
||||||
boolean selected = pf.isShowingAnyPoi();
|
boolean selected = pf.isShowingAnyPoi(PoiTemplateList.POI);
|
||||||
item.setSelected(selected);
|
item.setSelected(selected);
|
||||||
item.setDescription(pf.getSelectedPoiFiltersName());
|
item.setDescription(pf.getSelectedPoiFiltersName(PoiTemplateList.POI));
|
||||||
item.setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
item.setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (poiFiltersHelper.getSelectedPoiFilters().size() > 1) {
|
if (poiFiltersHelper.isShowingAnyPoi(PoiTemplateList.POI)) {
|
||||||
ma.getMapLayers().showMultichoicePoiFilterDialog(ma.getMapView(),
|
ma.getMapLayers().showMultichoicePoiFilterDialog(ma.getMapView(),
|
||||||
dismissListener);
|
dismissListener);
|
||||||
} else {
|
} else {
|
||||||
|
@ -295,7 +316,7 @@ public class ConfigureMapMenu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createLayersItems(List<RenderingRuleProperty> customRules, ContextMenuAdapter adapter,
|
private void createLayersItems(List<RenderingRuleProperty> customRules, ContextMenuAdapter adapter,
|
||||||
final MapActivity activity, final int themeRes, final boolean nightMode) {
|
final MapActivity activity, final int themeRes, final boolean nightMode) {
|
||||||
final OsmandApplication app = activity.getMyApplication();
|
final OsmandApplication app = activity.getMyApplication();
|
||||||
final OsmandSettings settings = app.getSettings();
|
final OsmandSettings settings = app.getSettings();
|
||||||
|
@ -315,12 +336,12 @@ public class ConfigureMapMenu {
|
||||||
.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
||||||
.setIcon(R.drawable.ic_action_fav_dark)
|
.setIcon(R.drawable.ic_action_fav_dark)
|
||||||
.setListener(l).createItem());
|
.setListener(l).createItem());
|
||||||
selected = app.getPoiFilters().isShowingAnyPoi();
|
selected = app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.POI);
|
||||||
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
.setId(POI_OVERLAY_ID)
|
.setId(POI_OVERLAY_ID)
|
||||||
.setTitleId(R.string.layer_poi, activity)
|
.setTitleId(R.string.layer_poi, activity)
|
||||||
.setSelected(selected)
|
.setSelected(selected)
|
||||||
.setDescription(app.getPoiFilters().getSelectedPoiFiltersName())
|
.setDescription(app.getPoiFilters().getSelectedPoiFiltersName(PoiTemplateList.POI))
|
||||||
.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
||||||
.setIcon(R.drawable.ic_action_info_dark)
|
.setIcon(R.drawable.ic_action_info_dark)
|
||||||
.setSecondaryIcon(R.drawable.ic_action_additional_option)
|
.setSecondaryIcon(R.drawable.ic_action_additional_option)
|
||||||
|
@ -526,6 +547,16 @@ public class ConfigureMapMenu {
|
||||||
.setSecondaryIcon(R.drawable.ic_action_additional_option)
|
.setSecondaryIcon(R.drawable.ic_action_additional_option)
|
||||||
.setListener(l).createItem());
|
.setListener(l).createItem());
|
||||||
|
|
||||||
|
selected = app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.WIKI);
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setId(WIKIPEDIA_ID)
|
||||||
|
.setTitleId(R.string.shared_string_wikipedia, activity)
|
||||||
|
.setSelected(selected)
|
||||||
|
.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
|
||||||
|
.setIcon(R.drawable.ic_plugin_wikipedia)
|
||||||
|
.setSecondaryIcon(R.drawable.ic_action_additional_option)
|
||||||
|
.setListener(l).createItem());
|
||||||
|
|
||||||
selected = settings.SHOW_MAP_MARKERS.get();
|
selected = settings.SHOW_MAP_MARKERS.get();
|
||||||
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
.setId(MAP_MARKERS_ID)
|
.setId(MAP_MARKERS_ID)
|
||||||
|
@ -567,7 +598,7 @@ public class ConfigureMapMenu {
|
||||||
final OsmandSettings settings = app.getSettings();
|
final OsmandSettings settings = app.getSettings();
|
||||||
final int selectedProfileColorRes = settings.APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode);
|
final int selectedProfileColorRes = settings.APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode);
|
||||||
final int selectedProfileColor = ContextCompat.getColor(app, selectedProfileColorRes);
|
final int selectedProfileColor = ContextCompat.getColor(app, selectedProfileColorRes);
|
||||||
|
|
||||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity)
|
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity)
|
||||||
.setId(MAP_RENDERING_CATEGORY_ID)
|
.setId(MAP_RENDERING_CATEGORY_ID)
|
||||||
.setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem());
|
.setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem());
|
||||||
|
@ -1151,7 +1182,7 @@ public class ConfigureMapMenu {
|
||||||
final AlertDialog dialog = bld.create();
|
final AlertDialog dialog = bld.create();
|
||||||
|
|
||||||
dialogAdapter.setDialog(dialog);
|
dialogAdapter.setDialog(dialog);
|
||||||
|
|
||||||
if (customRulesIncluded != null) {
|
if (customRulesIncluded != null) {
|
||||||
for (RenderingRuleProperty p : customRulesIncluded) {
|
for (RenderingRuleProperty p : customRulesIncluded) {
|
||||||
if (!p.isBoolean()) {
|
if (!p.isBoolean()) {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package net.osmand.plus.poi;
|
package net.osmand.plus.poi;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import net.osmand.osm.AbstractPoiType;
|
import net.osmand.osm.AbstractPoiType;
|
||||||
|
@ -7,10 +9,12 @@ import net.osmand.osm.MapPoiTypes;
|
||||||
import net.osmand.osm.PoiCategory;
|
import net.osmand.osm.PoiCategory;
|
||||||
import net.osmand.osm.PoiType;
|
import net.osmand.osm.PoiType;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
|
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
|
||||||
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
|
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
|
||||||
import net.osmand.plus.api.SQLiteAPI.SQLiteStatement;
|
import net.osmand.plus.api.SQLiteAPI.SQLiteStatement;
|
||||||
|
import net.osmand.plus.wikipedia.WikipediaPoiMenu;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -22,10 +26,14 @@ import java.util.Iterator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import static net.osmand.osm.MapPoiTypes.WIKI_PLACE;
|
||||||
|
|
||||||
public class PoiFiltersHelper {
|
public class PoiFiltersHelper {
|
||||||
|
|
||||||
private final OsmandApplication application;
|
private final OsmandApplication application;
|
||||||
|
@ -37,8 +45,10 @@ public class PoiFiltersHelper {
|
||||||
private PoiUIFilter customPOIFilter;
|
private PoiUIFilter customPOIFilter;
|
||||||
private PoiUIFilter showAllPOIFilter;
|
private PoiUIFilter showAllPOIFilter;
|
||||||
private PoiUIFilter localWikiPoiFilter;
|
private PoiUIFilter localWikiPoiFilter;
|
||||||
|
private PoiUIFilter globalWikiPoiFilter;
|
||||||
private List<PoiUIFilter> cacheTopStandardFilters;
|
private List<PoiUIFilter> cacheTopStandardFilters;
|
||||||
private Set<PoiUIFilter> selectedPoiFilters = new TreeSet<>();
|
private List<PoiUIFilter> cacheWikipediaFilters;
|
||||||
|
private Map<PoiTemplateList, Set<PoiUIFilter>> selectedPoiFilters = new TreeMap<>();
|
||||||
|
|
||||||
private static final String UDF_CAR_AID = "car_aid";
|
private static final String UDF_CAR_AID = "car_aid";
|
||||||
private static final String UDF_FOR_TOURISTS = "for_tourists";
|
private static final String UDF_FOR_TOURISTS = "for_tourists";
|
||||||
|
@ -55,6 +65,10 @@ public class PoiFiltersHelper {
|
||||||
UDF_CAR_AID, UDF_FOR_TOURISTS, UDF_FOOD_SHOP, UDF_FUEL, UDF_SIGHTSEEING, UDF_EMERGENCY,
|
UDF_CAR_AID, UDF_FOR_TOURISTS, UDF_FOOD_SHOP, UDF_FUEL, UDF_SIGHTSEEING, UDF_EMERGENCY,
|
||||||
UDF_PUBLIC_TRANSPORT, UDF_ACCOMMODATION, UDF_RESTAURANTS, UDF_PARKING
|
UDF_PUBLIC_TRANSPORT, UDF_ACCOMMODATION, UDF_RESTAURANTS, UDF_PARKING
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public enum PoiTemplateList {
|
||||||
|
POI, WIKI
|
||||||
|
}
|
||||||
|
|
||||||
public PoiFiltersHelper(OsmandApplication application) {
|
public PoiFiltersHelper(OsmandApplication application) {
|
||||||
this.application = application;
|
this.application = application;
|
||||||
|
@ -103,7 +117,7 @@ public class PoiFiltersHelper {
|
||||||
|
|
||||||
public PoiUIFilter getLocalWikiPOIFilter() {
|
public PoiUIFilter getLocalWikiPOIFilter() {
|
||||||
if (localWikiPoiFilter == null) {
|
if (localWikiPoiFilter == null) {
|
||||||
PoiType place = application.getPoiTypes().getPoiTypeByKey("wiki_place");
|
PoiType place = application.getPoiTypes().getPoiTypeByKey(WIKI_PLACE);
|
||||||
if (place != null && !Algorithms.isEmpty(application.getLanguage())) {
|
if (place != null && !Algorithms.isEmpty(application.getLanguage())) {
|
||||||
PoiUIFilter filter = new PoiUIFilter(place, application, " " +
|
PoiUIFilter filter = new PoiUIFilter(place, application, " " +
|
||||||
application.getLangTranslation(application.getLanguage()));
|
application.getLangTranslation(application.getLanguage()));
|
||||||
|
@ -115,6 +129,57 @@ public class PoiFiltersHelper {
|
||||||
return localWikiPoiFilter;
|
return localWikiPoiFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PoiUIFilter getGlobalWikiPoiFilter() {
|
||||||
|
if (globalWikiPoiFilter == null) {
|
||||||
|
String wikiFilterId = PoiUIFilter.STD_PREFIX + "osmwiki";
|
||||||
|
for (PoiUIFilter filter : getTopDefinedPoiFilters()) {
|
||||||
|
if (wikiFilterId.equals(filter.getFilterId())) {
|
||||||
|
globalWikiPoiFilter = filter;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return globalWikiPoiFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PoiUIFilter> getLocalWikipediaPoiFilters(boolean onlyActiveLocales) {
|
||||||
|
String wikiLang = "wiki:lang:";
|
||||||
|
if (cacheWikipediaFilters == null) {
|
||||||
|
cacheWikipediaFilters = new ArrayList<>();
|
||||||
|
PoiType place = application.getPoiTypes().getPoiTypeByKey(WIKI_PLACE);
|
||||||
|
if (place != null) {
|
||||||
|
for (String locale : application.getPoiTypes().getAllAvailableWikiLocales()) {
|
||||||
|
PoiUIFilter filter = new PoiUIFilter(place, application, " " +
|
||||||
|
WikipediaPoiMenu.getTranslation(application, locale));
|
||||||
|
filter.setSavedFilterByName(wikiLang + locale);
|
||||||
|
filter.setStandardFilter(true);
|
||||||
|
cacheWikipediaFilters.add(filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (onlyActiveLocales && cacheWikipediaFilters.size() > 0) {
|
||||||
|
List<PoiUIFilter> onlyActiveLocalFilters = new ArrayList<>();
|
||||||
|
Bundle wikiPoiSettings = WikipediaPoiMenu.getWikiPoiSettings(application);
|
||||||
|
if (wikiPoiSettings != null) {
|
||||||
|
List<String> enabledWikipediaPoiLocales =
|
||||||
|
wikiPoiSettings.getStringArrayList(WikipediaPoiMenu.ENABLED_WIKI_POI_LANGUAGES_KEY);
|
||||||
|
if (enabledWikipediaPoiLocales != null) {
|
||||||
|
for (PoiUIFilter filter : cacheWikipediaFilters) {
|
||||||
|
for (String locale : enabledWikipediaPoiLocales) {
|
||||||
|
String filterId = filter.getSavedFilterByName();
|
||||||
|
String filterLocale = filterId.substring(wikiLang.length());
|
||||||
|
if (locale.equalsIgnoreCase(filterLocale)) {
|
||||||
|
onlyActiveLocalFilters.add(filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return onlyActiveLocalFilters;
|
||||||
|
}
|
||||||
|
return cacheWikipediaFilters;
|
||||||
|
}
|
||||||
|
|
||||||
public PoiUIFilter getShowAllPOIFilter() {
|
public PoiUIFilter getShowAllPOIFilter() {
|
||||||
if (showAllPOIFilter == null) {
|
if (showAllPOIFilter == null) {
|
||||||
PoiUIFilter filter = new PoiUIFilter(null, application, "");
|
PoiUIFilter filter = new PoiUIFilter(null, application, "");
|
||||||
|
@ -159,8 +224,13 @@ public class PoiFiltersHelper {
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (PoiUIFilter f : getLocalWikipediaPoiFilters(true)) {
|
||||||
|
if (f.getFilterId().equals(filterId)) {
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
}
|
||||||
PoiUIFilter ff = getFilterById(filterId, getCustomPOIFilter(), getSearchByNamePOIFilter(),
|
PoiUIFilter ff = getFilterById(filterId, getCustomPOIFilter(), getSearchByNamePOIFilter(),
|
||||||
getLocalWikiPOIFilter(), getShowAllPOIFilter(), getNominatimPOIFilter(), getNominatimAddressFilter());
|
getGlobalWikiPoiFilter(), getShowAllPOIFilter(), getNominatimPOIFilter(), getNominatimAddressFilter());
|
||||||
if (ff != null) {
|
if (ff != null) {
|
||||||
return ff;
|
return ff;
|
||||||
}
|
}
|
||||||
|
@ -225,9 +295,6 @@ public class PoiFiltersHelper {
|
||||||
List<PoiUIFilter> top = new ArrayList<>();
|
List<PoiUIFilter> top = new ArrayList<>();
|
||||||
// user defined
|
// user defined
|
||||||
top.addAll(getUserDefinedPoiFilters(true));
|
top.addAll(getUserDefinedPoiFilters(true));
|
||||||
if (getLocalWikiPOIFilter() != null) {
|
|
||||||
top.add(getLocalWikiPOIFilter());
|
|
||||||
}
|
|
||||||
// default
|
// default
|
||||||
MapPoiTypes poiTypes = application.getPoiTypes();
|
MapPoiTypes poiTypes = application.getPoiTypes();
|
||||||
for (AbstractPoiType t : poiTypes.getTopVisibleFilters()) {
|
for (AbstractPoiType t : poiTypes.getTopVisibleFilters()) {
|
||||||
|
@ -258,7 +325,11 @@ public class PoiFiltersHelper {
|
||||||
public List<PoiUIFilter> getSortedPoiFilters(boolean onlyActive) {
|
public List<PoiUIFilter> getSortedPoiFilters(boolean onlyActive) {
|
||||||
initPoiUIFiltersState();
|
initPoiUIFiltersState();
|
||||||
List<PoiUIFilter> allFilters = new ArrayList<>();
|
List<PoiUIFilter> allFilters = new ArrayList<>();
|
||||||
allFilters.addAll(getTopDefinedPoiFilters());
|
for (PoiUIFilter filter : getTopDefinedPoiFilters()) {
|
||||||
|
if (!filter.isWikiFilter()) {
|
||||||
|
allFilters.add(filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
allFilters.addAll(getSearchPoiFilters());
|
allFilters.addAll(getSearchPoiFilters());
|
||||||
Collections.sort(allFilters);
|
Collections.sort(allFilters);
|
||||||
if (onlyActive) {
|
if (onlyActive) {
|
||||||
|
@ -421,28 +492,70 @@ public class PoiFiltersHelper {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public Set<PoiUIFilter> getSelectedPoiFilters() {
|
public Set<PoiUIFilter> getSelectedPoiFilters() {
|
||||||
return selectedPoiFilters;
|
Set<PoiUIFilter> result = new TreeSet<>();
|
||||||
|
for (Set<PoiUIFilter> template : selectedPoiFilters.values()) {
|
||||||
|
if (template != null) {
|
||||||
|
result.addAll(template);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSelectedPoiFilter(PoiUIFilter filter) {
|
@NonNull
|
||||||
selectedPoiFilters.add(filter);
|
public Set<PoiUIFilter> getSelectedPoiFilters(PoiTemplateList type) {
|
||||||
|
Set<PoiUIFilter> result = selectedPoiFilters.get(type);
|
||||||
|
if (result == null) {
|
||||||
|
return new TreeSet<>();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSelectedPoiFilter(PoiTemplateList type, PoiUIFilter filter) {
|
||||||
|
if (!selectedPoiFilters.containsKey(type)) {
|
||||||
|
selectedPoiFilters.put(type, new TreeSet<PoiUIFilter>());
|
||||||
|
}
|
||||||
|
Set<PoiUIFilter> templateFilters = selectedPoiFilters.get(type);
|
||||||
|
if (templateFilters != null) {
|
||||||
|
templateFilters.add(filter);
|
||||||
|
}
|
||||||
saveSelectedPoiFilters();
|
saveSelectedPoiFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeSelectedPoiFilter(PoiUIFilter filter) {
|
public void removeSelectedPoiFilter(PoiTemplateList type, PoiUIFilter filter) {
|
||||||
selectedPoiFilters.remove(filter);
|
if (selectedPoiFilters.containsKey(type)) {
|
||||||
|
Set<PoiUIFilter> templateFilters = selectedPoiFilters.get(type);
|
||||||
|
if (templateFilters != null) {
|
||||||
|
templateFilters.remove(filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
saveSelectedPoiFilters();
|
saveSelectedPoiFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShowingAnyPoi() {
|
public boolean isShowingAnyPoi() {
|
||||||
return !selectedPoiFilters.isEmpty();
|
for (PoiTemplateList type : selectedPoiFilters.keySet()) {
|
||||||
|
if (isShowingAnyPoi(type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isShowingAnyPoi(PoiTemplateList type) {
|
||||||
|
return !getSelectedPoiFilters(type).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearSelectedPoiFilters() {
|
public void clearSelectedPoiFilters() {
|
||||||
selectedPoiFilters.clear();
|
for (PoiTemplateList t : selectedPoiFilters.keySet()) {
|
||||||
saveSelectedPoiFilters();
|
clearSelectedPoiFilters(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearSelectedPoiFilters(PoiTemplateList type) {
|
||||||
|
Set<PoiUIFilter> templateFilters = selectedPoiFilters.get(type);
|
||||||
|
if (templateFilters != null) {
|
||||||
|
templateFilters.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hidePoiFilters() {
|
public void hidePoiFilters() {
|
||||||
|
@ -461,18 +574,23 @@ public class PoiFiltersHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSelectedPoiFiltersName() {
|
public String getSelectedPoiFiltersName(PoiTemplateList type) {
|
||||||
return getFiltersName(selectedPoiFilters);
|
return getFiltersName(getSelectedPoiFilters(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPoiFilterSelected(PoiUIFilter filter) {
|
public boolean isPoiFilterSelected(PoiUIFilter filter) {
|
||||||
return selectedPoiFilters.contains(filter);
|
for (Set<PoiUIFilter> template : selectedPoiFilters.values()) {
|
||||||
|
return template.contains(filter);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPoiFilterSelected(String filterId) {
|
public boolean isPoiFilterSelected(String filterId) {
|
||||||
for (PoiUIFilter filter : selectedPoiFilters) {
|
for (Set<PoiUIFilter> template : selectedPoiFilters.values()) {
|
||||||
if (filter.filterId.equals(filterId)) {
|
for (PoiUIFilter filter : template) {
|
||||||
return true;
|
if (filter.filterId.equals(filterId)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -480,19 +598,29 @@ public class PoiFiltersHelper {
|
||||||
|
|
||||||
public void loadSelectedPoiFilters() {
|
public void loadSelectedPoiFilters() {
|
||||||
selectedPoiFilters.clear();
|
selectedPoiFilters.clear();
|
||||||
Set<String> filters = application.getSettings().getSelectedPoiFilters();
|
OsmandSettings settings = application.getSettings();
|
||||||
|
Set<String> filters = settings.getSelectedPoiFilters();
|
||||||
|
boolean shouldShowWikiPoi = WikipediaPoiMenu.isWikiPoiEnabled(application);
|
||||||
for (String f : filters) {
|
for (String f : filters) {
|
||||||
PoiUIFilter filter = getFilterById(f);
|
PoiUIFilter filter = getFilterById(f);
|
||||||
if (filter != null) {
|
if (filter != null) {
|
||||||
selectedPoiFilters.add(filter);
|
if (filter.isWikiFilter()) {
|
||||||
|
if (shouldShowWikiPoi) {
|
||||||
|
addSelectedPoiFilter(PoiTemplateList.WIKI, filter);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
addSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveSelectedPoiFilters() {
|
private void saveSelectedPoiFilters() {
|
||||||
Set<String> filters = new HashSet<>();
|
Set<String> filters = new HashSet<>();
|
||||||
for (PoiUIFilter f : selectedPoiFilters) {
|
for (Set<PoiUIFilter> template : selectedPoiFilters.values()) {
|
||||||
filters.add(f.filterId);
|
for (PoiUIFilter filter : template) {
|
||||||
|
filters.add(filter.filterId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
application.getSettings().setSelectedPoiFilters(filters);
|
application.getSettings().setSelectedPoiFilters(filters);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,9 @@ import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import static net.osmand.osm.MapPoiTypes.OSM_WIKI_CATEGORY;
|
||||||
|
import static net.osmand.osm.MapPoiTypes.WIKI_PLACE;
|
||||||
|
|
||||||
public class PoiUIFilter implements SearchPoiTypeFilter, Comparable<PoiUIFilter>, CustomSearchPoiFilter {
|
public class PoiUIFilter implements SearchPoiTypeFilter, Comparable<PoiUIFilter>, CustomSearchPoiFilter {
|
||||||
|
|
||||||
public final static String STD_PREFIX = "std_"; //$NON-NLS-1$
|
public final static String STD_PREFIX = "std_"; //$NON-NLS-1$
|
||||||
|
@ -146,6 +149,11 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable<PoiUIFilter>
|
||||||
this.deleted = deleted;
|
this.deleted = deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isWikiFilter() {
|
||||||
|
return filterId.startsWith(STD_PREFIX + WIKI_PLACE)
|
||||||
|
|| filterId.equals(STD_PREFIX + OSM_WIKI_CATEGORY);
|
||||||
|
}
|
||||||
|
|
||||||
public String getFilterByName() {
|
public String getFilterByName() {
|
||||||
return filterByName;
|
return filterByName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
public class ShowHidePoiAction extends QuickAction {
|
public class ShowHidePoiAction extends QuickAction {
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,18 +114,18 @@ public class ShowHidePoiAction extends QuickAction {
|
||||||
PoiFiltersHelper pf = activity.getMyApplication().getPoiFilters();
|
PoiFiltersHelper pf = activity.getMyApplication().getPoiFilters();
|
||||||
List<PoiUIFilter> poiFilters = loadPoiFilters(activity.getMyApplication().getPoiFilters());
|
List<PoiUIFilter> poiFilters = loadPoiFilters(activity.getMyApplication().getPoiFilters());
|
||||||
|
|
||||||
if (!isCurrentFilters(pf.getSelectedPoiFilters(), poiFilters)) {
|
if (!isCurrentFilters(pf.getSelectedPoiFilters(PoiTemplateList.POI), poiFilters)) {
|
||||||
|
|
||||||
pf.clearSelectedPoiFilters();
|
pf.clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
|
|
||||||
for (PoiUIFilter filter : poiFilters) {
|
for (PoiUIFilter filter : poiFilters) {
|
||||||
if (filter.isStandardFilter()) {
|
if (filter.isStandardFilter()) {
|
||||||
filter.removeUnsavedFilterByName();
|
filter.removeUnsavedFilterByName();
|
||||||
}
|
}
|
||||||
pf.addSelectedPoiFilter(filter);
|
pf.addSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else pf.clearSelectedPoiFilters();
|
} else pf.clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
|
|
||||||
activity.getMapLayers().updateLayers(activity.getMapView());
|
activity.getMapLayers().updateLayers(activity.getMapView());
|
||||||
}
|
}
|
||||||
|
@ -133,7 +135,7 @@ public class ShowHidePoiAction extends QuickAction {
|
||||||
PoiFiltersHelper pf = application.getPoiFilters();
|
PoiFiltersHelper pf = application.getPoiFilters();
|
||||||
List<PoiUIFilter> poiFilters = loadPoiFilters(application.getPoiFilters());
|
List<PoiUIFilter> poiFilters = loadPoiFilters(application.getPoiFilters());
|
||||||
|
|
||||||
return isCurrentFilters(pf.getSelectedPoiFilters(), poiFilters);
|
return isCurrentFilters(pf.getSelectedPoiFilters(PoiTemplateList.POI), poiFilters);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isCurrentFilters(Set<PoiUIFilter> currentPoiFilters, List<PoiUIFilter> poiFilters) {
|
private boolean isCurrentFilters(Set<PoiUIFilter> currentPoiFilters, List<PoiUIFilter> poiFilters) {
|
||||||
|
|
|
@ -119,6 +119,8 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
public class MapRouteInfoMenu implements IRouteInformationListener, CardListener, FavoritesListener {
|
public class MapRouteInfoMenu implements IRouteInformationListener, CardListener, FavoritesListener {
|
||||||
|
|
||||||
private static final Log LOG = PlatformUtil.getLog(MapRouteInfoMenu.class);
|
private static final Log LOG = PlatformUtil.getLog(MapRouteInfoMenu.class);
|
||||||
|
@ -1149,7 +1151,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
|
||||||
private void createShowAlongTheRouteItems(MapActivity mapActivity, LinearLayout optionsContainer) {
|
private void createShowAlongTheRouteItems(MapActivity mapActivity, LinearLayout optionsContainer) {
|
||||||
OsmandApplication app = mapActivity.getMyApplication();
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
final ApplicationMode applicationMode = app.getRoutingHelper().getAppMode();
|
final ApplicationMode applicationMode = app.getRoutingHelper().getAppMode();
|
||||||
final Set<PoiUIFilter> poiFilters = app.getPoiFilters().getSelectedPoiFilters();
|
final Set<PoiUIFilter> poiFilters = app.getPoiFilters().getSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
final boolean traffic = app.getSettings().SHOW_TRAFFIC_WARNINGS.getModeValue(applicationMode);
|
final boolean traffic = app.getSettings().SHOW_TRAFFIC_WARNINGS.getModeValue(applicationMode);
|
||||||
final boolean fav = app.getSettings().SHOW_NEARBY_FAVORITES.getModeValue(applicationMode);
|
final boolean fav = app.getSettings().SHOW_NEARBY_FAVORITES.getModeValue(applicationMode);
|
||||||
if (!poiFilters.isEmpty()) {
|
if (!poiFilters.isEmpty()) {
|
||||||
|
@ -1175,7 +1177,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
MapActivity mapActivity = getMapActivity();
|
MapActivity mapActivity = getMapActivity();
|
||||||
if (mapActivity != null) {
|
if (mapActivity != null) {
|
||||||
mapActivity.getMyApplication().getPoiFilters().removeSelectedPoiFilter(poiUIFilter);
|
mapActivity.getMyApplication().getPoiFilters().removeSelectedPoiFilter(PoiTemplateList.POI, poiUIFilter);
|
||||||
mapActivity.getMapView().refreshMap();
|
mapActivity.getMapView().refreshMap();
|
||||||
updateOptionsButtons();
|
updateOptionsButtons();
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,8 @@ import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment implements IRouteInformationListener, IRoutingDataUpdateListener {
|
public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment implements IRouteInformationListener, IRoutingDataUpdateListener {
|
||||||
|
|
||||||
public static final String TAG = "ShowAlongTheRouteBottomSheet";
|
public static final String TAG = "ShowAlongTheRouteBottomSheet";
|
||||||
|
@ -433,7 +435,8 @@ public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment
|
||||||
View v;
|
View v;
|
||||||
if (type == WaypointHelper.POI) {
|
if (type == WaypointHelper.POI) {
|
||||||
v = themedInflater.inflate(R.layout.along_the_route_radius_poi, null);
|
v = themedInflater.inflate(R.layout.along_the_route_radius_poi, null);
|
||||||
String descEx = !app.getPoiFilters().isShowingAnyPoi() ? getString(R.string.poi) : app.getPoiFilters().getSelectedPoiFiltersName();
|
String descEx = !app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.POI) ?
|
||||||
|
getString(R.string.poi) : app.getPoiFilters().getSelectedPoiFiltersName(PoiTemplateList.POI);
|
||||||
((TextView) v.findViewById(R.id.title)).setText(getString(R.string.search_radius_proximity) + ":");
|
((TextView) v.findViewById(R.id.title)).setText(getString(R.string.search_radius_proximity) + ":");
|
||||||
((TextView) v.findViewById(R.id.titleEx)).setText(getString(R.string.shared_string_type) + ":");
|
((TextView) v.findViewById(R.id.titleEx)).setText(getString(R.string.shared_string_type) + ":");
|
||||||
final TextView radiusEx = (TextView) v.findViewById(R.id.descriptionEx);
|
final TextView radiusEx = (TextView) v.findViewById(R.id.descriptionEx);
|
||||||
|
@ -483,7 +486,7 @@ public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment
|
||||||
new MapActivityLayers.DismissListener() {
|
new MapActivityLayers.DismissListener() {
|
||||||
@Override
|
@Override
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
if (app.getPoiFilters().isShowingAnyPoi()) {
|
if (app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.POI)) {
|
||||||
enableType(type, enable);
|
enableType(type, enable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,6 +107,7 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
import static net.osmand.plus.search.SendSearchQueryBottomSheet.MISSING_SEARCH_LOCATION_KEY;
|
import static net.osmand.plus.search.SendSearchQueryBottomSheet.MISSING_SEARCH_LOCATION_KEY;
|
||||||
import static net.osmand.plus.search.SendSearchQueryBottomSheet.MISSING_SEARCH_QUERY_KEY;
|
import static net.osmand.plus.search.SendSearchQueryBottomSheet.MISSING_SEARCH_QUERY_KEY;
|
||||||
import static net.osmand.search.core.ObjectType.POI_TYPE;
|
import static net.osmand.search.core.ObjectType.POI_TYPE;
|
||||||
|
@ -383,8 +384,8 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
} else {
|
} else {
|
||||||
filter = (PoiUIFilter) searchPhrase.getLastSelectedWord().getResult().object;
|
filter = (PoiUIFilter) searchPhrase.getLastSelectedWord().getResult().object;
|
||||||
}
|
}
|
||||||
app.getPoiFilters().clearSelectedPoiFilters();
|
app.getPoiFilters().clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
app.getPoiFilters().addSelectedPoiFilter(filter);
|
app.getPoiFilters().addSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
|
|
||||||
mapActivity.getContextMenu().closeActiveToolbar();
|
mapActivity.getContextMenu().closeActiveToolbar();
|
||||||
showToolbar();
|
showToolbar();
|
||||||
|
@ -861,7 +862,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
||||||
}
|
}
|
||||||
|
|
||||||
public void closeSearch() {
|
public void closeSearch() {
|
||||||
app.getPoiFilters().clearSelectedPoiFilters();
|
app.getPoiFilters().clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,8 @@ import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
public class QuickSearchHelper implements ResourceListener {
|
public class QuickSearchHelper implements ResourceListener {
|
||||||
|
|
||||||
public static final int SEARCH_FAVORITE_API_PRIORITY = 50;
|
public static final int SEARCH_FAVORITE_API_PRIORITY = 50;
|
||||||
|
@ -502,8 +504,8 @@ public class QuickSearchHelper implements ResourceListener {
|
||||||
});
|
});
|
||||||
controller.setTitle(filter.getName());
|
controller.setTitle(filter.getName());
|
||||||
PoiFiltersHelper helper = mapActivity.getMyApplication().getPoiFilters();
|
PoiFiltersHelper helper = mapActivity.getMyApplication().getPoiFilters();
|
||||||
helper.clearSelectedPoiFilters();
|
helper.clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
helper.addSelectedPoiFilter(filter);
|
helper.addSelectedPoiFilter(PoiTemplateList.POI, filter);
|
||||||
mapActivity.showTopToolbar(controller);
|
mapActivity.showTopToolbar(controller);
|
||||||
mapActivity.refreshMap();
|
mapActivity.refreshMap();
|
||||||
}
|
}
|
||||||
|
@ -512,7 +514,7 @@ public class QuickSearchHelper implements ResourceListener {
|
||||||
@NonNull TopToolbarController controller,
|
@NonNull TopToolbarController controller,
|
||||||
@Nullable Runnable action) {
|
@Nullable Runnable action) {
|
||||||
mapActivity.hideTopToolbar(controller);
|
mapActivity.hideTopToolbar(controller);
|
||||||
mapActivity.getMyApplication().getPoiFilters().clearSelectedPoiFilters();
|
mapActivity.getMyApplication().getPoiFilters().clearSelectedPoiFilters(PoiTemplateList.POI);
|
||||||
mapActivity.refreshMap();
|
mapActivity.refreshMap();
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
action.run();
|
action.run();
|
||||||
|
|
|
@ -0,0 +1,250 @@
|
||||||
|
package net.osmand.plus.wikipedia;
|
||||||
|
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.CallbackWithObject;
|
||||||
|
import net.osmand.plus.ApplicationMode;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.UiUtilities;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.plus.wikipedia.WikipediaPoiMenu.ENABLED_WIKI_POI_LANGUAGES_KEY;
|
||||||
|
import static net.osmand.plus.wikipedia.WikipediaPoiMenu.GLOBAL_WIKI_POI_ENABLED_KEY;
|
||||||
|
|
||||||
|
public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
|
public static final String TAG = SelectWikiLanguagesBottomSheet.class.getSimpleName();
|
||||||
|
|
||||||
|
private OsmandApplication app;
|
||||||
|
private ApplicationMode appMode;
|
||||||
|
private OsmandSettings settings;
|
||||||
|
|
||||||
|
private List<BottomSheetItemWithCompoundButton> languageItems;
|
||||||
|
|
||||||
|
private ArrayList<WikiLanguageItem> languages;
|
||||||
|
private CallbackWithObject<Boolean> languageChangedCallback;
|
||||||
|
private boolean isGlobalWikiPoiEnabled = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
app = requiredMyApplication();
|
||||||
|
settings = app.getSettings();
|
||||||
|
initLanguagesData();
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
setLanguageListEnable(!isGlobalWikiPoiEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
boolean nightMode = isNightMode(app);
|
||||||
|
final int activeColorResId = AndroidUtils.resolveAttribute(app, R.attr.active_color_basic);
|
||||||
|
final int profileColorResId = appMode.getIconColorInfo().getColor(nightMode);
|
||||||
|
|
||||||
|
final int paddingSmall = app.getResources().getDimensionPixelSize(R.dimen.content_padding_small);
|
||||||
|
final int paddingHalf = app.getResources().getDimensionPixelSize(R.dimen.content_padding_half);
|
||||||
|
|
||||||
|
items.add(new TitleItem(getString(R.string.shared_string_languages)));
|
||||||
|
items.add(new LongDescriptionItem(getString(R.string.wikipedia_poi_languages_promo)));
|
||||||
|
items.add(new DividerSpaceItem(app, paddingSmall));
|
||||||
|
|
||||||
|
final BottomSheetItemWithCompoundButton[] btnSelectAll = new BottomSheetItemWithCompoundButton[1];
|
||||||
|
btnSelectAll[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
|
||||||
|
.setChecked(this.isGlobalWikiPoiEnabled)
|
||||||
|
.setCompoundButtonColorId(profileColorResId)
|
||||||
|
.setTitle(getString(R.string.shared_string_all_languages))
|
||||||
|
.setTitleColorId(activeColorResId)
|
||||||
|
.setCustomView(getCustomButtonView())
|
||||||
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
isGlobalWikiPoiEnabled = !isGlobalWikiPoiEnabled;
|
||||||
|
btnSelectAll[0].setChecked(isGlobalWikiPoiEnabled);
|
||||||
|
setLanguageListEnable(!isGlobalWikiPoiEnabled);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
items.add(btnSelectAll[0]);
|
||||||
|
items.add(new DividerSpaceItem(app, paddingHalf));
|
||||||
|
|
||||||
|
languageItems = new ArrayList<>();
|
||||||
|
for (final WikiLanguageItem language : languages) {
|
||||||
|
final BottomSheetItemWithCompoundButton[] languageItem = new BottomSheetItemWithCompoundButton[1];
|
||||||
|
languageItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
|
||||||
|
.setChecked(language.isChecked())
|
||||||
|
.setTitle(language.getTitle())
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_title_with_checkbox)
|
||||||
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
boolean newValue = !languageItem[0].isChecked();
|
||||||
|
languageItem[0].setChecked(newValue);
|
||||||
|
language.setChecked(newValue);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
languageItems.add(languageItem[0]);
|
||||||
|
}
|
||||||
|
items.addAll(languageItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initLanguagesData() {
|
||||||
|
languages = new ArrayList<>();
|
||||||
|
|
||||||
|
Bundle wikiPoiSettings = WikipediaPoiMenu.getWikiPoiSettings(app);
|
||||||
|
List<String> enabledWikiPoiLocales = null;
|
||||||
|
if (wikiPoiSettings != null) {
|
||||||
|
isGlobalWikiPoiEnabled = wikiPoiSettings.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY);
|
||||||
|
enabledWikiPoiLocales = wikiPoiSettings.getStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY);
|
||||||
|
}
|
||||||
|
if (enabledWikiPoiLocales != null) {
|
||||||
|
for (String locale : app.getPoiTypes().getAllAvailableWikiLocales()) {
|
||||||
|
boolean checked = enabledWikiPoiLocales.contains(locale);
|
||||||
|
languages.add(new WikiLanguageItem(locale, WikipediaPoiMenu.getTranslation(app, locale), checked));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (String locale : app.getPoiTypes().getAllAvailableWikiLocales()) {
|
||||||
|
languages.add(new WikiLanguageItem(locale, WikipediaPoiMenu.getTranslation(app, locale), false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(languages);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setLanguageListEnable(boolean enable) {
|
||||||
|
int textColorPrimaryId = nightMode ? R.color.text_color_primary_dark : R.color.text_color_primary_light;
|
||||||
|
int disableColorId = nightMode ? R.color.active_buttons_and_links_text_disabled_dark : R.color.active_buttons_and_links_text_disabled_light;
|
||||||
|
int profileColorId = appMode.getIconColorInfo().getColor(nightMode);
|
||||||
|
for (BottomSheetItemWithCompoundButton item : languageItems) {
|
||||||
|
item.getView().setEnabled(enable);
|
||||||
|
item.setTitleColorId(enable ? textColorPrimaryId : disableColorId);
|
||||||
|
CompoundButton cb = item.getCompoundButton();
|
||||||
|
if (cb != null) {
|
||||||
|
cb.setEnabled(enable);
|
||||||
|
UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(app, enable ? profileColorId : disableColorId), cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getRightBottomButtonTextId() {
|
||||||
|
return R.string.shared_string_apply;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRightBottomButtonClick() {
|
||||||
|
super.onRightBottomButtonClick();
|
||||||
|
List<String> localesForSaving = new ArrayList<>();
|
||||||
|
for (WikiLanguageItem language : languages) {
|
||||||
|
if (language.isChecked()) {
|
||||||
|
localesForSaving.add(language.getLocale());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
settings.WIKIPEDIA_POI_ENABLED_LANGUAGES.setStringsListForProfile(appMode, localesForSaving);
|
||||||
|
settings.GLOBAL_WIKIPEDIA_POI_ENABLED.setModeValue(appMode, isGlobalWikiPoiEnabled);
|
||||||
|
if (languageChangedCallback != null) {
|
||||||
|
languageChangedCallback.processResult(true);
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
private View getCustomButtonView() {
|
||||||
|
OsmandApplication app = getMyApplication();
|
||||||
|
if (app == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
View buttonView = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.bottom_sheet_item_title_with_swith_56dp, null);
|
||||||
|
CompoundButton cb = buttonView.findViewById(R.id.compound_button);
|
||||||
|
|
||||||
|
int color = AndroidUtils.getColorFromAttr(app, R.attr.divider_color_basic);
|
||||||
|
int bgColor = UiUtilities.getColorWithAlpha(color, 0.5f);
|
||||||
|
|
||||||
|
int bgResId = R.drawable.rectangle_rounded_right;
|
||||||
|
Drawable bgDrawable = app.getUIUtilities().getPaintedIcon(bgResId, bgColor);
|
||||||
|
AndroidUtils.setBackground(buttonView, bgDrawable);
|
||||||
|
|
||||||
|
int selectedModeColorId = appMode.getIconColorInfo().getColor(nightMode);
|
||||||
|
UiUtilities.setupCompoundButton(nightMode, selectedModeColorId, cb);
|
||||||
|
|
||||||
|
return buttonView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppMode(ApplicationMode appMode) {
|
||||||
|
this.appMode = appMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLanguageChangedCallback(CallbackWithObject<Boolean> languageChangedCallback) {
|
||||||
|
this.languageChangedCallback = languageChangedCallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class WikiLanguageItem implements Comparable<WikiLanguageItem> {
|
||||||
|
private String locale;
|
||||||
|
private String title;
|
||||||
|
private boolean checked;
|
||||||
|
|
||||||
|
public WikiLanguageItem(String locale, String title, boolean checked) {
|
||||||
|
this.locale = locale;
|
||||||
|
this.title = title;
|
||||||
|
this.checked = checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLocale() {
|
||||||
|
return locale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isChecked() {
|
||||||
|
return checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChecked(boolean checked) {
|
||||||
|
this.checked = checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(WikiLanguageItem other) {
|
||||||
|
return this.title.compareToIgnoreCase(other.title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showInstance(@NonNull MapActivity mapActivity,
|
||||||
|
@NonNull ApplicationMode appMode,
|
||||||
|
boolean usedOnMap,
|
||||||
|
CallbackWithObject<Boolean> callback) {
|
||||||
|
SelectWikiLanguagesBottomSheet fragment = new SelectWikiLanguagesBottomSheet();
|
||||||
|
fragment.setAppMode(appMode);
|
||||||
|
fragment.setUsedOnMap(usedOnMap);
|
||||||
|
fragment.setLanguageChangedCallback(callback);
|
||||||
|
fragment.show(mapActivity.getSupportFragmentManager(), SelectWikiLanguagesBottomSheet.TAG);
|
||||||
|
}
|
||||||
|
}
|
382
OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java
Normal file
382
OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java
Normal file
|
@ -0,0 +1,382 @@
|
||||||
|
package net.osmand.plus.wikipedia;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import net.osmand.CallbackWithObject;
|
||||||
|
import net.osmand.plus.ApplicationMode;
|
||||||
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
|
import net.osmand.plus.ContextMenuItem;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.download.DownloadActivityType;
|
||||||
|
import net.osmand.plus.download.DownloadIndexesThread;
|
||||||
|
import net.osmand.plus.download.DownloadResources;
|
||||||
|
import net.osmand.plus.download.DownloadValidationManager;
|
||||||
|
import net.osmand.plus.download.IndexItem;
|
||||||
|
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||||
|
import net.osmand.plus.poi.PoiUIFilter;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.osm.MapPoiTypes.WIKI_LANG;
|
||||||
|
import static net.osmand.plus.poi.PoiFiltersHelper.PoiTemplateList;
|
||||||
|
|
||||||
|
public class WikipediaPoiMenu {
|
||||||
|
|
||||||
|
public static final String GLOBAL_WIKI_POI_ENABLED_KEY = "global_wikipedia_poi_enabled_key";
|
||||||
|
public static final String ENABLED_WIKI_POI_LANGUAGES_KEY = "enabled_wikipedia_poi_languages_key";
|
||||||
|
|
||||||
|
private MapActivity mapActivity;
|
||||||
|
private OsmandApplication app;
|
||||||
|
private OsmandSettings settings;
|
||||||
|
private ApplicationMode appMode;
|
||||||
|
private boolean nightMode;
|
||||||
|
|
||||||
|
public WikipediaPoiMenu(MapActivity mapActivity) {
|
||||||
|
this.mapActivity = mapActivity;
|
||||||
|
this.app = mapActivity.getMyApplication();
|
||||||
|
this.settings = app.getSettings();
|
||||||
|
this.appMode = settings.getApplicationMode();
|
||||||
|
this.nightMode = app.getDaynightHelper().isNightModeForMapControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContextMenuAdapter createLayersItems() {
|
||||||
|
final int toggleActionStringId = R.string.shared_string_wikipedia;
|
||||||
|
final int languageActionStringId = R.string.shared_string_language;
|
||||||
|
final int spaceHeight = app.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_big_item_height);
|
||||||
|
final boolean enabled = app.getPoiFilters().isShowingAnyPoi(PoiTemplateList.WIKI);
|
||||||
|
ContextMenuAdapter adapter = new ContextMenuAdapter();
|
||||||
|
adapter.setDefaultLayoutId(R.layout.dash_item_with_description_72dp);
|
||||||
|
adapter.setProfileDependent(true);
|
||||||
|
adapter.setNightMode(nightMode);
|
||||||
|
|
||||||
|
final CallbackWithObject<Boolean> callback = new CallbackWithObject<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public boolean processResult(Boolean result) {
|
||||||
|
mapActivity.getDashboard().refreshContent(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ContextMenuAdapter.OnRowItemClick l = new ContextMenuAdapter.OnRowItemClick() {
|
||||||
|
@Override
|
||||||
|
public boolean onContextMenuClick(final ArrayAdapter<ContextMenuItem> adapter,
|
||||||
|
final int itemId, final int position, final boolean isChecked, int[] viewCoordinates) {
|
||||||
|
if (itemId == toggleActionStringId) {
|
||||||
|
app.runInUIThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
toggleWikipediaPoi(mapActivity, !enabled, true, callback);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (itemId == languageActionStringId) {
|
||||||
|
showLanguagesDialog(mapActivity, appMode, true, true, callback);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int toggleIconId = R.drawable.ic_plugin_wikipedia;
|
||||||
|
int toggleIconColorId;
|
||||||
|
if (enabled) {
|
||||||
|
toggleIconColorId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
|
||||||
|
} else {
|
||||||
|
toggleIconColorId = ContextMenuItem.INVALID_ID;
|
||||||
|
}
|
||||||
|
String summary = mapActivity.getString(enabled ? R.string.shared_string_enabled : R.string.shared_string_disabled);
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(toggleActionStringId, mapActivity)
|
||||||
|
.setDescription(summary)
|
||||||
|
.setIcon(toggleIconId)
|
||||||
|
.setColor(toggleIconColorId)
|
||||||
|
.setListener(l)
|
||||||
|
.setSelected(enabled).createItem());
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setLayout(R.layout.list_item_divider)
|
||||||
|
.createItem());
|
||||||
|
|
||||||
|
summary = getLanguagesSummary(app);
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(languageActionStringId, mapActivity)
|
||||||
|
.setIcon(R.drawable.ic_action_map_language)
|
||||||
|
.setDescription(summary)
|
||||||
|
.hideCompoundButton(true)
|
||||||
|
.setListener(l)
|
||||||
|
.createItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
final DownloadIndexesThread downloadThread = app.getDownloadThread();
|
||||||
|
if (!downloadThread.getIndexes().isDownloadedFromInternet) {
|
||||||
|
if (settings.isInternetConnectionAvailable()) {
|
||||||
|
downloadThread.runReloadIndexFiles();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final boolean downloadIndexes = settings.isInternetConnectionAvailable()
|
||||||
|
&& !downloadThread.getIndexes().isDownloadedFromInternet
|
||||||
|
&& !downloadThread.getIndexes().downloadFromInternetFailed;
|
||||||
|
|
||||||
|
if (downloadIndexes) {
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(R.string.shared_string_download_map, mapActivity)
|
||||||
|
.setDescription(app.getString(R.string.wiki_menu_download_descr))
|
||||||
|
.setCategory(true)
|
||||||
|
.setLayout(R.layout.list_group_title_with_descr).createItem());
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setLayout(R.layout.list_item_icon_and_download)
|
||||||
|
.setTitleId(R.string.downloading_list_indexes, mapActivity)
|
||||||
|
.hideDivider(true)
|
||||||
|
.setLoading(true)
|
||||||
|
.setListener(l).createItem());
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setLayout(R.layout.card_bottom_divider)
|
||||||
|
.setMinHeight(spaceHeight)
|
||||||
|
.createItem());
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
IndexItem currentDownloadingItem = downloadThread.getCurrentDownloadingItem();
|
||||||
|
int currentDownloadingProgress = downloadThread.getCurrentDownloadingItemProgress();
|
||||||
|
List<IndexItem> wikiIndexes = DownloadResources.findIndexItemsAt(
|
||||||
|
app, mapActivity.getMapLocation(), DownloadActivityType.WIKIPEDIA_FILE);
|
||||||
|
if (wikiIndexes.size() > 0) {
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setTitleId(R.string.shared_string_download_map, mapActivity)
|
||||||
|
.setDescription(app.getString(R.string.wiki_menu_download_descr))
|
||||||
|
.setCategory(true)
|
||||||
|
.setLayout(R.layout.list_group_title_with_descr).createItem());
|
||||||
|
for (int i = 0; i < wikiIndexes.size(); i++) {
|
||||||
|
final IndexItem indexItem = wikiIndexes.get(i);
|
||||||
|
boolean isLastItem = i == wikiIndexes.size() - 1;
|
||||||
|
ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder()
|
||||||
|
.setLayout(R.layout.list_item_icon_and_download)
|
||||||
|
.setTitle(indexItem.getVisibleName(app, app.getRegions(), false))
|
||||||
|
.setDescription(DownloadActivityType.WIKIPEDIA_FILE.getString(app) + " • " + indexItem.getSizeDescription(app))
|
||||||
|
.setIcon(DownloadActivityType.WIKIPEDIA_FILE.getIconResource())
|
||||||
|
.hideDivider(isLastItem)
|
||||||
|
.setListener(new ContextMenuAdapter.ItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int position, boolean isChecked, int[] viewCoordinates) {
|
||||||
|
ContextMenuItem item = adapter.getItem(position);
|
||||||
|
if (downloadThread.isDownloading(indexItem)) {
|
||||||
|
downloadThread.cancelDownload(indexItem);
|
||||||
|
if (item != null) {
|
||||||
|
item.setProgress(ContextMenuItem.INVALID_ID);
|
||||||
|
item.setLoading(false);
|
||||||
|
item.setSecondaryIcon(R.drawable.ic_action_import);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
new DownloadValidationManager(app).startDownload(mapActivity, indexItem);
|
||||||
|
if (item != null) {
|
||||||
|
item.setProgress(ContextMenuItem.INVALID_ID);
|
||||||
|
item.setLoading(true);
|
||||||
|
item.setSecondaryIcon(R.drawable.ic_action_remove_dark);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setProgressListener(new ContextMenuAdapter.ProgressListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onProgressChanged(Object progressObject, int progress,
|
||||||
|
ArrayAdapter<ContextMenuItem> adapter,
|
||||||
|
int itemId, int position) {
|
||||||
|
if (progressObject != null && progressObject instanceof IndexItem) {
|
||||||
|
IndexItem progressItem = (IndexItem) progressObject;
|
||||||
|
if (indexItem.compareTo(progressItem) == 0) {
|
||||||
|
ContextMenuItem item = adapter.getItem(position);
|
||||||
|
if (item != null) {
|
||||||
|
item.setProgress(progress);
|
||||||
|
item.setLoading(true);
|
||||||
|
item.setSecondaryIcon(R.drawable.ic_action_remove_dark);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (indexItem == currentDownloadingItem) {
|
||||||
|
itemBuilder.setLoading(true)
|
||||||
|
.setProgress(currentDownloadingProgress)
|
||||||
|
.setSecondaryIcon(R.drawable.ic_action_remove_dark);
|
||||||
|
} else {
|
||||||
|
itemBuilder.setSecondaryIcon(R.drawable.ic_action_import);
|
||||||
|
}
|
||||||
|
adapter.addItem(itemBuilder.createItem());
|
||||||
|
}
|
||||||
|
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||||
|
.setLayout(R.layout.card_bottom_divider)
|
||||||
|
.setMinHeight(spaceHeight)
|
||||||
|
.createItem());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return adapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void showLanguagesDialog(@NonNull final MapActivity mapActivity,
|
||||||
|
@NonNull final ApplicationMode appMode,
|
||||||
|
final boolean usedOnMap,
|
||||||
|
final boolean refresh,
|
||||||
|
final CallbackWithObject<Boolean> callback) {
|
||||||
|
final OsmandApplication app = mapActivity.getMyApplication();
|
||||||
|
SelectWikiLanguagesBottomSheet.showInstance(mapActivity, appMode, usedOnMap,
|
||||||
|
new CallbackWithObject<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public boolean processResult(Boolean result) {
|
||||||
|
if (result) {
|
||||||
|
Bundle wikiPoiSetting = getWikiPoiSettingsForProfile(app, appMode);
|
||||||
|
if (wikiPoiSetting != null) {
|
||||||
|
boolean globalWikiEnabled =
|
||||||
|
wikiPoiSetting.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY);
|
||||||
|
if (refresh) {
|
||||||
|
refreshWikiPoi(mapActivity, globalWikiEnabled);
|
||||||
|
} else {
|
||||||
|
toggleWikipediaPoi(mapActivity, true, usedOnMap, callback);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toggleWikipediaPoi(mapActivity, false, usedOnMap, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getTranslation(OsmandApplication app, String locale) {
|
||||||
|
String translation = app.getLangTranslation(locale);
|
||||||
|
if (translation.equalsIgnoreCase(locale)) {
|
||||||
|
translation = getTranslationFromPhrases(app, locale);
|
||||||
|
}
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getTranslationFromPhrases(OsmandApplication app, String locale) {
|
||||||
|
String keyName = WIKI_LANG + "_" + locale;
|
||||||
|
try {
|
||||||
|
Field f = R.string.class.getField("poi_" + keyName);
|
||||||
|
Integer in = (Integer) f.get(null);
|
||||||
|
return app.getString(in);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
return locale;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bundle getWikiPoiSettings(OsmandApplication app) {
|
||||||
|
Bundle wikiSettings = getWikiPoiSettingsForProfile(app, app.getSettings().getApplicationMode());
|
||||||
|
if (wikiSettings == null) {
|
||||||
|
wikiSettings = getWikiPoiSettingsForProfile(app, app.getSettings().DEFAULT_APPLICATION_MODE.get());
|
||||||
|
}
|
||||||
|
return wikiSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Bundle getWikiPoiSettingsForProfile(OsmandApplication app, ApplicationMode appMode) {
|
||||||
|
OsmandSettings settings = app.getSettings();
|
||||||
|
boolean globalWikiPoiEnabled = settings.GLOBAL_WIKIPEDIA_POI_ENABLED.getModeValue(appMode);
|
||||||
|
List<String> enabledWikiPoiLanguages = settings.WIKIPEDIA_POI_ENABLED_LANGUAGES.getStringsListForProfile(appMode);
|
||||||
|
if (!globalWikiPoiEnabled && Algorithms.isEmpty(enabledWikiPoiLanguages)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putBoolean(GLOBAL_WIKI_POI_ENABLED_KEY, globalWikiPoiEnabled);
|
||||||
|
if (enabledWikiPoiLanguages != null) {
|
||||||
|
bundle.putStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY,
|
||||||
|
new ArrayList<>(enabledWikiPoiLanguages));
|
||||||
|
}
|
||||||
|
return bundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void toggleWikipediaPoi(final MapActivity mapActivity, boolean enable,
|
||||||
|
boolean usedOnMap, CallbackWithObject<Boolean> callback) {
|
||||||
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
|
OsmandSettings settings = app.getSettings();
|
||||||
|
if (enable) {
|
||||||
|
Bundle wikiPoiSettings = getWikiPoiSettings(app);
|
||||||
|
if (wikiPoiSettings != null) {
|
||||||
|
settings.SHOW_WIKIPEDIA_POI.set(true);
|
||||||
|
boolean globalWikiEnabled = wikiPoiSettings.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY);
|
||||||
|
showWikiOnMap(app, globalWikiEnabled);
|
||||||
|
} else {
|
||||||
|
ApplicationMode appMode = settings.getApplicationMode();
|
||||||
|
showLanguagesDialog(mapActivity, appMode, usedOnMap, false, callback);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
settings.SHOW_WIKIPEDIA_POI.set(false);
|
||||||
|
hideWikiFromMap(app);
|
||||||
|
}
|
||||||
|
if (callback != null) {
|
||||||
|
callback.processResult(settings.SHOW_WIKIPEDIA_POI.get());
|
||||||
|
}
|
||||||
|
mapActivity.refreshMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void refreshWikiPoi(MapActivity mapActivity, boolean globalWikiEnabled) {
|
||||||
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
|
hideWikiFromMap(app);
|
||||||
|
showWikiOnMap(app, globalWikiEnabled);
|
||||||
|
mapActivity.getDashboard().refreshContent(true);
|
||||||
|
mapActivity.refreshMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void showWikiOnMap(OsmandApplication app, boolean globalWikiEnabled) {
|
||||||
|
PoiFiltersHelper ph = app.getPoiFilters();
|
||||||
|
if (globalWikiEnabled) {
|
||||||
|
ph.addSelectedPoiFilter(PoiTemplateList.WIKI, ph.getGlobalWikiPoiFilter());
|
||||||
|
} else {
|
||||||
|
List<PoiUIFilter> filters = ph.getLocalWikipediaPoiFilters(true);
|
||||||
|
for (PoiUIFilter filter : filters) {
|
||||||
|
ph.addSelectedPoiFilter(PoiTemplateList.WIKI, filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void hideWikiFromMap(OsmandApplication app) {
|
||||||
|
PoiFiltersHelper ph = app.getPoiFilters();
|
||||||
|
for (PoiUIFilter filter : ph.getSelectedPoiFilters(PoiTemplateList.WIKI)) {
|
||||||
|
ph.removePoiFilter(filter);
|
||||||
|
}
|
||||||
|
ph.clearSelectedPoiFilters(PoiTemplateList.WIKI);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getLanguagesSummary(OsmandApplication app) {
|
||||||
|
Bundle wikiLanguagesSetting = getWikiPoiSettings(app);
|
||||||
|
if (wikiLanguagesSetting != null) {
|
||||||
|
boolean globalWikiEnabled = wikiLanguagesSetting.getBoolean(GLOBAL_WIKI_POI_ENABLED_KEY);
|
||||||
|
List<String> enabledLocales = wikiLanguagesSetting.getStringArrayList(ENABLED_WIKI_POI_LANGUAGES_KEY);
|
||||||
|
if (globalWikiEnabled) {
|
||||||
|
return app.getString(R.string.shared_string_all_languages);
|
||||||
|
} else if (enabledLocales != null) {
|
||||||
|
List<String> translations = new ArrayList<>();
|
||||||
|
for (String locale : enabledLocales) {
|
||||||
|
translations.add(getTranslation(app, locale));
|
||||||
|
}
|
||||||
|
return android.text.TextUtils.join(", ", translations);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isWikiPoiEnabled(OsmandApplication app) {
|
||||||
|
return app.getSettings().SHOW_WIKIPEDIA_POI.get() && getWikiPoiSettings(app) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ContextMenuAdapter createListAdapter(final MapActivity mapActivity) {
|
||||||
|
return new WikipediaPoiMenu(mapActivity).createLayersItems();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue