Search in sources :

Example 1 with PopUpMenuItem

use of net.osmand.plus.widgets.popup.PopUpMenuItem in project Osmand by osmandapp.

the class AvailableGPXFragment method onOptionsItemSelected.

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
    int itemId = item.getItemId();
    for (int i = 0; i < optionsMenuAdapter.length(); i++) {
        ContextMenuItem contextMenuItem = optionsMenuAdapter.getItem(i);
        if (itemId == contextMenuItem.getTitleId()) {
            contextMenuItem.getItemClickListener().onContextMenuClick(null, itemId, i, false, null);
            return true;
        }
    }
    if (itemId == R.id.action_sort) {
        Activity activity = getActivity();
        if (activity != null) {
            View menuSortItemView = getActivity().findViewById(R.id.action_sort);
            final List<PopUpMenuItem> items = new ArrayList<>();
            for (final TracksSortByMode mode : TracksSortByMode.values()) {
                items.add(new PopUpMenuItem.Builder(app).setTitleId(mode.getNameId()).setIcon(app.getUIUtilities().getThemedIcon(mode.getIconId())).setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        updateTracksSort(mode);
                        int iconColorId = ColorUtilities.getActiveButtonsAndLinksTextColorId(!isLightActionBar());
                        item.setIcon(getIcon(mode.getIconId(), iconColorId));
                    }
                }).setSelected(sortByMode == mode).create());
            }
            new PopUpMenuHelper.Builder(menuSortItemView, items, nightMode).show();
        }
    }
    return super.onOptionsItemSelected(item);
}
Also used : PopUpMenuHelper(net.osmand.plus.widgets.popup.PopUpMenuHelper) ContextMenuItem(net.osmand.plus.ContextMenuItem) TracksSortByMode(net.osmand.plus.settings.enums.TracksSortByMode) ArrayList(java.util.ArrayList) MapActivity(net.osmand.plus.activities.MapActivity) FragmentActivity(androidx.fragment.app.FragmentActivity) Activity(android.app.Activity) PopUpMenuItem(net.osmand.plus.widgets.popup.PopUpMenuItem) ImageView(android.widget.ImageView) SearchView(androidx.appcompat.widget.SearchView) View(android.view.View) TextView(android.widget.TextView) AbsListView(android.widget.AbsListView) ExpandableListView(android.widget.ExpandableListView)

Example 2 with PopUpMenuItem

use of net.osmand.plus.widgets.popup.PopUpMenuItem in project Osmand by osmandapp.

the class FollowTrackFragment method setupSortButton.

private void setupSortButton(View view) {
    final ImageButton sortButton = view.findViewById(R.id.sort_button);
    int colorId = ColorUtilities.getInactiveButtonsAndLinksColorId(isNightMode());
    Drawable background = app.getUIUtilities().getIcon(R.drawable.bg_dash_line_dark, colorId);
    sortButton.setImageResource(sortByMode.getIconId());
    AndroidUtils.setBackground(sortButton, background);
    sortButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            List<PopUpMenuItem> items = new ArrayList<>();
            for (final TracksSortByMode mode : TracksSortByMode.values()) {
                items.add(new PopUpMenuItem.Builder(app).setTitleId(mode.getNameId()).setIcon(app.getUIUtilities().getThemedIcon(mode.getIconId())).setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        sortByMode = mode;
                        sortButton.setImageResource(mode.getIconId());
                        if (tracksCard != null) {
                            tracksCard.setSortByMode(mode);
                        }
                    }
                }).setSelected(sortByMode == mode).create());
            }
            new PopUpMenuHelper.Builder(v, items, isNightMode()).show();
        }
    });
}
Also used : ImageButton(android.widget.ImageButton) TracksSortByMode(net.osmand.plus.settings.enums.TracksSortByMode) GPXRouteParamsBuilder(net.osmand.plus.routing.GPXRouteParams.GPXRouteParamsBuilder) Drawable(android.graphics.drawable.Drawable) List(java.util.List) ArrayList(java.util.ArrayList) PopUpMenuItem(net.osmand.plus.widgets.popup.PopUpMenuItem) View(android.view.View)

Example 3 with PopUpMenuItem

use of net.osmand.plus.widgets.popup.PopUpMenuItem in project Osmand by osmandapp.

the class TrackDetailsMenu method updateView.

private void updateView(final View parentView, boolean forceFitTrackOnMap) {
    MapActivity mapActivity = getMapActivity();
    GpxDisplayItem gpxItem = getGpxItem();
    if (mapActivity == null || gpxItem == null) {
        return;
    }
    final OsmandApplication app = mapActivity.getMyApplication();
    final UiUtilities ic = app.getUIUtilities();
    final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
    GPXTrackAnalysis analysis = gpxItem.analysis;
    if (analysis == null || gpxItem.chartTypes == null) {
        parentView.setVisibility(View.GONE);
        if (analysis != null && analysis.isBoundsCalculated()) {
            mapActivity.getMapView().fitRectToMap(analysis.left, analysis.right, analysis.top, analysis.bottom, 0, 0, 0);
        }
        return;
    }
    final LineChart chart = (LineChart) parentView.findViewById(R.id.chart);
    chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {

        @Override
        public void onValueSelected(Entry e, Highlight h) {
            refreshChart(chart, false);
        }

        @Override
        public void onNothingSelected() {
        }
    });
    // final float minDragTriggerDist = AndroidUtils.dpToPx(app, 3);
    // chart.setOnTouchListener(new BarLineChartTouchListener(chart, chart.getViewPortHandler().getMatrixTouch(), 3f) {
    // private PointF touchStartPoint = new PointF();
    // 
    // @SuppressLint("ClickableViewAccessibility")
    // @Override
    // public boolean onTouch(View v, MotionEvent event) {
    // switch (event.getAction() & MotionEvent.ACTION_MASK) {
    // case MotionEvent.ACTION_DOWN:
    // saveTouchStart(event);
    // break;
    // case MotionEvent.ACTION_POINTER_DOWN:
    // if (event.getPointerCount() >= 2) {
    // saveTouchStart(event);
    // }
    // break;
    // case MotionEvent.ACTION_MOVE:
    // if (mTouchMode == NONE && mChart.hasNoDragOffset()) {
    // float touchDistance = distance(event.getX(), touchStartPoint.x, event.getY(), touchStartPoint.y);
    // if (Math.abs(touchDistance) > minDragTriggerDist) {
    // mTouchMode = DRAG;
    // }
    // }
    // break;
    // }
    // return super.onTouch(v, event);
    // }
    // 
    // private void saveTouchStart(MotionEvent event) {
    // touchStartPoint.x = event.getX();
    // touchStartPoint.y = event.getY();
    // }
    // });
    chart.setOnChartGestureListener(new OnChartGestureListener() {

        boolean hasTranslated = false;

        float highlightDrawX = -1;

        @Override
        public void onChartGestureStart(MotionEvent me, ChartGesture lastPerformedGesture) {
            hasTranslated = false;
            if (chart.getHighlighted() != null && chart.getHighlighted().length > 0) {
                highlightDrawX = chart.getHighlighted()[0].getDrawX();
            } else {
                highlightDrawX = -1;
            }
            MapActivity mapActivity = getMapActivity();
            if (lastPerformedGesture != ChartGesture.NONE && mapActivity != null && mapActivity.getMapViewTrackingUtilities().isMapLinkedToLocation()) {
                mapActivity.getMapViewTrackingUtilities().setMapLinkedToLocation(false);
            }
        }

        @Override
        public void onChartGestureEnd(MotionEvent me, ChartGesture lastPerformedGesture) {
            GpxDisplayItem gpxItem = getGpxItem();
            if (gpxItem != null) {
                if ((lastPerformedGesture == ChartGesture.DRAG && hasTranslated) || lastPerformedGesture == ChartGesture.X_ZOOM || lastPerformedGesture == ChartGesture.Y_ZOOM || lastPerformedGesture == ChartGesture.PINCH_ZOOM || lastPerformedGesture == ChartGesture.DOUBLE_TAP || lastPerformedGesture == ChartGesture.ROTATE) {
                    gpxItem.chartMatrix = new Matrix(chart.getViewPortHandler().getMatrixTouch());
                    refreshChart(chart, false);
                }
            }
        }

        @Override
        public void onChartLongPressed(MotionEvent me) {
        }

        @Override
        public void onChartDoubleTapped(MotionEvent me) {
        }

        @Override
        public void onChartSingleTapped(MotionEvent me) {
        }

        @Override
        public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
        }

        @Override
        public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
        }

        @Override
        public void onChartTranslate(MotionEvent me, float dX, float dY) {
            hasTranslated = true;
            if (highlightDrawX != -1) {
                Highlight h = chart.getHighlightByTouchPoint(highlightDrawX, 0f);
                if (h != null) {
                    chart.highlightValue(h);
                    refreshChart(chart, false);
                }
            }
        }
    });
    boolean useHours = analysis.timeSpan != 0 && analysis.timeSpan / HOUR_IN_MILLIS > 0;
    GpxMarkerView markerView = new GpxMarkerView(mapActivity, analysis.startTime, useHours);
    GpxUiHelper.setupGPXChart(chart, markerView, 24, 16, true);
    List<ILineDataSet> dataSets = new ArrayList<>();
    if (gpxItem.chartTypes != null && gpxItem.chartTypes.length > 0) {
        for (int i = 0; i < gpxItem.chartTypes.length; i++) {
            OrderedLineDataSet dataSet = null;
            boolean withoutGaps = selectedGpxFile != null && (!selectedGpxFile.isJoinSegments() && gpxItem.isGeneralTrack());
            switch(gpxItem.chartTypes[i]) {
                case ALTITUDE:
                    dataSet = GpxUiHelper.createGPXElevationDataSet(app, chart, analysis, gpxItem.chartAxisType, false, true, withoutGaps);
                    break;
                case SPEED:
                    dataSet = GpxUiHelper.createGPXSpeedDataSet(app, chart, analysis, gpxItem.chartAxisType, gpxItem.chartTypes.length > 1, true, withoutGaps);
                    break;
                case SLOPE:
                    dataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart, analysis, gpxItem.chartAxisType, null, gpxItem.chartTypes.length > 1, true, withoutGaps);
                    break;
            }
            if (dataSet != null) {
                dataSets.add(dataSet);
            }
        }
    }
    Collections.sort(dataSets, new Comparator<ILineDataSet>() {

        @Override
        public int compare(ILineDataSet ds1, ILineDataSet ds2) {
            OrderedLineDataSet dataSet1 = (OrderedLineDataSet) ds1;
            OrderedLineDataSet dataSet2 = (OrderedLineDataSet) ds2;
            return dataSet1.getPriority() > dataSet2.getPriority() ? -1 : (dataSet1.getPriority() == dataSet2.getPriority() ? 0 : 1);
        }
    });
    chart.setData(new LineData(dataSets));
    updateChart(chart);
    View yAxis = parentView.findViewById(R.id.y_axis);
    ImageView yAxisIcon = (ImageView) parentView.findViewById(R.id.y_axis_icon);
    TextView yAxisTitle = (TextView) parentView.findViewById(R.id.y_axis_title);
    View yAxisArrow = parentView.findViewById(R.id.y_axis_arrow);
    final List<GPXDataSetType[]> availableTypes = new ArrayList<>();
    boolean hasSlopeChart = false;
    if (analysis.hasElevationData) {
        availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE });
        if (gpxItem.chartAxisType != GPXDataSetAxisType.TIME && gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) {
            availableTypes.add(new GPXDataSetType[] { GPXDataSetType.SLOPE });
        }
    }
    if (analysis.hasSpeedData) {
        availableTypes.add(new GPXDataSetType[] { GPXDataSetType.SPEED });
    }
    if (analysis.hasElevationData && gpxItem.chartAxisType != GPXDataSetAxisType.TIME && gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) {
        availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE, GPXDataSetType.SLOPE });
    }
    if (analysis.hasElevationData && analysis.hasSpeedData) {
        availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE, GPXDataSetType.SPEED });
    }
    for (GPXDataSetType t : gpxItem.chartTypes) {
        if (t == GPXDataSetType.SLOPE) {
            hasSlopeChart = true;
            break;
        }
    }
    yAxisIcon.setImageDrawable(GPXDataSetType.getImageDrawable(app, gpxItem.chartTypes));
    yAxisTitle.setText(GPXDataSetType.getName(app, gpxItem.chartTypes));
    if (availableTypes.size() > 0) {
        yAxis.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                List<PopUpMenuItem> items = new ArrayList<>();
                for (GPXDataSetType[] types : availableTypes) {
                    String title = GPXDataSetType.getName(app, types);
                    Drawable icon = GPXDataSetType.getImageDrawable(app, types);
                    items.add(new PopUpMenuItem.Builder(app).setTitle(title).setIcon(icon).create());
                }
                AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        fitTrackOnMapForbidden = true;
                        GpxDisplayItem gpxItem = getGpxItem();
                        gpxItem.chartTypes = availableTypes.get(position);
                        update();
                        fitTrackOnMapForbidden = false;
                    }
                };
                new PopUpMenuHelper.Builder(v, items, nightMode).setListener(listener).show();
            }
        });
        yAxisArrow.setVisibility(View.VISIBLE);
    } else {
        yAxis.setOnClickListener(null);
        yAxis.setBackgroundResource(0);
        yAxisArrow.setVisibility(View.GONE);
    }
    View xAxis = parentView.findViewById(R.id.x_axis);
    ImageView xAxisIcon = (ImageView) parentView.findViewById(R.id.x_axis_icon);
    TextView xAxisTitle = (TextView) parentView.findViewById(R.id.x_axis_title);
    View xAxisArrow = parentView.findViewById(R.id.x_axis_arrow);
    if (gpxItem.chartAxisType == GPXDataSetAxisType.TIME) {
        xAxisIcon.setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_time));
        xAxisTitle.setText(app.getString(R.string.shared_string_time));
    } else if (gpxItem.chartAxisType == GPXDataSetAxisType.TIMEOFDAY) {
        xAxisIcon.setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_time_span));
        xAxisTitle.setText(app.getString(R.string.time_of_day));
    } else {
        xAxisIcon.setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_marker_dark));
        xAxisTitle.setText(app.getString(R.string.distance));
    }
    if (analysis.isTimeSpecified() && !hasSlopeChart) {
        xAxis.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                List<PopUpMenuItem> items = new ArrayList<>();
                for (GPXDataSetAxisType type : GPXDataSetAxisType.values()) {
                    items.add(new PopUpMenuItem.Builder(app).setTitleId(type.getStringId()).setIcon(type.getImageDrawable(app)).create());
                }
                new PopUpMenuHelper.Builder(v, items, nightMode).setListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        fitTrackOnMapForbidden = true;
                        GpxDisplayItem gpxItem = getGpxItem();
                        if (gpxItem != null) {
                            gpxItem.chartAxisType = GPXDataSetAxisType.values()[position];
                            gpxItem.chartHighlightPos = -1;
                            gpxItem.chartMatrix = null;
                            update();
                        }
                        fitTrackOnMapForbidden = false;
                    }
                }).show();
            }
        });
        xAxisArrow.setVisibility(View.VISIBLE);
    } else {
        xAxis.setOnClickListener(null);
        xAxis.setBackgroundResource(0);
        xAxisArrow.setVisibility(View.GONE);
    }
    refreshChart(chart, forceFitTrackOnMap);
}
Also used : OnChartValueSelectedListener(com.github.mikephil.charting.listener.OnChartValueSelectedListener) Highlight(com.github.mikephil.charting.highlight.Highlight) OsmandApplication(net.osmand.plus.OsmandApplication) GpxDisplayItem(net.osmand.plus.track.helpers.GpxSelectionHelper.GpxDisplayItem) ArrayList(java.util.ArrayList) ChartGesture(com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture) Entry(com.github.mikephil.charting.data.Entry) Matrix(android.graphics.Matrix) ILineDataSet(com.github.mikephil.charting.interfaces.datasets.ILineDataSet) GPXDataSetType(net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType) TextView(android.widget.TextView) List(java.util.List) ArrayList(java.util.ArrayList) ImageView(android.widget.ImageView) MapActivity(net.osmand.plus.activities.MapActivity) OnChartGestureListener(com.github.mikephil.charting.listener.OnChartGestureListener) GPXTrackAnalysis(net.osmand.GPXUtilities.GPXTrackAnalysis) Drawable(android.graphics.drawable.Drawable) PopUpMenuItem(net.osmand.plus.widgets.popup.PopUpMenuItem) ImageView(android.widget.ImageView) View(android.view.View) AdapterView(android.widget.AdapterView) TextView(android.widget.TextView) TopToolbarView(net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarView) GpxMarkerView(net.osmand.plus.track.GpxMarkerView) MotionEvent(android.view.MotionEvent) UiUtilities(net.osmand.plus.utils.UiUtilities) PopUpMenuHelper(net.osmand.plus.widgets.popup.PopUpMenuHelper) LineData(com.github.mikephil.charting.data.LineData) GPXDataSetAxisType(net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType) OrderedLineDataSet(net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet) AdapterView(android.widget.AdapterView) LineChart(com.github.mikephil.charting.charts.LineChart) GpxMarkerView(net.osmand.plus.track.GpxMarkerView)

