Search in sources :

Example 6 with MapMarkersGroup

use of net.osmand.plus.MapMarkersHelper.MapMarkersGroup in project Osmand by osmandapp.

the class TrackPointFragment method addOrRemoveMapMarkersSyncGroup.

private void addOrRemoveMapMarkersSyncGroup() {
    final MapMarkersHelper markersHelper = app.getMapMarkersHelper();
    final MapMarkersGroup markersGr = markersHelper.getOrCreateGroup(getGpxDataItem().getFile());
    final boolean synced = markersHelper.isGroupSynced(markersGr.getId());
    if (synced) {
        markersHelper.removeMarkersGroup(markersGr);
    } else {
        markersHelper.addOrEnableGroup(markersGr);
    }
    getActionBarActivity().invalidateOptionsMenu();
    GPXFile gpxFile = getTrackActivity().getGpx();
    if (gpxFile != null) {
        app.getSelectedGpxHelper().selectGpxFile(gpxFile, true, false);
    }
    hideTransparentOverlay();
    closeMenu();
    updateMenuFabVisibility(false);
    Snackbar snackbar = Snackbar.make(mainView, synced ? R.string.waypoints_removed_from_map_markers : R.string.waypoints_added_to_map_markers, Snackbar.LENGTH_LONG).setAction(synced ? R.string.shared_string_undo : R.string.view, new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (synced) {
                markersHelper.addOrEnableGroup(markersGr);
                getActionBarActivity().invalidateOptionsMenu();
            } else {
                Bundle args = new Bundle();
                args.putString(MapMarkersGroup.MARKERS_SYNC_GROUP_ID, markersGr.getId());
                MapActivity.launchMapActivityMoveToTop(getTrackActivity(), MapMarkersDialogFragment.OPEN_MAP_MARKERS_GROUPS, args);
            }
        }
    });
    snackbar.addCallback(new Snackbar.Callback() {

        @Override
        public void onDismissed(Snackbar transientBottomBar, int event) {
            updateMenuFabVisibility(true);
            super.onDismissed(transientBottomBar, event);
        }
    });
    AndroidUtils.setSnackbarTextColor(snackbar, R.color.color_dialog_buttons_dark);
    snackbar.show();
}
Also used : MapMarkersHelper(net.osmand.plus.MapMarkersHelper) Bundle(android.os.Bundle) MapMarkersGroup(net.osmand.plus.MapMarkersHelper.MapMarkersGroup) GPXFile(net.osmand.plus.GPXUtilities.GPXFile) SearchView(android.support.v7.widget.SearchView) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) ListView(android.widget.ListView) AbsListView(android.widget.AbsListView) ExpandableListView(android.widget.ExpandableListView) FavouritePoint(net.osmand.data.FavouritePoint) Snackbar(android.support.design.widget.Snackbar)

Example 7 with MapMarkersGroup

use of net.osmand.plus.MapMarkersHelper.MapMarkersGroup in project Osmand by osmandapp.

the class SelectWptCategoriesBottomSheetDialogFragment method onRightBottomButtonClick.

@Override
protected void onRightBottomButtonClick() {
    OsmandApplication app = getMyApplication();
    GpxSelectionHelper gpxSelectionHelper = app.getSelectedGpxHelper();
    MapMarkersHelper mapMarkersHelper = app.getMapMarkersHelper();
    SelectedGpxFile selectedGpxFile = gpxSelectionHelper.getSelectedFileByPath(gpxFile.path);
    if (selectedGpxFile == null) {
        gpxSelectionHelper.selectGpxFile(gpxFile, true, false);
    }
    MapMarkersGroup markersGr = mapMarkersHelper.getOrCreateGroup(new File(gpxFile.path));
    mapMarkersHelper.updateGroupWptCategories(markersGr, selectedCategories);
    mapMarkersHelper.addOrEnableGroup(markersGr);
    dismiss();
}
Also used : OsmandApplication(net.osmand.plus.OsmandApplication) MapMarkersHelper(net.osmand.plus.MapMarkersHelper) SelectedGpxFile(net.osmand.plus.GpxSelectionHelper.SelectedGpxFile) MapMarkersGroup(net.osmand.plus.MapMarkersHelper.MapMarkersGroup) GpxSelectionHelper(net.osmand.plus.GpxSelectionHelper) SelectedGpxFile(net.osmand.plus.GpxSelectionHelper.SelectedGpxFile) GPXFile(net.osmand.plus.GPXUtilities.GPXFile) File(java.io.File)

Example 8 with MapMarkersGroup

