diff --git a/OsmAnd/res/layout/map_marker_item_categories.xml b/OsmAnd/res/layout/map_marker_item_categories.xml new file mode 100644 index 0000000000..09d317a74b --- /dev/null +++ b/OsmAnd/res/layout/map_marker_item_categories.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java b/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java index c37de47294..e1c25ddb27 100644 --- a/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java +++ b/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java @@ -462,13 +462,20 @@ public class MapMarkersHelper { private void createHeaderInGroup(@NonNull MapMarkersGroup group) { GroupHeader header = new GroupHeader(); + CategoriesHeader categoriesHeader = new CategoriesHeader(); + WikivoyageArticleHeader wikivoyageArticleHeader = new WikivoyageArticleHeader(); int type = group.getType(); if (type != -1) { header.iconRes = type == MapMarkersGroup.FAVORITES_TYPE ? R.drawable.ic_action_fav_dark : R.drawable.ic_action_polygom_dark; + categoriesHeader.iconRes = R.drawable.ic_action_filter; } header.group = group; + categoriesHeader.group = group; + wikivoyageArticleHeader.group = group; group.header = header; + group.categoriesHeader = categoriesHeader; + group.wikivoyageArticleHeader = wikivoyageArticleHeader; } private void removeMarkerFromGroup(MapMarker marker) { @@ -1216,6 +1223,8 @@ public class MapMarkersHelper { private List markers = new ArrayList<>(); // TODO should be removed from this class: private GroupHeader header; + private CategoriesHeader categoriesHeader; + private WikivoyageArticleHeader wikivoyageArticleHeader; private ShowHideHistoryButton showHideHistoryButton; public MapMarkersGroup() { @@ -1272,6 +1281,14 @@ public class MapMarkersHelper { return header; } + public CategoriesHeader getCategoriesHeader() { + return categoriesHeader; + } + + public WikivoyageArticleHeader getWikivoyageArticleHeader() { + return wikivoyageArticleHeader; + } + public ShowHideHistoryButton getShowHideHistoryButton() { return showHideHistoryButton; } @@ -1323,6 +1340,32 @@ public class MapMarkersHelper { } } + public static class CategoriesHeader { + private int iconRes; + private MapMarkersGroup group; + + public int getIconRes() { + return iconRes; + } + + public MapMarkersGroup getGroup() { + return group; + } + } + + public static class WikivoyageArticleHeader { + private int iconRes; + private MapMarkersGroup group; + + public int getIconRes() { + return iconRes; + } + + public MapMarkersGroup getGroup() { + return group; + } + } + public static class MapMarker implements LocationPoint { private static int[] colors; diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java index 4e076694ec..b428722e64 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/SelectWptCategoriesBottomSheetDialogFragment.java @@ -32,19 +32,22 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee public static final String TAG = "SelectWptCategoriesBottomSheetDialogFragment"; public static final String GPX_FILE_PATH_KEY = "gpx_file_path"; + public static final String UPDATE_CATEGORIES_KEY = "update_categories"; private GPXFile gpxFile; private Set selectedCategories = new HashSet<>(); private List categoryItems = new ArrayList<>(); + private boolean isUpdateMode =false; + @Override public void createMenuItems(Bundle savedInstanceState) { gpxFile = getGpxFile(); if (gpxFile == null) { return; } - + isUpdateMode = getArguments().getBoolean(UPDATE_CATEGORIES_KEY); items.add(new TitleItem(getGpxName(gpxFile))); items.add(new DescriptionItem(getString(R.string.select_waypoints_category_description))); @@ -108,11 +111,35 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee @Override protected int getRightBottomButtonTextId() { - return R.string.shared_string_import; + if (isUpdateMode) { + return -1; + } else { + return super.getRightBottomButtonTextId(); + } + } + + @Override + protected int getDismissButtonTextId() { + if (isUpdateMode) { + return R.string.update; + } else { + return super.getDismissButtonTextId(); + } + } + + protected void onDismissButtonClickAction() { + if (isUpdateMode) { + updateGroupWptCategories(); + } } @Override protected void onRightBottomButtonClick() { + updateGroupWptCategories(); + dismiss(); + } + + private void updateGroupWptCategories() { OsmandApplication app = getMyApplication(); GpxSelectionHelper gpxSelectionHelper = app.getSelectedGpxHelper(); MapMarkersHelper mapMarkersHelper = app.getMapMarkersHelper(); @@ -122,12 +149,11 @@ public class SelectWptCategoriesBottomSheetDialogFragment extends MenuBottomShee gpxSelectionHelper.selectGpxFile(gpxFile, true, false); } MapMarkersGroup group = mapMarkersHelper.getMarkersGroup(gpxFile); - if(group == null) { + if (group == null) { group = mapMarkersHelper.addOrEnableGroup(gpxFile); } mapMarkersHelper.updateGroupWptCategories(group, selectedCategories); - - dismiss(); + mapMarkersHelper.runSynchronization(group); } private boolean isAllChecked() { diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkerCategoriesViewHolder.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkerCategoriesViewHolder.java new file mode 100644 index 0000000000..675100f419 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkerCategoriesViewHolder.java @@ -0,0 +1,24 @@ +package net.osmand.plus.mapmarkers.adapters; + + +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.SwitchCompat; +import android.view.View; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import net.osmand.plus.R; + +public class MapMarkerCategoriesViewHolder extends RecyclerView.ViewHolder { + + final ImageView icon; + final TextView title; + + public MapMarkerCategoriesViewHolder(View itemView) { + super(itemView); + icon = (ImageView) itemView.findViewById(R.id.icon_right); + title = (TextView) itemView.findViewById(R.id.title); + } +} + diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkerWikivoyageArticleViewHolder.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkerWikivoyageArticleViewHolder.java new file mode 100644 index 0000000000..08b5a7e573 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkerWikivoyageArticleViewHolder.java @@ -0,0 +1,21 @@ +package net.osmand.plus.mapmarkers.adapters; + + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import net.osmand.plus.R; + +public class MapMarkerWikivoyageArticleViewHolder extends RecyclerView.ViewHolder { + + final ImageView icon; + final TextView title; + + public MapMarkerWikivoyageArticleViewHolder(View itemView) { + super(itemView); + icon = (ImageView) itemView.findViewById(R.id.icon_right); + title = (TextView) itemView.findViewById(R.id.title); + } +} diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java index 00d5f875f0..931ba35787 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java @@ -1,16 +1,24 @@ package net.osmand.plus.mapmarkers.adapters; +import android.os.AsyncTask; +import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.ImageView; +import android.widget.Toast; + import net.osmand.AndroidUtils; +import net.osmand.IndexConstants; +import net.osmand.OsmAndCollator; import net.osmand.data.LatLon; +import net.osmand.plus.GPXDatabase; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; @@ -25,6 +33,12 @@ import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.dashboard.DashLocationFragment; +import net.osmand.plus.mapmarkers.AddTracksGroupBottomSheetDialogFragment; +import net.osmand.plus.mapmarkers.SelectWptCategoriesBottomSheetDialogFragment; +import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment; +import net.osmand.plus.wikivoyage.data.TravelArticle; +import net.osmand.plus.wikivoyage.data.TravelDbHelper; +import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper; import java.io.File; import java.text.SimpleDateFormat; @@ -39,6 +53,8 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter savedArticles = travelDbHelper.getLocalDataHelper().getSavedArticles(); + for (TravelArticle art : savedArticles) { + String gpxName = travelDbHelper.getGPXName(art); + File path = mapActivity.getMyApplication().getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName); + if (path.getAbsolutePath().equals(group.getGpxPath())) { + MapMarkersHelper.WikivoyageArticleHeader wikivoyageArticleHeader = group.getWikivoyageArticleHeader(); + items.add(wikivoyageArticleHeader); + } + } + } + } populateAdapterWithGroupMarkers(group, getItemCount()); } } @@ -221,6 +255,12 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter savedArticles = travelDbHelper.getLocalDataHelper().getSavedArticles(); + for (TravelArticle art : savedArticles) { + String gpxName = travelDbHelper.getGPXName(art); + File path = mapActivity.getMyApplication().getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName); + if (path.getAbsolutePath().equals(group.getGpxPath())) { + MapMarkersHelper.WikivoyageArticleHeader wikivoyageArticleHeader = group.getWikivoyageArticleHeader(); + items.add(wikivoyageArticleHeader); + test = art; + } + } + } + if (mapActivity.getSupportFragmentManager() != null && test != null) { + WikivoyageArticleDialogFragment.showInstance(app, mapActivity.getSupportFragmentManager(), test.getCityId(), test.getLang()); + } + } + }); } } @@ -490,6 +591,10 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter