Revert plugins reordering; add "order" field to context menu item for sorting; create right order for items in the additional actions context menu

This commit is contained in:
alex 2018-02-23 18:26:52 +02:00
parent 4978217197
commit 512a178655
9 changed files with 99 additions and 25 deletions

View file

@ -30,6 +30,8 @@ import net.osmand.plus.dialogs.HelpArticleDialogFragment;
import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@ -79,6 +81,21 @@ public class ContextMenuAdapter {
this.changeAppModeListener = changeAppModeListener;
}
public void sortItemsByOrder() {
Collections.sort(items, new Comparator<ContextMenuItem>() {
@Override
public int compare(ContextMenuItem item1, ContextMenuItem item2) {
int order1 = item1.getOrder();
int order2 = item2.getOrder();
if (order1 < order2) {
return -1;
} else if (order1 == order2) {
return 0;
}
return 1;
}
});
}
public ArrayAdapter<ContextMenuItem> createListAdapter(final Activity activity, final boolean lightTheme) {
final int layoutId = DEFAULT_LAYOUT_ID;

View file

@ -30,6 +30,7 @@ public class ContextMenuItem {
private final boolean clickable;
private final boolean skipPaintingWithoutColor;
private final int pos;
private final int order;
private String description;
private final ContextMenuAdapter.ItemClickListener itemClickListener;
private final ContextMenuAdapter.OnIntegerValueChangedListener integerListener;
@ -49,7 +50,9 @@ public class ContextMenuItem {
boolean loading,
boolean category,
boolean clickable,
boolean skipPaintingWithoutColor, int pos,
boolean skipPaintingWithoutColor,
int pos,
int order,
String description,
ContextMenuAdapter.ItemClickListener itemClickListener,
ContextMenuAdapter.OnIntegerValueChangedListener integerListener,
@ -70,6 +73,7 @@ public class ContextMenuItem {
this.clickable = clickable;
this.skipPaintingWithoutColor = skipPaintingWithoutColor;
this.pos = pos;
this.order = order;
this.description = description;
this.itemClickListener = itemClickListener;
this.integerListener = integerListener;
@ -146,6 +150,10 @@ public class ContextMenuItem {
return pos;
}
public int getOrder() {
return order;
}
public String getDescription() {
return description;
}
@ -232,6 +240,7 @@ public class ContextMenuItem {
private boolean mIsCategory = false;
private boolean mIsClickable = true;
private int mPosition = -1;
private int mOrder = -1;
private String mDescription = null;
private ContextMenuAdapter.ItemClickListener mItemClickListener = null;
private ContextMenuAdapter.OnIntegerValueChangedListener mIntegerListener = null;
@ -305,6 +314,11 @@ public class ContextMenuItem {
return this;
}
public ItemBuilder setOrder(int order) {
mOrder = order;
return this;
}
public ItemBuilder setDescription(String description) {
mDescription = description;
return this;
@ -352,7 +366,7 @@ public class ContextMenuItem {
public ContextMenuItem createItem() {
return new ContextMenuItem(mTitleId, mTitle, mIcon, mColorRes, mSecondaryIcon,
mSelected, mProgress, mLayout, mLoading, mIsCategory, mIsClickable, mSkipPaintingWithoutColor,
mPosition, mDescription, mItemClickListener, mIntegerListener, mProgressListener,
mPosition, mOrder, mDescription, mItemClickListener, mIntegerListener, mProgressListener,
mHideDivider, mMinHeight, mTag);
}
}

View file

@ -134,22 +134,20 @@ public abstract class OsmandPlugin {
allPlugins.add(new MapillaryPlugin(app));
enabledPlugins.add(MapillaryPlugin.ID);
// plugins with additional actions for context menu in right order:
allPlugins.add(new AudioVideoNotesPlugin(app));
allPlugins.add(new OsmEditingPlugin(app));
checkMarketPlugin(app, new ParkingPositionPlugin(app), false, ParkingPositionPlugin.PARKING_PLUGIN_COMPONENT, null);
allPlugins.add(new OsmandRasterMapsPlugin(app));
allPlugins.add(new OsmandMonitoringPlugin(app));
// allPlugins.add(new OsMoPlugin(app));
checkMarketPlugin(app, new SRTMPlugin(app), true, SRTM_PLUGIN_COMPONENT_PAID, SRTM_PLUGIN_COMPONENT);
// ? questionable - definitely not market plugin
// ? questionable - definitely not market plugin
// checkMarketPlugin(app, new TouringViewPlugin(app), false, TouringViewPlugin.COMPONENT, null);
checkMarketPlugin(app, new NauticalMapsPlugin(app), false, NauticalMapsPlugin.COMPONENT, null);
checkMarketPlugin(app, new SkiMapsPlugin(app), false, SkiMapsPlugin.COMPONENT, null);
allPlugins.add(new AudioVideoNotesPlugin(app));
checkMarketPlugin(app, new ParkingPositionPlugin(app), false, ParkingPositionPlugin.PARKING_PLUGIN_COMPONENT, null);
allPlugins.add(new AccessibilityPlugin(app));
allPlugins.add(new OsmEditingPlugin(app));
allPlugins.add(new OsmandDevelopmentPlugin(app));
activatePlugins(app, enabledPlugins);

View file

@ -80,6 +80,18 @@ public class MapActivityActions implements DialogProvider {
public static final String KEY_ZOOM = "zoom";
// Constants for determining the order of items in the additional actions context menu
// In the case of changing values boundaries for plugin, change them in the plugin too
public static final int DIRECTIONS_FROM_ITEM_ORDER = 1000;
public static final int SEARCH_NEAR_ITEM_ORDER = 2000;
public static final int CHANGE_POSITION_ITEM_ORDER = 3000;
// Orders from 4000 to 4999 are for AudioVideoNotesPlugin
// Orders from 7000 to 7999 are for OsmEditingPlugin
public static final int EDIT_GPX_WAYPOINT_ITEM_ORDER = 9000;
public static final int ADD_GPX_WAYPOINT_ITEM_ORDER = 9000;
// Orders from 10000 to 10999 are for ParkingPositionPlugin
// Orders from 12000 to 12999 are for OsmAndRasterMapsPlugin
private static final int DIALOG_ADD_FAVORITE = 100;
private static final int DIALOG_REPLACE_FAVORITE = 101;
private static final int DIALOG_ADD_WAYPOINT = 102;
@ -277,12 +289,12 @@ public class MapActivityActions implements DialogProvider {
adapter.addItem(itemBuilder
.setTitleId(R.string.context_menu_item_directions_from, mapActivity)
.setIcon(R.drawable.ic_action_route_direction_from_here)
.setPosition(0)
.setOrder(DIRECTIONS_FROM_ITEM_ORDER)
.createItem());
adapter.addItem(itemBuilder
.setTitleId(R.string.context_menu_item_search, mapActivity)
.setIcon(R.drawable.ic_action_search_dark)
.setPosition(1)
.setOrder(SEARCH_NEAR_ITEM_ORDER)
.createItem());
OsmandPlugin.registerMapContextMenu(mapActivity, latitude, longitude, adapter, selectedObj);
@ -304,17 +316,19 @@ public class MapActivityActions implements DialogProvider {
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.context_menu_item_edit_waypoint, mapActivity)
.setIcon(R.drawable.ic_action_edit_dark)
.setPosition(getPositionForGpxAction(adapter))
.setOrder(EDIT_GPX_WAYPOINT_ITEM_ORDER)
.setListener(listener).createItem());
} else if (!getMyApplication().getSelectedGpxHelper().getSelectedGPXFiles().isEmpty()
|| (OsmandPlugin.getEnabledPlugin(OsmandMonitoringPlugin.class) != null)) {
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.context_menu_item_add_waypoint, mapActivity)
.setIcon(R.drawable.ic_action_gnew_label_dark)
.setPosition(getPositionForGpxAction(adapter))
.setOrder(ADD_GPX_WAYPOINT_ITEM_ORDER)
.setListener(listener).createItem());
}
adapter.sortItemsByOrder();
final ArrayAdapter<ContextMenuItem> listAdapter =
adapter.createListAdapter(mapActivity, getMyApplication().getSettings().isLightContent());
@ -348,17 +362,6 @@ public class MapActivityActions implements DialogProvider {
actionsBottomSheetDialogFragment.show(mapActivity.getSupportFragmentManager(), AdditionalActionsBottomSheetDialogFragment.TAG);
}
private int getPositionForGpxAction(ContextMenuAdapter adapter) {
for (int i = 0; i < adapter.length(); i++) {
int titleId = adapter.getItem(i).getTitleId();
if (titleId == R.string.context_menu_item_add_parking_point
|| titleId == R.string.context_menu_item_update_map) {
return i;
}
}
return adapter.length();
}
public void setGPXRouteParams(GPXFile result) {
if (result == null) {
mapActivity.getRoutingHelper().setGpxParams(null);

View file

@ -103,6 +103,13 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
public static final int CAMERA_FOR_VIDEO_REQUEST_CODE = 101;
public static final int CAMERA_FOR_PHOTO_REQUEST_CODE = 102;
public static final int AUDIO_REQUEST_CODE = 103;
// Constants for determining the order of items in the additional actions context menu
// Values boundaries: [4000; 4999]
private static final int TAKE_AUDIO_NOTE_ITEM_ORDER = 4100;
private static final int TAKE_VIDEO_NOTE_ITEM_ORDER = 4300;
private static final int TAKE_PHOTO_NOTE_ITEM_ORDER = 4500;
private static Method mRegisterMediaButtonEventReceiver;
private static Method mUnregisterMediaButtonEventReceiver;
private OsmandApplication app;
@ -661,6 +668,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
}
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.recording_context_menu_arecord, app)
.setIcon(R.drawable.ic_action_micro_dark)
.setOrder(TAKE_AUDIO_NOTE_ITEM_ORDER)
.setListener(new ContextMenuAdapter.ItemClickListener() {
@Override
@ -672,6 +680,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
.createItem());
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.recording_context_menu_vrecord, app)
.setIcon(R.drawable.ic_action_video_dark)
.setOrder(TAKE_VIDEO_NOTE_ITEM_ORDER)
.setListener(new ItemClickListener() {
@Override
@ -683,6 +692,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
.createItem());
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.recording_context_menu_precord, app)
.setIcon(R.drawable.ic_action_photo_dark)
.setOrder(TAKE_PHOTO_NOTE_ITEM_ORDER)
.setListener(new ItemClickListener() {
@Override
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {

View file

@ -48,6 +48,15 @@ import java.util.List;
public class OsmEditingPlugin extends OsmandPlugin {
private static final Log LOG = PlatformUtil.getLog(OsmEditingPlugin.class);
private static final String ID = "osm.editing";
// Constants for determining the order of items in the additional actions context menu
// Values boundaries: [7000; 7999]
private static final int CREATE_POI_ITEM_ORDER = 7300;
private static final int MODIFY_POI_ITEM_ORDER = 7300;
private static final int MODIFY_OSM_CHANGE_ITEM_ORDER = 7300;
private static final int OPEN_OSM_NOTE_ITEM_ORDER = 7600;
private static final int MODIFY_OSM_NOTE_ITEM_ORDER = 7600;
private OsmandSettings settings;
private OsmandApplication app;
private OpenstreetmapsDbHelper dbpoi;
@ -205,27 +214,34 @@ public class OsmEditingPlugin extends OsmandPlugin {
if (isEditable) {
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify, mapActivity)
.setIcon(R.drawable.ic_action_edit_dark)
.setOrder(MODIFY_POI_ITEM_ORDER)
.setListener(listener)
.createItem());
} else if (selectedObj instanceof OpenstreetmapPoint && ((OpenstreetmapPoint) selectedObj).getAction() != Action.DELETE) {
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify_osm_change, mapActivity)
.setIcon(R.drawable.ic_action_edit_dark)
.setOrder(MODIFY_OSM_CHANGE_ITEM_ORDER)
.setListener(listener)
.createItem());
} else {
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_create_poi, mapActivity)
.setIcon(R.drawable.ic_action_plus_dark)
.setOrder(CREATE_POI_ITEM_ORDER)
.setListener(listener)
.createItem());
}
if (selectedObj instanceof OsmNotesPoint) {
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_modify_note, mapActivity)
.setIcon(R.drawable.ic_action_edit_dark)
.setListener(listener).createItem());
.setOrder(MODIFY_OSM_NOTE_ITEM_ORDER)
.setListener(listener)
.createItem());
} else {
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_open_note, mapActivity)
.setIcon(R.drawable.ic_action_bug_dark)
.setListener(listener).createItem());
.setOrder(OPEN_OSM_NOTE_ITEM_ORDER)
.setListener(listener)
.createItem());
}
}

