Search in sources :

Example 1 with ContextMenuItem

use of net.osmand.plus.ContextMenuItem in project Osmand by osmandapp.

the class AudioVideoNotesPlugin method registerMapContextMenuActions.

@Override
public void registerMapContextMenuActions(final MapActivity mapActivity, final double latitude, final double longitude, ContextMenuAdapter adapter, Object selectedObj) {
    if (isRecording()) {
        return;
    }
    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
        public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
            recordAudio(latitude, longitude, mapActivity);
            return true;
        }
    }).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
        public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
            recordVideo(latitude, longitude, mapActivity, false);
            return true;
        }
    }).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) {
            takePhoto(latitude, longitude, mapActivity, false, false);
            return true;
        }
    }).createItem());
}
Also used : ContextMenuAdapter(net.osmand.plus.ContextMenuAdapter) ItemClickListener(net.osmand.plus.ContextMenuAdapter.ItemClickListener) ContextMenuItem(net.osmand.plus.ContextMenuItem) ItemClickListener(net.osmand.plus.ContextMenuAdapter.ItemClickListener) GeoParsedPoint(net.osmand.util.GeoPointParserUtil.GeoParsedPoint)

Example 2 with ContextMenuItem

use of net.osmand.plus.ContextMenuItem in project Osmand by osmandapp.

the class ConfigureMapMenu method createRenderingProperty.

private ContextMenuItem createRenderingProperty(final ContextMenuAdapter adapter, final MapActivity activity, @DrawableRes final int icon, final RenderingRuleProperty p) {
    final OsmandMapTileView view = activity.getMapView();
    String propertyName = SettingsActivity.getStringPropertyName(view.getContext(), p.getAttrName(), p.getName());
    final String propertyDescr = SettingsActivity.getStringPropertyDescription(view.getContext(), p.getAttrName(), p.getName());
    if (p.isBoolean()) {
        final OsmandSettings.CommonPreference<Boolean> pref = view.getApplication().getSettings().getCustomRenderBooleanProperty(p.getAttrName());
        return ContextMenuItem.createBuilder(propertyName).setListener(new ContextMenuAdapter.ItemClickListener() {

            @Override
            public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
                pref.set(!pref.get());
                refreshMapComplete(activity);
                return false;
            }
        }).setSelected(pref.get()).createItem();
    } else {
        final OsmandSettings.CommonPreference<String> pref = view.getApplication().getSettings().getCustomRenderProperty(p.getAttrName());
        final String descr;
        if (!Algorithms.isEmpty(pref.get())) {
            descr = SettingsActivity.getStringPropertyValue(activity, pref.get());
        } else {
            descr = SettingsActivity.getStringPropertyValue(view.getContext(), p.getDefaultValueDescription());
        }
        ContextMenuItem.ItemBuilder builder = ContextMenuItem.createBuilder(propertyName).setListener(new ContextMenuAdapter.ItemClickListener() {

            @Override
            public boolean onContextMenuClick(final ArrayAdapter<ContextMenuItem> ad, final int itemId, final int pos, boolean isChecked, int[] viewCoordinates) {
                AlertDialog.Builder b = new AlertDialog.Builder(view.getContext());
                // test old descr as title
                b.setTitle(propertyDescr);
                int i = Arrays.asList(p.getPossibleValues()).indexOf(pref.get());
                if (i >= 0) {
                    i++;
                } else if (Algorithms.isEmpty(pref.get())) {
                    i = 0;
                }
                String[] possibleValuesString = new String[p.getPossibleValues().length + 1];
                possibleValuesString[0] = SettingsActivity.getStringPropertyValue(view.getContext(), p.getDefaultValueDescription());
                for (int j = 0; j < p.getPossibleValues().length; j++) {
                    possibleValuesString[j + 1] = SettingsActivity.getStringPropertyValue(view.getContext(), p.getPossibleValues()[j]);
                }
                b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (which == 0) {
                            pref.set("");
                        } else {
                            pref.set(p.getPossibleValues()[which - 1]);
                        }
                        refreshMapComplete(activity);
                        String description = SettingsActivity.getStringPropertyValue(activity, pref.get());
                        adapter.getItem(pos).setDescription(description);
                        dialog.dismiss();
                    }
                });
                b.setNegativeButton(R.string.shared_string_dismiss, null);
                b.show();
                return false;
            }
        }).setDescription(descr).setLayout(R.layout.list_item_single_line_descrition_narrow);
        if (icon != 0) {
            builder.setIcon(icon);
        }
        return builder.createItem();
    }
}
Also used : AlertDialog(android.support.v7.app.AlertDialog) ContextMenuItem(net.osmand.plus.ContextMenuItem) DialogInterface(android.content.DialogInterface) ItemClickListener(net.osmand.plus.ContextMenuAdapter.ItemClickListener) OsmandSettings(net.osmand.plus.OsmandSettings) ContextMenuAdapter(net.osmand.plus.ContextMenuAdapter) OsmandMapTileView(net.osmand.plus.views.OsmandMapTileView)

Example 3 with ContextMenuItem

use of net.osmand.plus.ContextMenuItem in project Osmand by osmandapp.

the class ConfigureMapMenu method createProperties.

private ContextMenuItem createProperties(List<RenderingRuleProperty> customRules, final List<RenderingRuleProperty> customRulesIncluded, @StringRes final int strId, @DrawableRes final int icon, String category, final ListStringPreference defaultSettings, final ContextMenuAdapter adapter, final MapActivity activity, final boolean useDescription) {
    final List<RenderingRuleProperty> ps = new ArrayList<>();
    final List<OsmandSettings.CommonPreference<Boolean>> prefs = new ArrayList<>();
    Iterator<RenderingRuleProperty> it = customRules.iterator();
    while (it.hasNext()) {
        RenderingRuleProperty p = it.next();
        if (category.equals(p.getCategory()) && p.isBoolean()) {
            ps.add(p);
            final OsmandSettings.CommonPreference<Boolean> pref = activity.getMyApplication().getSettings().getCustomRenderBooleanProperty(p.getAttrName());
            prefs.add(pref);
            it.remove();
        }
    }
    if (prefs.size() > 0) {
        final List<OsmandSettings.CommonPreference<String>> includedPrefs = new ArrayList<>();
        if (customRulesIncluded != null) {
            for (RenderingRuleProperty p : customRulesIncluded) {
                if (!p.isBoolean()) {
                    final OsmandSettings.CommonPreference<String> pref = activity.getMyApplication().getSettings().getCustomRenderProperty(p.getAttrName());
                    includedPrefs.add(pref);
                }
            }
        }
        final ItemClickListener clickListener = new ContextMenuAdapter.ItemClickListener() {

            @Override
            public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> a, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
                if (!isChecked && !useDescription) {
                    if (defaultSettings != null) {
                        defaultSettings.set("");
                        for (int i = 0; i < prefs.size(); i++) {
                            if (prefs.get(i).get()) {
                                defaultSettings.addValue(prefs.get(i).getId());
                            }
                        }
                    }
                    for (int i = 0; i < prefs.size(); i++) {
                        prefs.get(i).set(false);
                    }
                    adapter.getItem(pos).setColorRes(ContextMenuItem.INVALID_ID);
                    a.notifyDataSetInvalidated();
                    refreshMapComplete(activity);
                    activity.getMapLayers().updateLayers(activity.getMapView());
                } else {
                    showPreferencesDialog(adapter, a, pos, activity, activity.getString(strId), ps, prefs, useDescription, defaultSettings, true, customRulesIncluded);
                }
                return false;
            }
        };
        ContextMenuItem.ItemBuilder builder = new ContextMenuItem.ItemBuilder().setTitleId(strId, activity).setIcon(icon).setListener(clickListener);
        boolean selected = false;
        for (OsmandSettings.CommonPreference<Boolean> p : prefs) {
            if (p.get()) {
                selected = true;
                break;
            }
        }
        if (!selected && includedPrefs.size() > 0) {
            for (OsmandSettings.CommonPreference<String> p : includedPrefs) {
                if (!Algorithms.isEmpty(p.get())) {
                    selected = true;
                    break;
                }
            }
        }
        builder.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
        if (useDescription) {
            final String descr = getDescription(prefs, includedPrefs);
            builder.setDescription(descr);
            builder.setLayout(R.layout.list_item_single_line_descrition_narrow);
        } else {
            builder.setListener(new OnRowItemClick() {

                @Override
                public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> a, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
                    return clickListener.onContextMenuClick(a, itemId, pos, isChecked, null);
                }

                @Override
                public boolean onRowItemClick(ArrayAdapter<ContextMenuItem> a, View view, int itemId, int pos) {
                    showPreferencesDialog(adapter, a, pos, activity, activity.getString(strId), ps, prefs, useDescription, defaultSettings, false, customRulesIncluded);
                    return false;
                }
            });
            builder.setSecondaryIcon(R.drawable.ic_action_additional_option);
            builder.setSelected(selected);
        }
        return builder.createItem();
    // createCustomRenderingProperties(adapter, activity, ps);
    }
    return null;
}
Also used : ItemClickListener(net.osmand.plus.ContextMenuAdapter.ItemClickListener) CommonPreference(net.osmand.plus.OsmandSettings.CommonPreference) ContextMenuItem(net.osmand.plus.ContextMenuItem) TIntArrayList(gnu.trove.list.array.TIntArrayList) ArrayList(java.util.ArrayList) RenderingRuleProperty(net.osmand.render.RenderingRuleProperty) OnRowItemClick(net.osmand.plus.ContextMenuAdapter.OnRowItemClick) AppCompatCheckedTextView(android.support.v7.widget.AppCompatCheckedTextView) ImageView(android.widget.ImageView) View(android.view.View) AdapterView(android.widget.AdapterView) TextView(android.widget.TextView) ListView(android.widget.ListView) OsmandMapTileView(net.osmand.plus.views.OsmandMapTileView) OsmandSettings(net.osmand.plus.OsmandSettings) ArrayAdapter(android.widget.ArrayAdapter)

Example 4 with ContextMenuItem

use of net.osmand.plus.ContextMenuItem in project Osmand by osmandapp.

the class RasterMapMenu method createLayersItems.

private static void createLayersItems(final ContextMenuAdapter contextMenuAdapter, final MapActivity mapActivity, final RasterMapType type) {
    final OsmandApplication app = mapActivity.getMyApplication();
    final OsmandSettings settings = app.getSettings();
    final OsmandRasterMapsPlugin plugin = OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class);
    assert plugin != null;
    final OsmandSettings.CommonPreference<Integer> mapTransparencyPreference;
    final OsmandSettings.CommonPreference<String> mapTypePreference;
    final OsmandSettings.CommonPreference<String> exMapTypePreference;
    final LayerTransparencySeekbarMode currentMapTypeSeekbarMode = type == RasterMapType.OVERLAY ? LayerTransparencySeekbarMode.OVERLAY : LayerTransparencySeekbarMode.UNDERLAY;
    @StringRes final int mapTypeString;
    @StringRes final int mapTypeStringTransparency;
    if (type == RasterMapType.OVERLAY) {
        mapTransparencyPreference = settings.MAP_OVERLAY_TRANSPARENCY;
        mapTypePreference = settings.MAP_OVERLAY;
        exMapTypePreference = settings.MAP_OVERLAY_PREVIOUS;
        mapTypeString = R.string.map_overlay;
        mapTypeStringTransparency = R.string.overlay_transparency;
    } else if (type == RasterMapType.UNDERLAY) {
        mapTransparencyPreference = settings.MAP_TRANSPARENCY;
        mapTypePreference = settings.MAP_UNDERLAY;
        exMapTypePreference = settings.MAP_UNDERLAY_PREVIOUS;
        mapTypeString = R.string.map_underlay;
        mapTypeStringTransparency = R.string.map_transparency;
    } else {
        throw new RuntimeException("Unexpected raster map type");
    }
    final OsmandSettings.CommonPreference<Boolean> hidePolygonsPref = mapActivity.getMyApplication().getSettings().getCustomRenderBooleanProperty("noPolygons");
    String mapTypeDescr = mapTypePreference.get();
    final boolean selected = mapTypeDescr != null;
    final int toggleActionStringId = selected ? R.string.shared_string_enabled : R.string.shared_string_disabled;
    final OnMapSelectedCallback onMapSelectedCallback = new OnMapSelectedCallback() {

        @Override
        public void onMapSelected(boolean canceled) {
            if (type == RasterMapType.UNDERLAY && !canceled && !selected) {
                hidePolygonsPref.set(true);
                refreshMapComplete(mapActivity);
            } else if (type == RasterMapType.UNDERLAY && !canceled && mapTypePreference.get() == null) {
                hidePolygonsPref.set(false);
                refreshMapComplete(mapActivity);
            }
            mapActivity.getDashboard().refreshContent(true);
        }
    };
    final MapActivityLayers mapLayers = mapActivity.getMapLayers();
    ContextMenuAdapter.OnRowItemClick l = new ContextMenuAdapter.OnRowItemClick() {

        @Override
        public boolean onRowItemClick(ArrayAdapter<ContextMenuItem> adapter, View view, int itemId, int pos) {
            if (itemId == mapTypeString) {
                if (selected) {
                    plugin.selectMapOverlayLayer(mapActivity.getMapView(), mapTypePreference, exMapTypePreference, true, mapActivity, onMapSelectedCallback);
                }
                return false;
            }
            return super.onRowItemClick(adapter, view, itemId, pos);
        }

        @Override
        public boolean onContextMenuClick(final ArrayAdapter<ContextMenuItem> adapter, final int itemId, final int pos, final boolean isChecked, int[] viewCoordinates) {
            if (itemId == toggleActionStringId) {
                app.runInUIThread(new Runnable() {

                    @Override
                    public void run() {
                        plugin.toggleUnderlayState(mapActivity, type, onMapSelectedCallback);
                        refreshMapComplete(mapActivity);
                    }
                });
            } else if (itemId == R.string.show_polygons) {
                hidePolygonsPref.set(!isChecked);
                refreshMapComplete(mapActivity);
            } else if (itemId == R.string.show_transparency_seekbar) {
                settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.set(isChecked ? currentMapTypeSeekbarMode : LayerTransparencySeekbarMode.OFF);
                if (isChecked) {
                    mapLayers.getMapControlsLayer().showTransparencyBar(mapTransparencyPreference);
                } else {
                    mapLayers.getMapControlsLayer().hideTransparencyBar(mapTransparencyPreference);
                }
                mapLayers.getMapControlsLayer().setTransparencyBarEnabled(isChecked);
            }
            return false;
        }
    };
    mapTypeDescr = selected ? mapTypeDescr : mapActivity.getString(R.string.shared_string_none);
    contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(toggleActionStringId, mapActivity).hideDivider(true).setListener(l).setSelected(selected).createItem());
    if (selected) {
        contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(mapTypeString, mapActivity).hideDivider(true).setListener(l).setLayout(R.layout.list_item_icon_and_menu_wide).setDescription(mapTypeDescr).createItem());
        ContextMenuAdapter.OnIntegerValueChangedListener integerListener = new ContextMenuAdapter.OnIntegerValueChangedListener() {

            @Override
            public boolean onIntegerValueChangedListener(int newValue) {
                mapTransparencyPreference.set(newValue);
                mapActivity.getMapView().refreshMap();
                return false;
            }
        };
        // android:max="255" in layout is expected
        contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(mapTypeStringTransparency, mapActivity).hideDivider(true).setLayout(R.layout.list_item_progress).setIcon(R.drawable.ic_action_opacity).setProgress(mapTransparencyPreference.get()).setListener(l).setIntegerListener(integerListener).createItem());
        if (type == RasterMapType.UNDERLAY) {
            contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.show_polygons, mapActivity).hideDivider(true).setListener(l).setSelected(!hidePolygonsPref.get()).createItem());
        }
        Boolean transparencySwitchState = isSeekbarVisible(app, type);
        contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.show_transparency_seekbar, mapActivity).hideDivider(true).setListener(l).setSelected(transparencySwitchState).createItem());
    }
}
Also used : OsmandApplication(net.osmand.plus.OsmandApplication) StringRes(android.support.annotation.StringRes) OsmandRasterMapsPlugin(net.osmand.plus.rastermaps.OsmandRasterMapsPlugin) MapActivityLayers(net.osmand.plus.activities.MapActivityLayers) ContextMenuItem(net.osmand.plus.ContextMenuItem) LayerTransparencySeekbarMode(net.osmand.plus.OsmandSettings.LayerTransparencySeekbarMode) View(android.view.View) OsmandSettings(net.osmand.plus.OsmandSettings) OnMapSelectedCallback(net.osmand.plus.rastermaps.OsmandRasterMapsPlugin.OnMapSelectedCallback) ContextMenuAdapter(net.osmand.plus.ContextMenuAdapter) ArrayAdapter(android.widget.ArrayAdapter)

Example 5 with ContextMenuItem

use of net.osmand.plus.ContextMenuItem in project Osmand by osmandapp.

the class DashboardOnMap method updateListAdapter.

public void updateListAdapter(ContextMenuAdapter cm) {
    boolean nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightModeForMapControls();
    if (this.nightMode != nightMode) {
        this.nightMode = nightMode;
        applyDayNightMode();
    }
    final ArrayAdapter<ContextMenuItem> listAdapter = cm.createListAdapter(mapActivity, !nightMode);
    OnItemClickListener listener = getOptionsMenuOnClickListener(cm, listAdapter);
    updateListAdapter(listAdapter, listener);
}
Also used : ContextMenuItem(net.osmand.plus.ContextMenuItem) OnItemClickListener(android.widget.AdapterView.OnItemClickListener)

Aggregations

ContextMenuItem (net.osmand.plus.ContextMenuItem)37 ContextMenuAdapter (net.osmand.plus.ContextMenuAdapter)27 ArrayAdapter (android.widget.ArrayAdapter)23 View (android.view.View)19 DialogInterface (android.content.DialogInterface)16 ItemClickListener (net.osmand.plus.ContextMenuAdapter.ItemClickListener)13 AlertDialog (android.support.v7.app.AlertDialog)12 TextView (android.widget.TextView)11 OsmandApplication (net.osmand.plus.OsmandApplication)11 OsmandSettings (net.osmand.plus.OsmandSettings)11 OsmandMapTileView (net.osmand.plus.views.OsmandMapTileView)11 AdapterView (android.widget.AdapterView)10 ImageView (android.widget.ImageView)9 ArrayList (java.util.ArrayList)8 ViewGroup (android.view.ViewGroup)6 ListView (android.widget.ListView)6 RenderingRuleProperty (net.osmand.render.RenderingRuleProperty)6 Intent (android.content.Intent)5 CompoundButton (android.widget.CompoundButton)5 Drawable (android.graphics.drawable.Drawable)4