Example 4 with PopUpMenuItem

use of net.osmand.plus.widgets.popup.PopUpMenuItem in project Osmand by osmandapp.

the class MapWidgetRegistry method showPopUpMenu.

public void showPopUpMenu(@NonNull MapActivity mapActivity, @NonNull View view, @NonNull final ArrayAdapter<ContextMenuItem> adapter, @Nullable final WidgetState widgetState, @Nullable final String message, @NonNull ApplicationMode mode, @NonNull OnClickListener showBtnListener, @NonNull OnClickListener hideBtnListener, @Nullable OnClickListener collapseBtnListener, boolean selected, final int pos) {
    final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
    final int currentModeColor = mode.getProfileColor(nightMode);
    View parentView = view.findViewById(R.id.text_wrapper);
    List<PopUpMenuItem> items = new ArrayList<>();
    UiUtilities uiUtilities = app.getUIUtilities();
    if (widgetState != null) {
        final int[] menuIconIds = widgetState.getMenuIconIds();
        final int[] menuTitleIds = widgetState.getMenuTitleIds();
        final int[] menuItemIds = widgetState.getMenuItemIds();
        if (menuIconIds != null && menuTitleIds != null && menuItemIds != null && menuIconIds.length == menuTitleIds.length && menuIconIds.length == menuItemIds.length) {
            for (int i = 0; i < menuIconIds.length; i++) {
                int iconId = menuIconIds[i];
                int titleId = menuTitleIds[i];
                final int id = menuItemIds[i];
                boolean checkedItem = id == widgetState.getMenuItemId();
                Drawable icon = checkedItem && selected ? uiUtilities.getPaintedIcon(iconId, currentModeColor) : uiUtilities.getThemedIcon(iconId);
                items.add(new PopUpMenuItem.Builder(app).setTitle(getString(titleId)).setIcon(icon).setOnClickListener(v -> {
                    widgetState.changeState(id);
                    MapInfoLayer mil = mapActivity.getMapLayers().getMapInfoLayer();
                    if (mil != null) {
                        mil.recreateControls();
                    }
                    ContextMenuItem item = adapter.getItem(pos);
                    item.setIcon(widgetState.getMenuIconId());
                    if (message != null) {
                        item.setTitle(message);
                    } else {
                        item.setTitle(getString(widgetState.getMenuTitleId()));
                    }
                    adapter.notifyDataSetChanged();
                }).showCompoundBtn(currentModeColor).setSelected(checkedItem).create());
            }
        }
    }
    // show
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_show).setIcon(uiUtilities.getThemedIcon(R.drawable.ic_action_view)).setOnClickListener(showBtnListener).showTopDivider(items.size() > 0).create());
    // hide
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_hide).setIcon(uiUtilities.getThemedIcon(R.drawable.ic_action_hide)).setOnClickListener(hideBtnListener).create());
    // collapse
    if (collapseBtnListener != null) {
        items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_collapse).setIcon(uiUtilities.getThemedIcon(R.drawable.ic_action_widget_collapse)).setOnClickListener(collapseBtnListener).create());
    }
    new PopUpMenuHelper.Builder(parentView, items, nightMode).setWidthType(PopUpMenuWidthType.STANDARD).setBackgroundColor(ColorUtilities.getListBgColor(mapActivity, nightMode)).show();
}
Also used : ContextMenuItem(net.osmand.plus.ContextMenuItem) ArrayList(java.util.ArrayList) Drawable(android.graphics.drawable.Drawable) PopUpMenuItem(net.osmand.plus.widgets.popup.PopUpMenuItem) View(android.view.View) UiUtilities(net.osmand.plus.utils.UiUtilities) PopUpMenuHelper(net.osmand.plus.widgets.popup.PopUpMenuHelper) MapInfoLayer(net.osmand.plus.views.layers.MapInfoLayer)

