Add MarkersSettingsItem initial commit
This commit is contained in:
parent
f9052e4c0b
commit
4923723ade
8 changed files with 209 additions and 7 deletions
|
@ -16,5 +16,6 @@ public enum ExportSettingsType {
|
|||
OFFLINE_MAPS,
|
||||
FAVORITES,
|
||||
TTS_VOICE,
|
||||
VOICE
|
||||
VOICE,
|
||||
MARKERS
|
||||
}
|
||||
|
|
|
@ -0,0 +1,152 @@
|
|||
package net.osmand.plus.settings.backend.backup;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.GPXUtilities.GPXFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static net.osmand.IndexConstants.GPX_FILE_EXT;
|
||||
|
||||
public class MarkersSettingsItem extends CollectionSettingsItem<MapMarkersGroup> {
|
||||
|
||||
private MapMarkersHelper markersHelper;
|
||||
|
||||
public MarkersSettingsItem(@NonNull OsmandApplication app, @NonNull List<MapMarkersGroup> items) {
|
||||
super(app, null, items);
|
||||
}
|
||||
|
||||
public MarkersSettingsItem(@NonNull OsmandApplication app, @Nullable MarkersSettingsItem baseItem, @NonNull List<MapMarkersGroup> items) {
|
||||
super(app, baseItem, items);
|
||||
}
|
||||
|
||||
MarkersSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||
super(app, json);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
markersHelper = app.getMapMarkersHelper();
|
||||
existingItems = new ArrayList<>(markersHelper.getMapMarkersGroups());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public SettingsItemType getType() {
|
||||
return SettingsItemType.MARKERS;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return "markers";
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPublicName(@NonNull Context ctx) {
|
||||
return ctx.getString(R.string.map_markers);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDefaultFileName() {
|
||||
return getName() + getDefaultFileExtension();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDefaultFileExtension() {
|
||||
return GPX_FILE_EXT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() {
|
||||
List<MapMarkersGroup> newItems = getNewItems();
|
||||
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
|
||||
appliedItems = new ArrayList<>(newItems);
|
||||
|
||||
for (MapMarkersGroup duplicate : duplicateItems) {
|
||||
if (shouldReplace) {
|
||||
|
||||
}
|
||||
appliedItems.add(shouldReplace ? duplicate : renameItem(duplicate));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDuplicate(@NonNull MapMarkersGroup markersGroup) {
|
||||
String name = markersGroup.getName();
|
||||
for (MapMarkersGroup group : existingItems) {
|
||||
if (group.getName().equals(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldReadOnCollecting() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public MapMarkersGroup renameItem(@NonNull MapMarkersGroup item) {
|
||||
return item;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemReader<MarkersSettingsItem> getReader() {
|
||||
return new SettingsItemReader<MarkersSettingsItem>(this) {
|
||||
|
||||
@Override
|
||||
public void readFromStream(@NonNull InputStream inputStream, File destination) throws IOException, IllegalArgumentException {
|
||||
GPXFile gpxFile = GPXUtilities.loadGPXFile(inputStream);
|
||||
if (gpxFile.error != null) {
|
||||
warnings.add(app.getString(R.string.settings_item_read_error, String.valueOf(getType())));
|
||||
SettingsHelper.LOG.error("Failed read gpx file", gpxFile.error);
|
||||
} else {
|
||||
Map<String, MapMarkersGroup> flatGroups = new LinkedHashMap<>();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemWriter<MarkersSettingsItem> getWriter() {
|
||||
return new SettingsItemWriter<MarkersSettingsItem>(this) {
|
||||
|
||||
@Override
|
||||
public boolean writeToStream(@NonNull OutputStream outputStream) throws IOException {
|
||||
// Exception error = GPXUtilities.writeGpx(new OutputStreamWriter(outputStream, "UTF-8"), gpxFile);
|
||||
// if (error != null) {
|
||||
// warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
|
||||
// SettingsHelper.LOG.error("Failed write to gpx file", error);
|
||||
// return false;
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -14,6 +14,7 @@ import net.osmand.map.ITileSource;
|
|||
import net.osmand.map.TileSourceManager;
|
||||
import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.SQLiteTileSource;
|
||||
|
@ -552,6 +553,10 @@ public class SettingsHelper {
|
|||
if (!files.isEmpty()) {
|
||||
dataList.put(ExportSettingsType.VOICE, files);
|
||||
}
|
||||
List<MapMarkersGroup> markersGroups = app.getMapMarkersHelper().getMapMarkersGroups();
|
||||
if (!markersGroups.isEmpty()) {
|
||||
dataList.put(ExportSettingsType.MARKERS, markersGroups);
|
||||
}
|
||||
return dataList;
|
||||
}
|
||||
|
||||
|
@ -591,6 +596,7 @@ public class SettingsHelper {
|
|||
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
|
||||
List<OsmNotesPoint> osmNotesPointList = new ArrayList<>();
|
||||
List<OpenstreetmapPoint> osmEditsPointList = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersGroups = new ArrayList<>();
|
||||
|
||||
for (Object object : data) {
|
||||
if (object instanceof QuickAction) {
|
||||
|
@ -615,6 +621,8 @@ public class SettingsHelper {
|
|||
osmEditsPointList.add((OpenstreetmapPoint) object);
|
||||
} else if (object instanceof FavoriteGroup) {
|
||||
favoriteGroups.add((FavoriteGroup) object);
|
||||
} else if (object instanceof MapMarkersGroup) {
|
||||
markersGroups.add((MapMarkersGroup) object);
|
||||
}
|
||||
}
|
||||
if (!quickActions.isEmpty()) {
|
||||
|
@ -646,6 +654,9 @@ public class SettingsHelper {
|
|||
if (!favoriteGroups.isEmpty()) {
|
||||
settingsItems.add(new FavoritesSettingsItem(app, favoriteGroups));
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
settingsItems.add(new MarkersSettingsItem(app, markersGroups));
|
||||
}
|
||||
return settingsItems;
|
||||
}
|
||||
|
||||
|
@ -667,6 +678,7 @@ public class SettingsHelper {
|
|||
List<OsmNotesPoint> notesPointList = new ArrayList<>();
|
||||
List<OpenstreetmapPoint> editsPointList = new ArrayList<>();
|
||||
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersGroups = new ArrayList<>();
|
||||
|
||||
for (SettingsItem item : settingsItems) {
|
||||
switch (item.getType()) {
|
||||
|
@ -746,6 +758,10 @@ public class SettingsHelper {
|
|||
FavoritesSettingsItem favoritesSettingsItem = (FavoritesSettingsItem) item;
|
||||
favoriteGroups.addAll(favoritesSettingsItem.getItems());
|
||||
break;
|
||||
case MARKERS:
|
||||
MarkersSettingsItem markersSettingsItem = (MarkersSettingsItem) item;
|
||||
markersGroups.addAll(markersSettingsItem.getItems());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -799,6 +815,9 @@ public class SettingsHelper {
|
|||
if (!voiceFilesList.isEmpty()) {
|
||||
settingsToOperate.put(ExportSettingsType.VOICE, voiceFilesList);
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
settingsToOperate.put(ExportSettingsType.MARKERS, markersGroups);
|
||||
}
|
||||
return settingsToOperate;
|
||||
}
|
||||
}
|
|
@ -15,5 +15,6 @@ public enum SettingsItemType {
|
|||
DOWNLOADS,
|
||||
OSM_NOTES,
|
||||
OSM_EDITS,
|
||||
FAVOURITES
|
||||
FAVOURITES,
|
||||
MARKERS
|
||||
}
|
|
@ -134,6 +134,9 @@ class SettingsItemsFactory {
|
|||
case FAVOURITES:
|
||||
item = new FavoritesSettingsItem(app, json);
|
||||
break;
|
||||
case MARKERS:
|
||||
item = new MarkersSettingsItem(app, json);
|
||||
break;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
|
|
@ -14,19 +14,20 @@ import net.osmand.IndexConstants;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.map.ITileSource;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.profiles.ProfileIconColors;
|
||||
import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
import net.osmand.plus.render.RenderingIcons;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -134,7 +135,7 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
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)) {
|
||||
} 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)) {
|
||||
|
@ -153,6 +154,15 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
itemHolder.title.setText(((FavoriteGroup) currentItem).getDisplayName(app));
|
||||
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_favorite, activeColorRes));
|
||||
itemHolder.subTitle.setVisibility(View.GONE);
|
||||
} else if (currentItem instanceof MapMarkersGroup) {
|
||||
MapMarkersGroup markersGroup = (MapMarkersGroup) currentItem;
|
||||
String groupName = markersGroup.getName();
|
||||
if (Algorithms.isEmpty(groupName)) {
|
||||
groupName = app.getString(R.string.map_markers);
|
||||
}
|
||||
itemHolder.title.setText(groupName);
|
||||
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_flag, activeColorRes));
|
||||
itemHolder.subTitle.setVisibility(View.GONE);
|
||||
}
|
||||
itemHolder.divider.setVisibility(shouldShowDivider(position) ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import net.osmand.IndexConstants;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.map.ITileSource;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
@ -316,6 +317,15 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
|||
file.getName()));
|
||||
setupIcon(icon, R.drawable.ic_action_volume_up, itemSelected);
|
||||
break;
|
||||
case MARKERS:
|
||||
MapMarkersGroup markersGroup = (MapMarkersGroup) currentItem;
|
||||
String groupName = markersGroup.getName();
|
||||
if (Algorithms.isEmpty(groupName)) {
|
||||
groupName = app.getString(R.string.map_markers);
|
||||
}
|
||||
title.setText(groupName);
|
||||
setupIcon(icon, R.drawable.ic_action_flag, itemSelected);
|
||||
break;
|
||||
default:
|
||||
return child;
|
||||
}
|
||||
|
@ -416,6 +426,8 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
|||
return R.string.local_indexes_cat_tts;
|
||||
case VOICE:
|
||||
return R.string.local_indexes_cat_voice;
|
||||
case MARKERS:
|
||||
return R.string.map_markers;
|
||||
default:
|
||||
return R.string.access_empty_list;
|
||||
}
|
||||
|
|
|
@ -142,6 +142,10 @@ public class ImportedSettingsItemsAdapter extends
|
|||
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_settings, activeColorRes));
|
||||
holder.title.setText(R.string.general_settings_2);
|
||||
break;
|
||||
case MARKERS:
|
||||
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_flag, activeColorRes));
|
||||
holder.title.setText(R.string.map_markers);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue