Search in sources :

Example 1 with FileSubtype

use of net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype in project Osmand by osmandapp.

the class ImportDuplicatesFragment method prepareDuplicates.

protected List<Object> prepareDuplicates(List<? super Object> duplicatesList) {
    List<? super Object> duplicates = new ArrayList<>();
    List<ApplicationMode.ApplicationModeBean> profiles = new ArrayList<>();
    List<QuickAction> actions = new ArrayList<>();
    List<PoiUIFilter> filters = new ArrayList<>();
    List<ITileSource> tileSources = new ArrayList<>();
    List<File> renderFilesList = new ArrayList<>();
    List<File> routingFilesList = new ArrayList<>();
    List<File> multimediaFilesList = new ArrayList<>();
    List<File> trackFilesList = new ArrayList<>();
    List<AvoidRoadInfo> avoidRoads = new ArrayList<>();
    List<FavoriteGroup> favoriteGroups = new ArrayList<>();
    List<OsmNotesPoint> osmNotesPointList = new ArrayList<>();
    List<OpenstreetmapPoint> osmEditsPointList = new ArrayList<>();
    List<File> ttsVoiceFilesList = new ArrayList<>();
    List<File> voiceFilesList = new ArrayList<>();
    List<File> mapFilesList = new ArrayList<>();
    List<MapMarker> mapMarkers = new ArrayList<>();
    List<MapMarker> mapMarkersHistory = new ArrayList<>();
    List<HistoryEntry> historyEntries = new ArrayList<>();
    List<OnlineRoutingEngine> onlineRoutingEngines = new ArrayList<>();
    List<MapMarkersGroup> itineraryGroups = new ArrayList<>();
    for (Object object : duplicatesList) {
        if (object instanceof ApplicationMode.ApplicationModeBean) {
            profiles.add((ApplicationMode.ApplicationModeBean) object);
        } else if (object instanceof QuickAction) {
            actions.add((QuickAction) object);
        } else if (object instanceof PoiUIFilter) {
            filters.add((PoiUIFilter) object);
        } else if (object instanceof ITileSource) {
            tileSources.add((ITileSource) object);
        } else if (object instanceof File) {
            File file = (File) object;
            FileSubtype fileSubtype = FileSubtype.getSubtypeByPath(app, file.getPath());
            if (fileSubtype == FileSubtype.RENDERING_STYLE) {
                renderFilesList.add(file);
            } else if (fileSubtype == FileSubtype.ROUTING_CONFIG) {
                routingFilesList.add(file);
            } else if (fileSubtype == FileSubtype.MULTIMEDIA_NOTES) {
                multimediaFilesList.add(file);
            } else if (fileSubtype == FileSubtype.GPX) {
                trackFilesList.add(file);
            } else if (fileSubtype.isMap()) {
                mapFilesList.add(file);
            } else if (fileSubtype == FileSubtype.TTS_VOICE) {
                ttsVoiceFilesList.add(file);
            } else if (fileSubtype == FileSubtype.VOICE) {
                voiceFilesList.add(file);
            }
        } else if (object instanceof AvoidRoadInfo) {
            avoidRoads.add((AvoidRoadInfo) object);
        } else if (object instanceof FavoriteGroup) {
            favoriteGroups.add((FavoriteGroup) object);
        } else if (object instanceof OsmNotesPoint) {
            osmNotesPointList.add((OsmNotesPoint) object);
        } else if (object instanceof OpenstreetmapPoint) {
            osmEditsPointList.add((OpenstreetmapPoint) object);
        } else if (object instanceof MapMarker) {
            MapMarker mapMarker = (MapMarker) object;
            if (mapMarker.history) {
                mapMarkersHistory.add(mapMarker);
            } else {
                mapMarkers.add(mapMarker);
            }
        } else if (object instanceof HistoryEntry) {
            historyEntries.add((HistoryEntry) object);
        } else if (object instanceof OnlineRoutingEngine) {
            onlineRoutingEngines.add((OnlineRoutingEngine) object);
        } else if (object instanceof MapMarkersGroup) {
            itineraryGroups.add((MapMarkersGroup) object);
        }
    }
    if (!profiles.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_profiles));
        duplicates.addAll(profiles);
    }
    if (!actions.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_quick_actions));
        duplicates.addAll(actions);
    }
    if (!filters.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_poi_types));
        duplicates.addAll(filters);
    }
    if (!tileSources.isEmpty()) {
        duplicates.add(getString(R.string.quick_action_map_source_title));
        duplicates.addAll(tileSources);
    }
    if (!routingFilesList.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_routing));
        duplicates.addAll(routingFilesList);
    }
    if (!renderFilesList.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_rendering_style));
        duplicates.addAll(renderFilesList);
    }
    if (!multimediaFilesList.isEmpty()) {
        duplicates.add(getString(R.string.audionotes_plugin_name));
        duplicates.addAll(multimediaFilesList);
    }
    if (!trackFilesList.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_tracks));
        duplicates.addAll(trackFilesList);
    }
    if (!avoidRoads.isEmpty()) {
        duplicates.add(getString(R.string.avoid_road));
        duplicates.addAll(avoidRoads);
    }
    if (!favoriteGroups.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_favorites));
        duplicates.addAll(favoriteGroups);
    }
    if (!osmNotesPointList.isEmpty()) {
        duplicates.add(getString(R.string.osm_notes));
        duplicates.addAll(osmNotesPointList);
    }
    if (!osmEditsPointList.isEmpty()) {
        duplicates.add(getString(R.string.osm_edits));
        duplicates.addAll(osmEditsPointList);
    }
    if (!mapFilesList.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_maps));
        duplicates.addAll(mapFilesList);
    }
    if (!ttsVoiceFilesList.isEmpty()) {
        duplicates.add(getString(R.string.local_indexes_cat_tts));
        duplicates.addAll(ttsVoiceFilesList);
    }
    if (!voiceFilesList.isEmpty()) {
        duplicates.add(getString(R.string.local_indexes_cat_voice));
        duplicates.addAll(voiceFilesList);
    }
    if (!mapMarkers.isEmpty()) {
        duplicates.add(getString(R.string.map_markers));
        duplicates.addAll(mapMarkers);
    }
    if (!mapMarkersHistory.isEmpty()) {
        duplicates.add(getString(R.string.markers_history));
        duplicates.addAll(mapMarkersHistory);
    }
    if (!onlineRoutingEngines.isEmpty()) {
        duplicates.add(getString(R.string.online_routing_engines));
        duplicates.addAll(onlineRoutingEngines);
    }
    if (!historyEntries.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_search_history));
        duplicates.addAll(historyEntries);
    }
    if (!itineraryGroups.isEmpty()) {
        duplicates.add(getString(R.string.shared_string_itinerary));
        duplicates.addAll(itineraryGroups);
    }
    return duplicates;
}
Also used : QuickAction(net.osmand.plus.quickaction.QuickAction) MapMarker(net.osmand.plus.mapmarkers.MapMarker) OsmNotesPoint(net.osmand.plus.plugins.osmedit.data.OsmNotesPoint) ArrayList(java.util.ArrayList) ApplicationMode(net.osmand.plus.settings.backend.ApplicationMode) OpenstreetmapPoint(net.osmand.plus.plugins.osmedit.data.OpenstreetmapPoint) MapMarkersGroup(net.osmand.plus.mapmarkers.MapMarkersGroup) FavoriteGroup(net.osmand.plus.myplaces.FavoriteGroup) AvoidRoadInfo(net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo) PoiUIFilter(net.osmand.plus.poi.PoiUIFilter) OnlineRoutingEngine(net.osmand.plus.onlinerouting.engine.OnlineRoutingEngine) ITileSource(net.osmand.map.ITileSource) HistoryEntry(net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry) FileSubtype(net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype) File(java.io.File)