use of net.osmand.plus.MapMarkersHelper.MapMarkersGroup in project Osmand by osmandapp.

the class MapMarkersGroupsAdapter method onBindViewHolder.

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    IconsCache iconsCache = app.getIconsCache();
    if (holder instanceof MapMarkerItemViewHolder) {
        final MapMarkerItemViewHolder itemViewHolder = (MapMarkerItemViewHolder) holder;
        final MapMarker marker = (MapMarker) getItem(position);
        final boolean markerInHistory = marker.history;
        int color;
        if (marker.history) {
            color = R.color.icon_color_light;
        } else {
            color = MapMarker.getColorId(marker.colorIndex);
        }
        ImageView markerImageViewToUpdate;
        int drawableResToUpdate;
        final boolean markerToHighlight = showDirectionMarkers.contains(marker);
        if (showDirectionEnabled && markerToHighlight) {
            itemViewHolder.iconDirection.setVisibility(View.GONE);
            itemViewHolder.icon.setImageDrawable(iconsCache.getIcon(R.drawable.ic_arrow_marker_diretion, color));
            itemViewHolder.mainLayout.setBackgroundColor(ContextCompat.getColor(mapActivity, night ? R.color.list_divider_dark : R.color.markers_top_bar_background));
            itemViewHolder.title.setTextColor(ContextCompat.getColor(mapActivity, R.color.color_white));
            itemViewHolder.divider.setBackgroundColor(ContextCompat.getColor(mapActivity, R.color.map_markers_on_map_divider_color));
            itemViewHolder.optionsBtn.setBackgroundDrawable(mapActivity.getResources().getDrawable(R.drawable.marker_circle_background_on_map_with_inset));
            itemViewHolder.optionsBtn.setImageDrawable(iconsCache.getIcon(markerInHistory ? R.drawable.ic_action_reset_to_default_dark : R.drawable.ic_action_marker_passed, R.color.color_white));
            itemViewHolder.description.setTextColor(ContextCompat.getColor(mapActivity, R.color.map_markers_on_map_color));
            drawableResToUpdate = R.drawable.ic_arrow_marker_diretion;
            markerImageViewToUpdate = itemViewHolder.icon;
        } else {
            itemViewHolder.iconDirection.setVisibility(View.VISIBLE);
            itemViewHolder.icon.setImageDrawable(iconsCache.getIcon(R.drawable.ic_action_flag_dark, color));
            itemViewHolder.mainLayout.setBackgroundColor(ContextCompat.getColor(mapActivity, night ? R.color.bg_color_dark : R.color.bg_color_light));
            itemViewHolder.title.setTextColor(ContextCompat.getColor(mapActivity, night ? R.color.color_white : R.color.color_black));
            itemViewHolder.divider.setBackgroundColor(ContextCompat.getColor(mapActivity, night ? R.color.actionbar_dark_color : R.color.dashboard_divider_light));
            itemViewHolder.optionsBtn.setBackgroundDrawable(mapActivity.getResources().getDrawable(night ? R.drawable.marker_circle_background_dark_with_inset : R.drawable.marker_circle_background_light_with_inset));
            itemViewHolder.optionsBtn.setImageDrawable(iconsCache.getThemedIcon(markerInHistory ? R.drawable.ic_action_reset_to_default_dark : R.drawable.ic_action_marker_passed));
            itemViewHolder.description.setTextColor(ContextCompat.getColor(mapActivity, night ? R.color.dash_search_icon_dark : R.color.icon_color));
            drawableResToUpdate = R.drawable.ic_direction_arrow;
            markerImageViewToUpdate = itemViewHolder.iconDirection;
        }
        itemViewHolder.title.setText(marker.getName(app));
        boolean noGroup = marker.groupName == null;
        boolean createdEarly = false;
        if (noGroup && !markerInHistory) {
            Calendar currentDateCalendar = Calendar.getInstance();
            currentDateCalendar.setTimeInMillis(System.currentTimeMillis());
            int currentDay = currentDateCalendar.get(Calendar.DAY_OF_YEAR);
            int currentYear = currentDateCalendar.get(Calendar.YEAR);
            Calendar markerCalendar = Calendar.getInstance();
            markerCalendar.setTimeInMillis(System.currentTimeMillis());
            int markerDay = markerCalendar.get(Calendar.DAY_OF_YEAR);
            int markerYear = markerCalendar.get(Calendar.YEAR);
            createdEarly = currentDay - markerDay >= 2 || currentYear != markerYear;
        }
        if (markerInHistory || createdEarly) {
            itemViewHolder.point.setVisibility(View.VISIBLE);
            itemViewHolder.description.setVisibility(View.VISIBLE);
            Date date;
            if (markerInHistory) {
                date = new Date(marker.visitedDate);
            } else {
                date = new Date(marker.creationDate);
            }
            String month = new SimpleDateFormat("MMM", Locale.getDefault()).format(date);
            if (month.length() > 1) {
                month = Character.toUpperCase(month.charAt(0)) + month.substring(1);
            }
            month = month.replaceAll("\\.", "");
            String day = new SimpleDateFormat("d", Locale.getDefault()).format(date);
            itemViewHolder.description.setText(app.getString(R.string.passed, month + " " + day));
        } else {
            itemViewHolder.point.setVisibility(View.GONE);
            itemViewHolder.description.setVisibility(View.GONE);
        }
        itemViewHolder.optionsBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                int position = itemViewHolder.getAdapterPosition();
                if (position < 0) {
                    return;
                }
                if (markerInHistory) {
                    app.getMapMarkersHelper().restoreMarkerFromHistory(marker, 0);
                } else {
                    app.getMapMarkersHelper().moveMapMarkerToHistory(marker);
                }
                updateDisplayedData();
                if (!markerInHistory) {
                    snackbar = Snackbar.make(itemViewHolder.itemView, R.string.marker_moved_to_history, Snackbar.LENGTH_LONG).setAction(R.string.shared_string_undo, new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {
                            mapActivity.getMyApplication().getMapMarkersHelper().restoreMarkerFromHistory(marker, 0);
                            updateDisplayedData();
                        }
                    });
                    AndroidUtils.setSnackbarTextColor(snackbar, R.color.color_dialog_buttons_dark);
                    snackbar.show();
                }
            }
        });
        itemViewHolder.iconReorder.setVisibility(View.GONE);
        itemViewHolder.flagIconLeftSpace.setVisibility(View.VISIBLE);
        boolean lastItem = position == getItemCount() - 1;
        if ((getItemCount() > position + 1 && getItemViewType(position + 1) == HEADER_TYPE) || lastItem) {
            itemViewHolder.divider.setVisibility(View.GONE);
        } else {
            itemViewHolder.divider.setVisibility(View.VISIBLE);
        }
        itemViewHolder.bottomShadow.setVisibility(lastItem ? View.VISIBLE : View.GONE);
        LatLon markerLatLon = new LatLon(marker.getLatitude(), marker.getLongitude());
        DashLocationFragment.updateLocationView(useCenter, location, heading, markerImageViewToUpdate, drawableResToUpdate, markerToHighlight ? color : 0, itemViewHolder.distance, markerLatLon, screenOrientation, app, mapActivity, true);
    } else if (holder instanceof MapMarkerHeaderViewHolder) {
        final MapMarkerHeaderViewHolder headerViewHolder = (MapMarkerHeaderViewHolder) holder;
        final Object header = getItem(position);
        String headerString;
        if (header instanceof Integer) {
            headerViewHolder.icon.setVisibility(View.GONE);
            headerViewHolder.iconSpace.setVisibility(View.VISIBLE);
            Integer dateHeader = (Integer) header;
            if (dateHeader == TODAY_HEADER) {
                headerString = app.getString(R.string.today);
            } else if (dateHeader == YESTERDAY_HEADER) {
                headerString = app.getString(R.string.yesterday);
            } else if (dateHeader == LAST_SEVEN_DAYS_HEADER) {
                headerString = app.getString(R.string.last_seven_days);
            } else if (dateHeader == THIS_YEAR_HEADER) {
                headerString = app.getString(R.string.this_year);
            } else if (dateHeader / 100 == 0) {
                headerString = getMonth(dateHeader);
            } else {
                headerString = String.valueOf(dateHeader);
            }
            headerViewHolder.disableGroupSwitch.setVisibility(View.GONE);
        } else if (header instanceof GroupHeader) {
            final GroupHeader groupHeader = (GroupHeader) header;
            final MapMarkersGroup group = groupHeader.getGroup();
            String groupName = group.getName();
            if (groupName.equals("")) {
                groupName = app.getString(R.string.shared_string_favorites);
            } else if (group.getType() == MapMarkersGroup.GPX_TYPE) {
                groupName = groupName.replace(".gpx", "").replace("/", " ").replace("_", " ");
            }
            if (group.isDisabled()) {
                headerString = groupName;
            } else {
                headerString = groupName + " \u2014 " + group.getActiveMarkers().size() + "/" + group.getMarkers().size();
            }
            headerViewHolder.icon.setVisibility(View.VISIBLE);
            headerViewHolder.iconSpace.setVisibility(View.GONE);
            headerViewHolder.icon.setImageDrawable(iconsCache.getIcon(groupHeader.getIconRes(), R.color.divider_color));
            boolean groupIsDisabled = group.isDisabled();
            headerViewHolder.disableGroupSwitch.setVisibility(View.VISIBLE);
            CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean enabled) {
                    final MapMarkersHelper mapMarkersHelper = app.getMapMarkersHelper();
                    final GPXFile[] gpxFile = new GPXFile[1];
                    boolean disabled = !enabled;
                    boolean synced = false;
                    mapMarkersHelper.updateGroupDisabled(group, disabled);
                    if (group.getType() == MapMarkersGroup.GPX_TYPE) {
                        group.setVisibleUntilRestart(disabled);
                        String gpxPath = group.getId();
                        if (disabled) {
                            SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(gpxPath);
                            if (selectedGpxFile != null) {
                                gpxFile[0] = selectedGpxFile.getGpxFile();
                                switchGpxVisibility(gpxFile[0], false);
                            }
                        } else if (mapMarkersHelper.isGroupSynced(group.getId())) {
                            mapMarkersHelper.runSynchronization(group, true);
                            synced = true;
                        }
                    }
                    if (!synced) {
                        if (mapMarkersHelper.isGroupSynced(group.getId())) {
                            mapMarkersHelper.runSynchronization(group);
                        } else {
                            mapMarkersHelper.addOrEnableGroup(group);
                        }
                    }
                    if (disabled) {
                        snackbar = Snackbar.make(holder.itemView, app.getString(R.string.group_will_be_removed_after_restart), Snackbar.LENGTH_LONG).setAction(R.string.shared_string_undo, new View.OnClickListener() {

                            @Override
                            public void onClick(View view) {
                                if (group.getType() == MapMarkersGroup.GPX_TYPE && gpxFile[0] != null) {
                                    switchGpxVisibility(gpxFile[0], true);
                                }
                                mapMarkersHelper.addOrEnableGroup(group);
                            }
                        });
                        AndroidUtils.setSnackbarTextColor(snackbar, R.color.color_dialog_buttons_dark);
                        snackbar.show();
                    }
                }
            };
            headerViewHolder.disableGroupSwitch.setOnCheckedChangeListener(null);
            headerViewHolder.disableGroupSwitch.setChecked(!groupIsDisabled);
            headerViewHolder.disableGroupSwitch.setOnCheckedChangeListener(checkedChangeListener);
        } else {
            throw new IllegalArgumentException("Unsupported header");
        }
        headerViewHolder.title.setText(headerString);
        headerViewHolder.bottomShadow.setVisibility(position == getItemCount() - 1 ? View.VISIBLE : View.GONE);
    } else if (holder instanceof MapMarkersShowHideHistoryViewHolder) {
        final MapMarkersShowHideHistoryViewHolder showHideHistoryViewHolder = (MapMarkersShowHideHistoryViewHolder) holder;
        final ShowHideHistoryButton showHideHistoryButton = (ShowHideHistoryButton) getItem(position);
        final boolean showHistory = showHideHistoryButton.showHistory;
        if (position == getItemCount() - 1) {
            showHideHistoryViewHolder.bottomShadow.setVisibility(View.VISIBLE);
        } else {
            showHideHistoryViewHolder.bottomShadow.setVisibility(View.GONE);
        }
        showHideHistoryViewHolder.title.setText(app.getString(showHistory ? R.string.hide_passed : R.string.show_passed));
        showHideHistoryViewHolder.itemView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                showHideHistoryButton.showHistory = !showHistory;
                createDisplayGroups();
                notifyDataSetChanged();
            }
        });
    }
}
Also used : MapMarker(net.osmand.plus.MapMarkersHelper.MapMarker) GroupHeader(net.osmand.plus.MapMarkersHelper.GroupHeader) MapMarkersGroup(net.osmand.plus.MapMarkersHelper.MapMarkersGroup) ImageView(android.widget.ImageView) Calendar(java.util.Calendar) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) Date(java.util.Date) LatLon(net.osmand.data.LatLon) MapMarkersHelper(net.osmand.plus.MapMarkersHelper) SelectedGpxFile(net.osmand.plus.GpxSelectionHelper.SelectedGpxFile) ShowHideHistoryButton(net.osmand.plus.MapMarkersHelper.ShowHideHistoryButton) IconsCache(net.osmand.plus.IconsCache) GPXFile(net.osmand.plus.GPXUtilities.GPXFile) SimpleDateFormat(java.text.SimpleDateFormat) CompoundButton(android.widget.CompoundButton)