Example 5 with PopUpMenuItem

use of net.osmand.plus.widgets.popup.PopUpMenuItem in project Osmand by osmandapp.

the class AvailableGPXFragment method openPopUpMenu.

private void openPopUpMenu(View v, final GpxInfo gpxInfo) {
    UiUtilities iconsCache = app.getUIUtilities();
    final List<PopUpMenuItem> items = new ArrayList<>();
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_show_on_map).setIcon(iconsCache.getThemedIcon(R.drawable.ic_show_on_map)).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showGpxOnMap(gpxInfo);
        }
    }).create());
    GPXTrackAnalysis analysis;
    if ((analysis = getGpxTrackAnalysis(gpxInfo, app, null)) != null) {
        if (analysis.totalDistance != 0 && !gpxInfo.currentlyRecordingTrack) {
            items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.analyze_on_map).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_info_dark)).setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    new OpenGpxDetailsTask(gpxInfo).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                }
            }).create());
        }
    }
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_move).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_folder_stroke)).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            moveGpx(gpxInfo);
        }
    }).create());
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_rename).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_edit_dark)).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            FragmentActivity activity = getActivity();
            if (activity != null) {
                FileUtils.renameFile(activity, gpxInfo.file, AvailableGPXFragment.this, false);
            }
        }
    }).create());
    Drawable shareIcon = iconsCache.getThemedIcon((R.drawable.ic_action_gshare_dark));
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_share).setIcon(AndroidUtils.getDrawableForDirection(app, shareIcon)).setOnClickListener(v1 -> {
        Activity activity = getActivity();
        if (activity != null) {
            Uri fileUri = AndroidUtils.getUriForFile(activity, gpxInfo.file);
            Intent sendIntent = new Intent(Intent.ACTION_SEND).putExtra(Intent.EXTRA_STREAM, fileUri).setType("text/plain").addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            AndroidUtils.startActivityIfSafe(activity, sendIntent);
        }
    }).create());
    final OsmEditingPlugin osmEditingPlugin = OsmandPlugin.getActivePlugin(OsmEditingPlugin.class);
    if (osmEditingPlugin != null) {
        items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_export).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_export)).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                osmEditingPlugin.sendGPXFiles(getActivity(), AvailableGPXFragment.this, gpxInfo);
            }
        }).create());
    }
    items.add(new PopUpMenuItem.Builder(app).setTitleId(R.string.shared_string_delete).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_delete_dark)).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setMessage(R.string.recording_delete_confirm);
            builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    operationTask = new DeleteGpxTask();
                    operationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, gpxInfo);
                }
            });
            builder.setNegativeButton(R.string.shared_string_cancel, null);
            builder.show();
        }
    }).create());
    new PopUpMenuHelper.Builder(v, items, nightMode).show();
}
Also used : AlertDialog(androidx.appcompat.app.AlertDialog) DialogInterface(android.content.DialogInterface) ArrayList(java.util.ArrayList) GPXTrackAnalysis(net.osmand.GPXUtilities.GPXTrackAnalysis) Drawable(android.graphics.drawable.Drawable) MapActivity(net.osmand.plus.activities.MapActivity) FragmentActivity(androidx.fragment.app.FragmentActivity) Activity(android.app.Activity) Intent(android.content.Intent) PopUpMenuItem(net.osmand.plus.widgets.popup.PopUpMenuItem) ImageView(android.widget.ImageView) SearchView(androidx.appcompat.widget.SearchView) View(android.view.View) TextView(android.widget.TextView) AbsListView(android.widget.AbsListView) ExpandableListView(android.widget.ExpandableListView) Uri(android.net.Uri) OsmEditingPlugin(net.osmand.plus.plugins.osmedit.OsmEditingPlugin) UiUtilities(net.osmand.plus.utils.UiUtilities) FragmentActivity(androidx.fragment.app.FragmentActivity) PopUpMenuHelper(net.osmand.plus.widgets.popup.PopUpMenuHelper)

Aggregations

View (android.view.View)6 ArrayList (java.util.ArrayList)6 PopUpMenuItem (net.osmand.plus.widgets.popup.PopUpMenuItem)6 Drawable (android.graphics.drawable.Drawable)5 TextView (android.widget.TextView)4 PopUpMenuHelper (net.osmand.plus.widgets.popup.PopUpMenuHelper)4 ImageView (android.widget.ImageView)3 List (java.util.List)3 MapActivity (net.osmand.plus.activities.MapActivity)3 UiUtilities (net.osmand.plus.utils.UiUtilities)3 Activity (android.app.Activity)2 AbsListView (android.widget.AbsListView)2 ExpandableListView (android.widget.ExpandableListView)2 ImageButton (android.widget.ImageButton)2 SearchView (androidx.appcompat.widget.SearchView)2 FragmentActivity (androidx.fragment.app.FragmentActivity)2 GPXTrackAnalysis (net.osmand.GPXUtilities.GPXTrackAnalysis)2 ContextMenuItem (net.osmand.plus.ContextMenuItem)2 OsmandApplication (net.osmand.plus.OsmandApplication)2 TracksSortByMode (net.osmand.plus.settings.enums.TracksSortByMode)2