Example 2 with FileSubtype

use of net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype in project Osmand by osmandapp.

the class BackupImporter method addRemoteFilesToJson.

private void addRemoteFilesToJson(@NonNull JSONArray itemsJson, @NonNull List<RemoteFile> noInfoRemoteItemFiles) throws JSONException {
    Set<String> fileItems = new HashSet<>();
    for (RemoteFile remoteFile : noInfoRemoteItemFiles) {
        String type = remoteFile.getType();
        String fileName = remoteFile.getName();
        if (type.equals(SettingsItemType.FILE.name()) && fileName.startsWith(FileSubtype.VOICE.getSubtypeFolder())) {
            FileSubtype subtype = FileSubtype.getSubtypeByFileName(fileName);
            int lastSeparatorIndex = fileName.lastIndexOf('/');
            if (lastSeparatorIndex > 0) {
                fileName = fileName.substring(0, lastSeparatorIndex);
            }
            String typeName = subtype + "___" + fileName;
            if (!fileItems.contains(typeName)) {
                fileItems.add(typeName);
                JSONObject itemJson = new JSONObject();
                itemJson.put("type", type);
                itemJson.put("file", fileName);
                itemJson.put("subtype", subtype);
                itemsJson.put(itemJson);
            }
        } else {
            JSONObject itemJson = new JSONObject();
            itemJson.put("type", type);
            itemJson.put("file", fileName);
            itemsJson.put(itemJson);
        }
    }
}
Also used : JSONObject(org.json.JSONObject) FileSubtype(net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype) HashSet(java.util.HashSet)

