Added subtypes to FileSettingsItem

This commit is contained in:
max-klaus 2020-03-22 12:24:01 +03:00
parent 4edbb4861a
commit 12fcff9af8
3 changed files with 126 additions and 29 deletions

View file

@ -901,18 +901,80 @@ public class SettingsHelper {
public static class FileSettingsItem extends StreamSettingsItem {
private File file;
private String subtype;
public enum FileSubtype {
UNKNOWN("", null),
ROUTING_CONFIG("routing_config", IndexConstants.ROUTING_PROFILES_DIR),
RENDERING_STYLE("rendering_style", IndexConstants.RENDERERS_DIR),
OBF_MAP("obf_map", IndexConstants.MAPS_PATH),
TILES_MAP("tiles_map", IndexConstants.TILES_INDEX_DIR),
GPX("gpx", IndexConstants.GPX_INDEX_DIR),
VOICE("voice", IndexConstants.VOICE_INDEX_DIR);
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull File file) {
private String subtypeName;
private String subtypeFolder;
FileSubtype(String subtypeName, String subtypeFolder) {
this.subtypeName = subtypeName;
this.subtypeFolder = subtypeFolder;
}
public String getSubtypeName() {
return subtypeName;
}
public String getSubtypeFolder() {
return subtypeFolder;
}
public static FileSubtype getSubtypeByName(@NonNull String name) {
for (FileSubtype subtype : FileSubtype.values()) {
if (name.equals(subtype.subtypeName)) {
return subtype;
}
}
return null;
}
public static FileSubtype getSubtypeByFileName(@NonNull String fileName) {
String name = fileName.substring(1);
for (FileSubtype subtype : FileSubtype.values()) {
if (subtype != UNKNOWN && name.startsWith(subtype.subtypeFolder)) {
return subtype;
}
}
return UNKNOWN;
}
@Override
public String toString() {
return subtypeName;
}
}
private File file;
private FileSubtype subtype;
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull File file) throws IllegalArgumentException {
super(SettingsItemType.FILE, file.getPath().replace(app.getAppPath(null).getPath(), ""));
this.file = file;
this.subtype = FileSubtype.getSubtypeByFileName(getFileName());
if (subtype == FileSubtype.UNKNOWN) {
throw new IllegalArgumentException("Unknown file subtype: " + getFileName());
}
}
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull FileSubtype subtype, @NonNull File file) throws IllegalArgumentException {
super(SettingsItemType.FILE, file.getPath().replace(app.getAppPath(null).getPath(), ""));
this.file = file;
this.subtype = subtype;
if (subtype == FileSubtype.UNKNOWN) {
throw new IllegalArgumentException("Unknown file subtype: " + getFileName());
}
}
FileSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(SettingsItemType.FILE, json);
this.file = new File(app.getAppPath(null), name);
this.subtype = json.has("subtype") ? json.getString("subtype") : null;
}
@Override
@ -922,6 +984,22 @@ public class SettingsHelper {
if (!Algorithms.isEmpty(fileName)) {
name = fileName;
}
String subtypeStr = json.has("subtype") ? json.getString("subtype") : null;
if (!Algorithms.isEmpty(subtypeStr)) {
subtype = FileSubtype.getSubtypeByName(subtypeStr);
} else if (!Algorithms.isEmpty(fileName)) {
subtype = FileSubtype.getSubtypeByFileName(fileName);
} else {
subtype = FileSubtype.UNKNOWN;
}
}
@Override
void writeToJson(@NonNull JSONObject json) throws JSONException {
super.writeToJson(json);
if (subtype != null) {
json.put("subtype", subtype.getSubtypeName());
}
}
@NonNull
@ -934,7 +1012,7 @@ public class SettingsHelper {
return file;
}
public String getSubtype() {
public FileSubtype getSubtype() {
return subtype;
}

View file

@ -31,6 +31,8 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.SettingsHelper;
import net.osmand.plus.SettingsHelper.FileSettingsItem;
import net.osmand.plus.SettingsHelper.SettingsItem;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
@ -40,8 +42,8 @@ import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.quickaction.QuickActionFactory;
import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
import net.osmand.plus.settings.ExportImportSettingsAdapter.Type;
import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
import org.apache.commons.logging.Log;
@ -240,7 +242,7 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
} else {
template = TileSourceManager.createTileSourceTemplate(f);
}
if (template != null && template.getUrlTemplate() != null) {
if (template.getUrlTemplate() != null) {
iTileSources.add(template);
}
}
@ -269,8 +271,8 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
return dataList;
}
private List<SettingsHelper.SettingsItem> prepareSettingsItemsForExport() {
List<SettingsHelper.SettingsItem> settingsItems = new ArrayList<>();
private List<SettingsItem> prepareSettingsItemsForExport() {
List<SettingsItem> settingsItems = new ArrayList<>();
settingsItems.add(new SettingsHelper.ProfileSettingsItem(app, profile));
if (includeAdditionalData) {
settingsItems.addAll(prepareAdditionalSettingsItems());
@ -278,8 +280,8 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
return settingsItems;
}
private List<SettingsHelper.SettingsItem> prepareAdditionalSettingsItems() {
List<SettingsHelper.SettingsItem> settingsItems = new ArrayList<>();
private List<SettingsItem> prepareAdditionalSettingsItems() {
List<SettingsItem> settingsItems = new ArrayList<>();
List<QuickAction> quickActions = new ArrayList<>();
List<PoiUIFilter> poiUIFilters = new ArrayList<>();
List<ITileSource> tileSourceTemplates = new ArrayList<>();
@ -293,7 +295,11 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
|| object instanceof SQLiteTileSource) {
tileSourceTemplates.add((ITileSource) object);
} else if (object instanceof File) {
settingsItems.add(new SettingsHelper.FileSettingsItem(app, (File) object));
try {
settingsItems.add(new FileSettingsItem(app, (File) object));
} catch (IllegalArgumentException e) {
LOG.warn("Trying to export unsuported file type", e);
}
} else if (object instanceof AvoidRoadInfo) {
avoidRoads.add((AvoidRoadInfo) object);
}

View file

@ -26,7 +26,6 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.map.ITileSource;
import net.osmand.map.TileSourceManager;
@ -36,16 +35,25 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.SettingsHelper;
import net.osmand.plus.SettingsHelper.*;
import net.osmand.plus.SettingsHelper.AvoidRoadsSettingsItem;
import net.osmand.plus.SettingsHelper.FileSettingsItem;
import net.osmand.plus.SettingsHelper.FileSettingsItem.FileSubtype;
import net.osmand.plus.SettingsHelper.ImportAsyncTask;
import net.osmand.plus.SettingsHelper.ImportType;
import net.osmand.plus.SettingsHelper.MapSourcesSettingsItem;
import net.osmand.plus.SettingsHelper.PoiUiFilterSettingsItem;
import net.osmand.plus.SettingsHelper.ProfileSettingsItem;
import net.osmand.plus.SettingsHelper.QuickActionsSettingsItem;
import net.osmand.plus.SettingsHelper.SettingsItem;
import net.osmand.plus.SettingsHelper.SettingsItemType;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.BaseOsmAndFragment;
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.widgets.TextViewEx;
import net.osmand.plus.settings.ExportImportSettingsAdapter.Type;
import net.osmand.plus.widgets.TextViewEx;
import org.apache.commons.logging.Log;
@ -322,7 +330,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment
|| object instanceof SQLiteTileSource) {
tileSourceTemplates.add((ITileSource) object);
} else if (object instanceof File) {
settingsItems.add(new SettingsHelper.FileSettingsItem(app, (File) object));
settingsItems.add(new FileSettingsItem(app, (File) object));
} else if (object instanceof AvoidRoadInfo) {
avoidRoads.add((AvoidRoadInfo) object);
}
@ -356,23 +364,28 @@ public class ImportSettingsFragment extends BaseOsmAndFragment
if (item.getType().equals(SettingsItemType.PROFILE)) {
profiles.add(((ProfileSettingsItem) item).getModeBean());
} else if (item.getType().equals(SettingsItemType.QUICK_ACTIONS)) {
quickActions.addAll(((QuickActionsSettingsItem) item).getItems());
quickActions.addAll(((QuickActionsSettingsItem) item).getDuplicateItems());
QuickActionsSettingsItem quickActionsItem = (QuickActionsSettingsItem) item;
quickActions.addAll(quickActionsItem.getItems());
quickActions.addAll(quickActionsItem.getDuplicateItems());
} else if (item.getType().equals(SettingsItemType.POI_UI_FILTERS)) {
poiUIFilters.addAll(((PoiUiFilterSettingsItem) item).getItems());
poiUIFilters.addAll(((PoiUiFilterSettingsItem) item).getDuplicateItems());
PoiUiFilterSettingsItem poiUiFilterItem = (PoiUiFilterSettingsItem) item;
poiUIFilters.addAll(poiUiFilterItem.getItems());
poiUIFilters.addAll(poiUiFilterItem.getDuplicateItems());
} else if (item.getType().equals(SettingsItemType.MAP_SOURCES)) {
tileSourceTemplates.addAll(((MapSourcesSettingsItem) item).getItems());
tileSourceTemplates.addAll(((MapSourcesSettingsItem) item).getDuplicateItems());
MapSourcesSettingsItem mapSourcesItem = (MapSourcesSettingsItem) item;
tileSourceTemplates.addAll(mapSourcesItem.getItems());
tileSourceTemplates.addAll(mapSourcesItem.getDuplicateItems());
} else if (item.getType().equals(SettingsItemType.FILE)) {
if (item.getName().contains(IndexConstants.RENDERERS_DIR)) {
renderFilesList.add(((FileSettingsItem) item).getFile());
} else if (item.getName().contains(IndexConstants.ROUTING_PROFILES_DIR)) {
routingFilesList.add(((FileSettingsItem) item).getFile());
FileSettingsItem fileItem = (FileSettingsItem) item;
if (fileItem.getSubtype() == FileSubtype.RENDERING_STYLE) {
renderFilesList.add(fileItem.getFile());
} else if (fileItem.getSubtype() == FileSubtype.ROUTING_CONFIG) {
routingFilesList.add(fileItem.getFile());
}
} else if (item.getType().equals(SettingsItemType.AVOID_ROADS)) {
avoidRoads.addAll(((AvoidRoadsSettingsItem) item).getItems());
avoidRoads.addAll(((AvoidRoadsSettingsItem) item).getDuplicateItems());
AvoidRoadsSettingsItem avoidRoadsItem = (AvoidRoadsSettingsItem) item;
avoidRoads.addAll(avoidRoadsItem.getItems());
avoidRoads.addAll(avoidRoadsItem.getDuplicateItems());
}
}