Search in sources :

Example 1 with GroupHeader

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

the class MapMarkersGroupsAdapter method createDisplayGroups.

private void createDisplayGroups() {
    items = new ArrayList<>();
    MapMarkersHelper helper = app.getMapMarkersHelper();
    helper.updateGroups();
    List<MapMarkersGroup> groups = new ArrayList<>(helper.getMapMarkersGroups());
    groups.addAll(helper.getGroupsForDisplayedGpx());
    for (int i = 0; i < groups.size(); i++) {
        MapMarkersGroup group = groups.get(i);
        if (!group.isVisible()) {
            continue;
        }
        String markerGroupName = group.getName();
        if (markerGroupName == null) {
            int previousDateHeader = -1;
            int monthsDisplayed = 0;
            Calendar currentDateCalendar = Calendar.getInstance();
            currentDateCalendar.setTimeInMillis(System.currentTimeMillis());
            int currentDay = currentDateCalendar.get(Calendar.DAY_OF_YEAR);
            int currentMonth = currentDateCalendar.get(Calendar.MONTH);
            int currentYear = currentDateCalendar.get(Calendar.YEAR);
            Calendar markerCalendar = Calendar.getInstance();
            List<MapMarker> groupMarkers = group.getActiveMarkers();
            for (int j = 0; j < groupMarkers.size(); j++) {
                MapMarker marker = groupMarkers.get(j);
                markerCalendar.setTimeInMillis(marker.creationDate);
                int markerDay = markerCalendar.get(Calendar.DAY_OF_YEAR);
                int markerMonth = markerCalendar.get(Calendar.MONTH);
                int markerYear = markerCalendar.get(Calendar.YEAR);
                if (markerYear == currentYear) {
                    if (markerDay == currentDay && previousDateHeader != TODAY_HEADER) {
                        items.add(TODAY_HEADER);
                        previousDateHeader = TODAY_HEADER;
                    } else if (markerDay == currentDay - 1 && previousDateHeader != YESTERDAY_HEADER) {
                        items.add(YESTERDAY_HEADER);
                        previousDateHeader = YESTERDAY_HEADER;
                    } else if (currentDay - markerDay >= 2 && currentDay - markerDay <= 8 && previousDateHeader != LAST_SEVEN_DAYS_HEADER) {
                        items.add(LAST_SEVEN_DAYS_HEADER);
                        previousDateHeader = LAST_SEVEN_DAYS_HEADER;
                    } else if (currentDay - markerDay > 8 && monthsDisplayed < 3 && previousDateHeader != markerMonth) {
                        items.add(markerMonth);
                        previousDateHeader = markerMonth;
                        monthsDisplayed += 1;
                    } else if (currentMonth - markerMonth >= 4 && previousDateHeader != THIS_YEAR_HEADER) {
                        items.add(THIS_YEAR_HEADER);
                        previousDateHeader = THIS_YEAR_HEADER;
                    }
                } else if (previousDateHeader != markerYear) {
                    items.add(markerYear);
                    previousDateHeader = markerYear;
                }
                items.add(marker);
            }
        } else {
            GroupHeader header = group.getGroupHeader();
            items.add(header);
            populateAdapterWithGroupMarkers(group, getItemCount());
        }
    }
}
Also used : MapMarkersHelper(net.osmand.plus.MapMarkersHelper) MapMarker(net.osmand.plus.MapMarkersHelper.MapMarker) Calendar(java.util.Calendar) GroupHeader(net.osmand.plus.MapMarkersHelper.GroupHeader) ArrayList(java.util.ArrayList) MapMarkersGroup(net.osmand.plus.MapMarkersHelper.MapMarkersGroup)

Example 2 with GroupHeader

use of net.osmand.plus.MapMarkersHelper.GroupHeader 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)

Aggregations

Calendar (java.util.Calendar)2 MapMarkersHelper (net.osmand.plus.MapMarkersHelper)2 GroupHeader (net.osmand.plus.MapMarkersHelper.GroupHeader)2 MapMarker (net.osmand.plus.MapMarkersHelper.MapMarker)2 MapMarkersGroup (net.osmand.plus.MapMarkersHelper.MapMarkersGroup)2 RecyclerView (android.support.v7.widget.RecyclerView)1 View (android.view.View)1 CompoundButton (android.widget.CompoundButton)1 ImageView (android.widget.ImageView)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 LatLon (net.osmand.data.LatLon)1 GPXFile (net.osmand.plus.GPXUtilities.GPXFile)1 SelectedGpxFile (net.osmand.plus.GpxSelectionHelper.SelectedGpxFile)1 IconsCache (net.osmand.plus.IconsCache)1 ShowHideHistoryButton (net.osmand.plus.MapMarkersHelper.ShowHideHistoryButton)1