Example 3 with FileSubtype

use of net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype in project Osmand by osmandapp.

the class ExportItemsBottomSheet method setupBottomSheetItemForFile.

private void setupBottomSheetItemForFile(BottomSheetItemWithCompoundButton item, File file) {
    FileSubtype fileSubtype = FileSubtype.getSubtypeByPath(app, file.getPath());
    item.setTitle(file.getName());
    if (file.getAbsolutePath().contains(IndexConstants.RENDERERS_DIR)) {
        item.setIcon(uiUtilities.getIcon(R.drawable.ic_action_map_style, getItemIconColor(item.getTag())));
    } else if (file.getAbsolutePath().contains(IndexConstants.ROUTING_PROFILES_DIR)) {
        item.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, getItemIconColor(item.getTag())));
    } else if (file.getAbsolutePath().contains(IndexConstants.GPX_INDEX_DIR)) {
        setupBottomSheetItemForGpx(item, file, null);
    } else if (file.getAbsolutePath().contains(IndexConstants.AV_INDEX_DIR)) {
        int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file);
        if (iconId == -1) {
            iconId = R.drawable.ic_action_photo_dark;
        }
        if (item.getTag() instanceof FileSettingsItem) {
            FileSettingsItem settingsItem = (FileSettingsItem) item.getTag();
            item.setTitle(Recording.getNameForMultimediaFile(app, file.getName(), settingsItem.getLastModifiedTime()));
        } else {
            item.setTitle(new Recording(file).getName(app, true));
        }
        item.setIcon(uiUtilities.getIcon(iconId, getItemIconColor(item.getTag())));
        item.setDescription(AndroidUtils.formatSize(app, file.length()));
    } else if (fileSubtype.isMap() || fileSubtype == FileSettingsItem.FileSubtype.TTS_VOICE || fileSubtype == FileSettingsItem.FileSubtype.VOICE) {
        item.setTitle(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName()));
        item.setIcon(uiUtilities.getIcon(fileSubtype.getIconId(), getItemIconColor(item.getTag())));
        if (fileSubtype.isMap()) {
            String mapDescription = getMapDescription(file);
            String formattedSize = AndroidUtils.formatSize(app, file.length());
            if (mapDescription != null) {
                item.setDescription(getString(R.string.ltr_or_rtl_combine_via_bold_point, mapDescription, formattedSize));
            } else {
                item.setDescription(formattedSize);
            }
        }
    }
}
Also used : FileSettingsItem(net.osmand.plus.settings.backend.backup.items.FileSettingsItem) FileSubtype(net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype) Recording(net.osmand.plus.plugins.audionotes.AudioVideoNotesPlugin.Recording)

Example 4 with FileSubtype

use of net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype in project Osmand by osmandapp.