Example 9 with MapMarkersGroup

use of net.osmand.plus.MapMarkersHelper.MapMarkersGroup in project Osmand by osmandapp.

the class MapMarkersDbHelper method getAllGroupsMap.

public Map<String, MapMarkersGroup> getAllGroupsMap() {
    Map<String, MapMarkersGroup> res = new LinkedHashMap<>();
    SQLiteConnection db = openConnection(true);
    if (db != null) {
        try {
            SQLiteCursor query = db.rawQuery(GROUPS_TABLE_SELECT, null);
            if (query.moveToFirst()) {
                do {
                    MapMarkersGroup group = readGroup(query);
                    res.put(group.getId(), group);
                } while (query.moveToNext());
            }
            query.close();
        } finally {
            db.close();
        }
    }
    return res;
}
Also used : SQLiteConnection(net.osmand.plus.api.SQLiteAPI.SQLiteConnection) MapMarkersGroup(net.osmand.plus.MapMarkersHelper.MapMarkersGroup) SQLiteCursor(net.osmand.plus.api.SQLiteAPI.SQLiteCursor) LinkedHashMap(java.util.LinkedHashMap)

Example 10 with MapMarkersGroup

use of net.osmand.plus.MapMarkersHelper.MapMarkersGroup in project Osmand by osmandapp.