View file

@ -51,6 +51,11 @@ public class ParkingPositionPlugin extends OsmandPlugin {
public final static String PARKING_TIME = "parking_limit_time"; //$//$NON-NLS-1$
public final static String PARKING_START_TIME = "parking_time"; //$//$NON-NLS-1$
public final static String PARKING_EVENT_ADDED = "parking_event_added"; //$//$NON-NLS-1$
// Constants for determining the order of items in the additional actions context menu
// Values boundaries: [10000; 10999]
private static final int MARK_AS_PARKING_POS_ITEM_ORDER = 10500;
private LatLon parkingPosition;
private OsmandApplication app;
@ -228,6 +233,7 @@ public class ParkingPositionPlugin extends OsmandPlugin {
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.context_menu_item_add_parking_point, mapActivity)
.setIcon(R.drawable.ic_action_parking_dark)
.setOrder(MARK_AS_PARKING_POS_ITEM_ORDER)
.setListener(addListener)
.createItem());
}

View file

@ -48,6 +48,12 @@ import java.util.Map;
public class OsmandRasterMapsPlugin extends OsmandPlugin {
public static final String ID = "osmand.rastermaps";
// Constants for determining the order of items in the additional actions context menu
// Values boundaries: [12000; 12999]
private static final int UPDATE_MAP_ITEM_ORDER = 12300;
private static final int DOWNLOAD_MAP_ITEM_ORDER = 12600;
private OsmandSettings settings;
private OsmandApplication app;
@ -361,10 +367,12 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.context_menu_item_update_map, mapActivity)
.setIcon(R.drawable.ic_action_refresh_dark)
.setOrder(UPDATE_MAP_ITEM_ORDER)
.setListener(listener).createItem());
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.shared_string_download_map, mapActivity)
.setIcon(R.drawable.ic_action_import)
.setOrder(DOWNLOAD_MAP_ITEM_ORDER)
.setListener(listener).createItem());
}
}

View file

@ -34,6 +34,7 @@ import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.MapActivityActions;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
import net.osmand.plus.render.MapRenderRepositories;
@ -247,6 +248,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.change_markers_position, activity)
.setIcon(R.drawable.ic_show_on_map)
.setOrder(MapActivityActions.CHANGE_POSITION_ITEM_ORDER)
.setClickable(isObjectMoveable(o))
.setListener(listener)
.createItem());