diff --git a/OsmAnd/res/layout/track_points_tree.xml b/OsmAnd/res/layout/track_points_tree.xml index 83a44d7fc9..51335ba85b 100644 --- a/OsmAnd/res/layout/track_points_tree.xml +++ b/OsmAnd/res/layout/track_points_tree.xml @@ -1,5 +1,5 @@ - @@ -25,4 +25,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index a9418a8cd0..d0adadf810 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,8 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + View + Waypoints added to map markers Wrong format Road Show map diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 4aa1980093..f2ba5a6a6c 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -144,6 +144,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven MapMarkerChangedListener, OnDismissDialogFragmentListener, OnDrawMapListener { public static final String INTENT_KEY_PARENT_MAP_ACTIVITY = "intent_parent_map_activity_key"; + public static final String OPEN_MAP_MARKERS_GROUPS = "open_map_markers_groups"; + private static final int SHOW_POSITION_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_VIEW + 1; private static final int LONG_KEYPRESS_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_VIEW + 2; private static final int LONG_KEYPRESS_DELAY = 500; @@ -680,6 +682,9 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven } } } + if (intent.hasExtra(OPEN_MAP_MARKERS_GROUPS)) { + MapMarkersDialogFragment.showInstance(this, true); + } } mapView.refreshMap(true); if (atlasMapRendererView != null) { @@ -1378,7 +1383,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven return mapLayers; } - public static void launchMapActivityMoveToTop(Context activity) { + public static void launchMapActivityMoveToTop(Context activity, String openMarkersAction) { if (activity instanceof MapActivity) { if (((MapActivity) activity).getDashboard().isVisible()) { ((MapActivity) activity).getDashboard().hideDashboard(); @@ -1400,10 +1405,17 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven Intent newIntent = new Intent(activity, ((OsmandApplication) activity.getApplicationContext()) .getAppCustomization().getMapActivity()); newIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP); + if (openMarkersAction != null) { + newIntent.putExtra(openMarkersAction, true); + } activity.startActivity(newIntent); } } + public static void launchMapActivityMoveToTop(Context activity) { + launchMapActivityMoveToTop(activity, null); + } + public static void clearPrevActivityIntent() { prevActivityIntent = null; } diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersDialogFragment.java index b339c021ce..43a03eb77e 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersDialogFragment.java @@ -64,6 +64,11 @@ public class MapMarkersDialogFragment extends android.support.v4.app.DialogFragm @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { + Bundle args = getArguments(); + boolean openGroups = false; + if (args != null && args.getBoolean(MapActivity.OPEN_MAP_MARKERS_GROUPS)) { + openGroups = true; + } List fragments = getChildFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { @@ -144,6 +149,12 @@ public class MapMarkersDialogFragment extends android.support.v4.app.DialogFragm bottomNav.setItemIconTintList(ContextCompat.getColorStateList(getContext(), R.color.bottom_navigation_color_selector_dark)); bottomNav.setItemTextColor(ContextCompat.getColorStateList(getContext(), R.color.bottom_navigation_color_selector_dark)); } + if (openGroups) { + activeFragment.stopLocationUpdate(); + groupsFragment.startLocationUpdate(); + groupsFragment.updateAdapter(); + viewPager.setCurrentItem(GROUPS_POSITION, false); + } bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { @@ -350,11 +361,20 @@ public class MapMarkersDialogFragment extends android.support.v4.app.DialogFragm } public static boolean showInstance(@NonNull MapActivity mapActivity) { + return showInstance(mapActivity, false); + } + + public static boolean showInstance(@NonNull MapActivity mapActivity, boolean openGroups) { try { if (mapActivity.isActivityDestroyed()) { return false; } MapMarkersDialogFragment fragment = new MapMarkersDialogFragment(); + if (openGroups) { + Bundle args = new Bundle(); + args.putBoolean(MapActivity.OPEN_MAP_MARKERS_GROUPS, true); + fragment.setArguments(args); + } fragment.show(mapActivity.getSupportFragmentManager(), TAG); return true; } catch (RuntimeException e) { diff --git a/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java index c710b74f00..4b4aa9b1f8 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/TrackPointFragment.java @@ -9,6 +9,7 @@ import android.os.Handler; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; @@ -91,7 +92,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment { final private PointGPXAdapter adapter = new PointGPXAdapter(); private GpxDisplayItemType[] filterTypes = {GpxDisplayItemType.TRACK_POINTS, GpxDisplayItemType.TRACK_ROUTE_POINTS}; private boolean selectionMode = false; - private boolean addToMapMarkersMode = false; private LinkedHashMap> selectedItems = new LinkedHashMap<>(); private Set selectedGroups = new LinkedHashSet<>(); private ActionMode actionMode; @@ -105,6 +105,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment { private FloatingActionButton lineFab; private View lineTextLayout; private View overlayView; + private View mainView; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -179,29 +180,29 @@ public class TrackPointFragment extends OsmandExpandableListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.track_points_tree, container, false); - ExpandableListView listView = (ExpandableListView) view.findViewById(android.R.id.list); + mainView = inflater.inflate(R.layout.track_points_tree, container, false); + ExpandableListView listView = (ExpandableListView) mainView.findViewById(android.R.id.list); setHasOptionsMenu(true); - overlayView = view.findViewById(R.id.overlay_view); + overlayView = mainView.findViewById(R.id.overlay_view); overlayView.setOnClickListener(onFabClickListener); - menuFab = (FloatingActionButton) view.findViewById(R.id.menu_fab); + menuFab = (FloatingActionButton) mainView.findViewById(R.id.menu_fab); menuFab.setOnClickListener(onFabClickListener); - waypointFab = (FloatingActionButton) view.findViewById(R.id.waypoint_fab); + waypointFab = (FloatingActionButton) mainView.findViewById(R.id.waypoint_fab); waypointFab.setOnClickListener(onFabClickListener); - waypointTextLayout = view.findViewById(R.id.waypoint_text_layout); + waypointTextLayout = mainView.findViewById(R.id.waypoint_text_layout); waypointTextLayout.setOnClickListener(onFabClickListener); - routePointFab = (FloatingActionButton) view.findViewById(R.id.route_fab); + routePointFab = (FloatingActionButton) mainView.findViewById(R.id.route_fab); routePointFab.setOnClickListener(onFabClickListener); - routePointTextLayout = view.findViewById(R.id.route_text_layout); + routePointTextLayout = mainView.findViewById(R.id.route_text_layout); routePointTextLayout.setOnClickListener(onFabClickListener); - lineFab = (FloatingActionButton) view.findViewById(R.id.line_fab); + lineFab = (FloatingActionButton) mainView.findViewById(R.id.line_fab); lineFab.setOnClickListener(onFabClickListener); - lineTextLayout = view.findViewById(R.id.line_text_layout); + lineTextLayout = mainView.findViewById(R.id.line_text_layout); lineTextLayout.setOnClickListener(onFabClickListener); TextView tv = new TextView(getActivity()); @@ -212,7 +213,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment { setContent(listView); setListView(listView); expandAllGroups(); - return view; + return mainView; } private int getSelectedItemsCount() { @@ -469,10 +470,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment { this.selectionMode = selectionMode; } - private void enableAddToMapMarkersMode(boolean addToMapMarkersMode) { - this.addToMapMarkersMode = addToMapMarkersMode; - } - private void enterDeleteMode() { actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() { @@ -588,50 +585,83 @@ public class TrackPointFragment extends OsmandExpandableListFragment { } private void enterMapMarkersMode() { - actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() { + if (getSettings().USE_MAP_MARKERS.get()) { + addMapMarkersSyncGroup(); + } else { + actionMode = getActionBarActivity().startSupportActionMode(new ActionMode.Callback() { - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - if (getSettings().USE_MAP_MARKERS.get()) { - enableAddToMapMarkersMode(true); - createMenuItem(menu, SELECT_MAP_MARKERS_ACTION_MODE_ID, R.string.shared_string_add_to_map_markers, - R.drawable.ic_action_flag_dark, R.drawable.ic_action_flag_dark, - MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); - } else { + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { enableSelectionMode(true); createMenuItem(menu, SELECT_MAP_MARKERS_ACTION_MODE_ID, R.string.select_destination_and_intermediate_points, R.drawable.ic_action_intermediate, R.drawable.ic_action_intermediate, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); + selectedItems.clear(); + selectedGroups.clear(); + adapter.notifyDataSetInvalidated(); + updateSelectionMode(mode); + return true; } - selectedItems.clear(); - selectedGroups.clear(); - adapter.notifyDataSetInvalidated(); - updateSelectionMode(mode); - return true; - } - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - enableSelectionMode(false); - enableAddToMapMarkersMode(false); - adapter.notifyDataSetInvalidated(); - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - if (item.getItemId() == SELECT_MAP_MARKERS_ACTION_MODE_ID) { - mode.finish(); - selectMapMarkersImpl(); + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; } - return true; + + @Override + public void onDestroyActionMode(ActionMode mode) { + enableSelectionMode(false); + adapter.notifyDataSetInvalidated(); + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (item.getItemId() == SELECT_MAP_MARKERS_ACTION_MODE_ID) { + mode.finish(); + selectMapMarkersImpl(); + } + return true; + } + }); + } + } + + private void addMapMarkersSyncGroup() { + MapMarkersHelper markersHelper = app.getMapMarkersHelper(); + File gpx = getGpxDataItem().getFile(); + MarkersSyncGroup syncGroup = new MarkersSyncGroup(gpx.getAbsolutePath(), + AndroidUtils.trimExtension(gpx.getName()), MarkersSyncGroup.GPX_TYPE); + markersHelper.addMarkersSyncGroup(syncGroup); + markersHelper.syncGroup(syncGroup); + GPXFile gpxFile = getTrackActivity().getGpx(); + if (gpxFile != null) { + app.getSelectedGpxHelper().selectGpxFile(gpxFile, true, false); + } + hideTransparentOverlay(); + closeMenu(); + updateMenuFabVisibility(false); + Snackbar snackbar = Snackbar.make(mainView, getResources().getString(R.string.waypoints_added_to_map_markers), Snackbar.LENGTH_LONG) + .setAction(getResources().getString(R.string.view), new View.OnClickListener() { + @Override + public void onClick(View v) { + MapActivity.launchMapActivityMoveToTop(getTrackActivity(), MapActivity.OPEN_MAP_MARKERS_GROUPS); + } + }); + snackbar.addCallback(new Snackbar.Callback() { + @Override + public void onDismissed(Snackbar transientBottomBar, int event) { + updateMenuFabVisibility(true); + super.onDismissed(transientBottomBar, event); } }); + View snackBarView = snackbar.getView(); + TextView tv = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_action); + tv.setTextColor(ContextCompat.getColor(getContext(), R.color.color_dialog_buttons_dark)); + snackbar.show(); + } + private void updateMenuFabVisibility(boolean visible) { + menuFab.setVisibility(visible ? View.VISIBLE : View.GONE); } private void selectMapMarkersImpl() { @@ -641,17 +671,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment { List points = new LinkedList<>(); List names = new LinkedList<>(); for (Map.Entry> entry : selectedItems.entrySet()) { - if (entry.getKey() == GpxDisplayItemType.TRACK_POINTS) { - File gpx = getGpxDataItem().getFile(); - MarkersSyncGroup syncGroup = new MarkersSyncGroup(gpx.getAbsolutePath(), - AndroidUtils.trimExtension(gpx.getName()), MarkersSyncGroup.GPX_TYPE); - markersHelper.addMarkersSyncGroup(syncGroup); - markersHelper.syncGroup(syncGroup); - GPXFile gpxFile = getTrackActivity().getGpx(); - if (gpxFile != null) { - app.getSelectedGpxHelper().selectGpxFile(gpxFile, true, false); - } - } else { + if (entry.getKey() != GpxDisplayItemType.TRACK_POINTS) { for (GpxDisplayItem i : entry.getValue()) { if (i.locationStart != null) { points.add(new LatLon(i.locationStart.lat, i.locationStart.lon)); @@ -788,7 +808,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment { } } updateSelectionMode(actionMode); - } else if (!addToMapMarkersMode) { + } else { final GpxDisplayItem item = adapter.getChild(groupPosition, childPosition); if (item != null) { if (item.group.getGpx() != null) { @@ -897,8 +917,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment { View row = convertView; final GpxDisplayGroup group = getGroup(groupPosition); boolean checkBox = row != null && row.findViewById(R.id.toggle_item) instanceof CheckBox; - boolean showCheckBox = selectionMode || (addToMapMarkersMode && group.getType() == GpxDisplayItemType.TRACK_POINTS); - boolean same = (showCheckBox && checkBox) || (!showCheckBox && !checkBox); + boolean same = (selectionMode && checkBox) || (!selectionMode && !checkBox); if (row == null || !same) { LayoutInflater inflater = getActivity().getLayoutInflater(); row = inflater.inflate(R.layout.wpt_list_item_category, parent, false); @@ -915,7 +934,7 @@ public class TrackPointFragment extends OsmandExpandableListFragment { description.setText(getString(R.string.route_points_category_name)); } - if (showCheckBox) { + if (selectionMode) { final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item); ch.setVisibility(View.VISIBLE); ch.setChecked(selectedGroups.contains(groupPosition)); @@ -1061,9 +1080,6 @@ public class TrackPointFragment extends OsmandExpandableListFragment { }); } else { row.findViewById(R.id.icon).setVisibility(View.VISIBLE); - if (addToMapMarkersMode) { - ch.setVisibility(View.GONE); - } } return row; }