the class DuplicatesSettingsAdapter method onBindViewHolder.

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    Object currentItem = items.get(position);
    if (holder instanceof HeaderViewHolder) {
        HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
        headerHolder.title.setText((String) currentItem);
        headerHolder.subTitle.setText(String.format(app.getString(R.string.listed_exist), currentItem));
        headerHolder.divider.setVisibility(View.VISIBLE);
    } else if (holder instanceof ItemViewHolder) {
        ItemViewHolder itemHolder = (ItemViewHolder) holder;
        itemHolder.subTitle.setVisibility(View.GONE);
        if (currentItem instanceof ApplicationModeBean) {
            ApplicationModeBean modeBean = (ApplicationModeBean) currentItem;
            String profileName = modeBean.userProfileName;
            if (Algorithms.isEmpty(profileName)) {
                ApplicationMode appMode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null);
                if (appMode != null) {
                    profileName = appMode.toHumanString();
                } else {
                    profileName = Algorithms.capitalizeFirstLetter(modeBean.stringKey);
                }
            }
            itemHolder.title.setText(profileName);
            String routingProfile = "";
            String routingProfileValue = modeBean.routingProfile;
            if (!routingProfileValue.isEmpty()) {
                try {
                    routingProfile = app.getString(RoutingProfilesResources.valueOf(routingProfileValue.toUpperCase()).getStringRes());
                    routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfile);
                } catch (IllegalArgumentException e) {
                    routingProfile = Algorithms.capitalizeFirstLetterAndLowercase(routingProfileValue);
                    LOG.error("Error trying to get routing resource for " + routingProfileValue + "\n" + e);
                }
            }
            if (Algorithms.isEmpty(routingProfile)) {
                itemHolder.subTitle.setVisibility(View.GONE);
            } else {
                itemHolder.subTitle.setText(String.format(app.getString(R.string.ltr_or_rtl_combine_via_colon), app.getString(R.string.nav_type_hint), routingProfile));
                itemHolder.subTitle.setVisibility(View.VISIBLE);
            }
            int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName);
            ProfileIconColors iconColor = modeBean.iconColor;
            Integer customIconColor = modeBean.customIconColor;
            int actualIconColor = customIconColor != null ? customIconColor : ContextCompat.getColor(app, iconColor.getColor(nightMode));
            itemHolder.icon.setImageDrawable(uiUtilities.getPaintedIcon(profileIconRes, actualIconColor));
        } else if (currentItem instanceof QuickAction) {
            QuickAction action = (QuickAction) currentItem;
            itemHolder.title.setText(action.getName(app));
            itemHolder.icon.setImageDrawable(uiUtilities.getIcon(action.getIconRes(), activeColorRes));
        } else if (currentItem instanceof PoiUIFilter) {
            PoiUIFilter filter = (PoiUIFilter) currentItem;
            itemHolder.title.setText(filter.getName());
            int iconRes = RenderingIcons.getBigIconResourceId(filter.getIconId());
            itemHolder.icon.setImageDrawable(uiUtilities.getIcon(iconRes != 0 ? iconRes : R.drawable.ic_action_user, activeColorRes));
        } else if (currentItem instanceof ITileSource) {
            itemHolder.title.setText(((ITileSource) currentItem).getName());
            itemHolder.icon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_map, activeColorRes));
        } else if (currentItem instanceof File) {
            File file = (File) currentItem;
            FileSubtype fileSubtype = FileSubtype.getSubtypeByPath(app, file.getPath());
            itemHolder.title.setText(file.getName());
            if (file.getAbsolutePath().contains(IndexConstants.RENDERERS_DIR)) {
                itemHolder.icon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_map_style, activeColorRes));
            } else if (file.getAbsolutePath().contains(IndexConstants.ROUTING_PROFILES_DIR)) {
                itemHolder.icon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes));
            } else if (file.getAbsolutePath().contains(IndexConstants.GPX_INDEX_DIR)) {
                itemHolder.title.setText(GpxUiHelper.getGpxTitle(file.getName()));
                itemHolder.icon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes));
            } else if (file.getAbsolutePath().contains(IndexConstants.AV_INDEX_DIR)) {
                int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file);
                if (iconId == -1) {
                    iconId = R.drawable.ic_action_photo_dark;
                }
                itemHolder.title.setText(new Recording(file).getName(app, true));
                itemHolder.icon.setImageDrawable(uiUtilities.getIcon(iconId, activeColorRes));
            } else if (fileSubtype.isMap() || fileSubtype == FileSubtype.TTS_VOICE || fileSubtype == FileSubtype.VOICE) {
                itemHolder.title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName()));
                itemHolder.icon.setImageDrawable(uiUtilities.getIcon(fileSubtype.getIconId(), activeColorRes));
            }
        } else if (currentItem instanceof AvoidRoadInfo) {
            itemHolder.title.setText(((AvoidRoadInfo) currentItem).name);
            itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_alert, activeColorRes));
        } else if (currentItem instanceof FavoriteGroup) {
            itemHolder.title.setText(((FavoriteGroup) currentItem).getDisplayName(app));
            itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_favorite, activeColorRes));
        } else if (currentItem instanceof MapMarker) {
            MapMarker mapMarker = (MapMarker) currentItem;
            itemHolder.title.setText(mapMarker.getName(app));
            itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_flag, activeColorRes));
        } else if (currentItem instanceof HistoryEntry) {
            itemHolder.title.setText(((HistoryEntry) currentItem).getName().getName());
        } else if (currentItem instanceof OnlineRoutingEngine) {
            itemHolder.title.setText(((OnlineRoutingEngine) currentItem).getName(app));
            itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_world_globe_dark, activeColorRes));
        } else if (currentItem instanceof MapMarkersGroup) {
            MapMarkersGroup markersGroup = (MapMarkersGroup) currentItem;
            String groupName = markersGroup.getName();
            if (Algorithms.isEmpty(groupName)) {
                if (markersGroup.getType() == ItineraryType.FAVOURITES) {
                    groupName = app.getString(R.string.shared_string_favorites);
                } else if (markersGroup.getType() == ItineraryType.MARKERS) {
                    groupName = app.getString(R.string.map_markers);
                }
            }
            itemHolder.title.setText(groupName);
            itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_flag, activeColorRes));
        }
        itemHolder.divider.setVisibility(shouldShowDivider(position) ? View.VISIBLE : View.GONE);
    }
}
Also used : QuickAction(net.osmand.plus.quickaction.QuickAction) ProfileIconColors(net.osmand.plus.profiles.ProfileIconColors) ApplicationModeBean(net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean) MapMarker(net.osmand.plus.mapmarkers.MapMarker) FavoriteGroup(net.osmand.plus.myplaces.FavoriteGroup) AvoidRoadInfo(net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo) ApplicationMode(net.osmand.plus.settings.backend.ApplicationMode) PoiUIFilter(net.osmand.plus.poi.PoiUIFilter) OnlineRoutingEngine(net.osmand.plus.onlinerouting.engine.OnlineRoutingEngine) ITileSource(net.osmand.map.ITileSource) HistoryEntry(net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry) MapMarkersGroup(net.osmand.plus.mapmarkers.MapMarkersGroup) FileSubtype(net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype) Recording(net.osmand.plus.plugins.audionotes.AudioVideoNotesPlugin.Recording) File(java.io.File)