the class FavoritesTreeFragment method selectMapMarkersImpl.

private void selectMapMarkersImpl() {
    if (getSelectedFavoritesCount() > 0) {
        MapMarkersHelper markersHelper = getMyApplication().getMapMarkersHelper();
        List<LatLon> points = new ArrayList<>();
        List<PointDescription> names = new ArrayList<>();
        for (Map.Entry<String, Set<FavouritePoint>> entry : favoritesSelected.entrySet()) {
            FavoriteGroup favGr = helper.getGroup(entry.getKey());
            MapMarkersGroup markersGr = markersHelper.getOrCreateGroup(favGr);
            if (entry.getValue().size() == favGr.points.size()) {
                markersHelper.addOrEnableGroup(markersGr);
            } else {
                for (FavouritePoint fp : entry.getValue()) {
                    points.add(new LatLon(fp.getLatitude(), fp.getLongitude()));
                    names.add(new PointDescription(PointDescription.POINT_TYPE_MAP_MARKER, fp.getName()));
                }
                markersHelper.addMapMarkers(points, names, markersGr);
                points.clear();
                names.clear();
            }
        }
        MapActivity.launchMapActivityMoveToTop(getActivity());
    }
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet) FavouritePoint(net.osmand.data.FavouritePoint) FavoriteGroup(net.osmand.plus.FavouritesDbHelper.FavoriteGroup) ArrayList(java.util.ArrayList) LatLon(net.osmand.data.LatLon) MapMarkersHelper(net.osmand.plus.MapMarkersHelper) PointDescription(net.osmand.data.PointDescription) MapMarkersGroup(net.osmand.plus.MapMarkersHelper.MapMarkersGroup) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Aggregations

MapMarkersGroup (net.osmand.plus.MapMarkersHelper.MapMarkersGroup)10 MapMarkersHelper (net.osmand.plus.MapMarkersHelper)7 View (android.view.View)3 ImageView (android.widget.ImageView)3 GPXFile (net.osmand.plus.GPXUtilities.GPXFile)3 Bundle (android.os.Bundle)2 SearchView (android.support.v7.widget.SearchView)2 TextView (android.widget.TextView)2 ArrayList (java.util.ArrayList)2 Calendar (java.util.Calendar)2 LinkedHashMap (java.util.LinkedHashMap)2 FavouritePoint (net.osmand.data.FavouritePoint)2 LatLon (net.osmand.data.LatLon)2 SelectedGpxFile (net.osmand.plus.GpxSelectionHelper.SelectedGpxFile)2 GroupHeader (net.osmand.plus.MapMarkersHelper.GroupHeader)2 MapMarker (net.osmand.plus.MapMarkersHelper.MapMarker)2 OsmandApplication (net.osmand.plus.OsmandApplication)2 DialogInterface (android.content.DialogInterface)1 Handler (android.os.Handler)1 Snackbar (android.support.design.widget.Snackbar)1