Example 5 with FileSubtype

use of net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype in project Osmand by osmandapp.

the class StorageMigrationFragment method onFileCopyStarted.

@Override
public void onFileCopyStarted(@NonNull String path) {
    if (isAdded()) {
        String fileName = Algorithms.getFileWithoutDirs(path);
        FileSubtype subtype = FileSubtype.getSubtypeByFileName(path);
        if (subtype == FileSubtype.TILES_MAP) {
            fileName = path.replace(IndexConstants.TILES_INDEX_DIR, "");
        } else if (subtype.isMap() || subtype == FileSubtype.TTS_VOICE || subtype == FileSubtype.VOICE) {
            fileName = FileNameTranslationHelper.getFileNameWithRegion(app, fileName);
        } else if (subtype == FileSubtype.GPX) {
            fileName = GpxUiHelper.getGpxTitle(fileName);
        }
        String description = getString(R.string.copying_file, fileName);
        SpannableString spannable = new SpannableString(description);
        int index = description.indexOf(fileName);
        spannable.setSpan(new CustomTypefaceSpan(FontCache.getRobotoMedium(app)), index, index + fileName.length(), 0);
        spannable.setSpan(new ForegroundColorSpan(ColorUtilities.getActiveColor(app, nightMode)), index, index + fileName.length(), 0);
        TextView summary = remainingFiles.findViewById(android.R.id.summary);
        summary.setText(spannable);
    }
}
Also used : SpannableString(android.text.SpannableString) CustomTypefaceSpan(net.osmand.plus.widgets.style.CustomTypefaceSpan) ForegroundColorSpan(android.text.style.ForegroundColorSpan) TextView(android.widget.TextView) SpannableString(android.text.SpannableString) FileSubtype(net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype)

Aggregations

FileSubtype (net.osmand.plus.settings.backend.backup.items.FileSettingsItem.FileSubtype)5 File (java.io.File)2 ITileSource (net.osmand.map.ITileSource)2 AvoidRoadInfo (net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo)2 HistoryEntry (net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry)2 MapMarker (net.osmand.plus.mapmarkers.MapMarker)2 MapMarkersGroup (net.osmand.plus.mapmarkers.MapMarkersGroup)2 FavoriteGroup (net.osmand.plus.myplaces.FavoriteGroup)2 OnlineRoutingEngine (net.osmand.plus.onlinerouting.engine.OnlineRoutingEngine)2 Recording (net.osmand.plus.plugins.audionotes.AudioVideoNotesPlugin.Recording)2 PoiUIFilter (net.osmand.plus.poi.PoiUIFilter)2 QuickAction (net.osmand.plus.quickaction.QuickAction)2 ApplicationMode (net.osmand.plus.settings.backend.ApplicationMode)2 SpannableString (android.text.SpannableString)1 ForegroundColorSpan (android.text.style.ForegroundColorSpan)1 TextView (android.widget.TextView)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 OpenstreetmapPoint (net.osmand.plus.plugins.osmedit.data.OpenstreetmapPoint)1 OsmNotesPoint (net.osmand.plus.plugins.osmedit.data.OsmNotesPoint)1