Added subtypes to FileSettingsItem
This commit is contained in:
parent
4edbb4861a
commit
12fcff9af8
3 changed files with 126 additions and 29 deletions
|
@ -901,18 +901,80 @@ public class SettingsHelper {
|
||||||
|
|
||||||
public static class FileSettingsItem extends StreamSettingsItem {
|
public static class FileSettingsItem extends StreamSettingsItem {
|
||||||
|
|
||||||
private File file;
|
public enum FileSubtype {
|
||||||
private String subtype;
|
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(), ""));
|
super(SettingsItemType.FILE, file.getPath().replace(app.getAppPath(null).getPath(), ""));
|
||||||
this.file = file;
|
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 {
|
FileSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||||
super(SettingsItemType.FILE, json);
|
super(SettingsItemType.FILE, json);
|
||||||
this.file = new File(app.getAppPath(null), name);
|
this.file = new File(app.getAppPath(null), name);
|
||||||
this.subtype = json.has("subtype") ? json.getString("subtype") : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -922,6 +984,22 @@ public class SettingsHelper {
|
||||||
if (!Algorithms.isEmpty(fileName)) {
|
if (!Algorithms.isEmpty(fileName)) {
|
||||||
name = 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
|
@NonNull
|
||||||
|
@ -934,7 +1012,7 @@ public class SettingsHelper {
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSubtype() {
|
public FileSubtype getSubtype() {
|
||||||
return subtype;
|
return subtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,8 @@ import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.SQLiteTileSource;
|
import net.osmand.plus.SQLiteTileSource;
|
||||||
import net.osmand.plus.SettingsHelper;
|
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.UiUtilities;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
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.poi.PoiUIFilter;
|
||||||
import net.osmand.plus.quickaction.QuickAction;
|
import net.osmand.plus.quickaction.QuickAction;
|
||||||
import net.osmand.plus.quickaction.QuickActionFactory;
|
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.ExportImportSettingsAdapter.Type;
|
||||||
|
import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
@ -240,7 +242,7 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
|
||||||
} else {
|
} else {
|
||||||
template = TileSourceManager.createTileSourceTemplate(f);
|
template = TileSourceManager.createTileSourceTemplate(f);
|
||||||
}
|
}
|
||||||
if (template != null && template.getUrlTemplate() != null) {
|
if (template.getUrlTemplate() != null) {
|
||||||
iTileSources.add(template);
|
iTileSources.add(template);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,8 +271,8 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
|
||||||
return dataList;
|
return dataList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SettingsHelper.SettingsItem> prepareSettingsItemsForExport() {
|
private List<SettingsItem> prepareSettingsItemsForExport() {
|
||||||
List<SettingsHelper.SettingsItem> settingsItems = new ArrayList<>();
|
List<SettingsItem> settingsItems = new ArrayList<>();
|
||||||
settingsItems.add(new SettingsHelper.ProfileSettingsItem(app, profile));
|
settingsItems.add(new SettingsHelper.ProfileSettingsItem(app, profile));
|
||||||
if (includeAdditionalData) {
|
if (includeAdditionalData) {
|
||||||
settingsItems.addAll(prepareAdditionalSettingsItems());
|
settingsItems.addAll(prepareAdditionalSettingsItems());
|
||||||
|
@ -278,8 +280,8 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
|
||||||
return settingsItems;
|
return settingsItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SettingsHelper.SettingsItem> prepareAdditionalSettingsItems() {
|
private List<SettingsItem> prepareAdditionalSettingsItems() {
|
||||||
List<SettingsHelper.SettingsItem> settingsItems = new ArrayList<>();
|
List<SettingsItem> settingsItems = new ArrayList<>();
|
||||||
List<QuickAction> quickActions = new ArrayList<>();
|
List<QuickAction> quickActions = new ArrayList<>();
|
||||||
List<PoiUIFilter> poiUIFilters = new ArrayList<>();
|
List<PoiUIFilter> poiUIFilters = new ArrayList<>();
|
||||||
List<ITileSource> tileSourceTemplates = new ArrayList<>();
|
List<ITileSource> tileSourceTemplates = new ArrayList<>();
|
||||||
|
@ -293,7 +295,11 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
|
||||||
|| object instanceof SQLiteTileSource) {
|
|| object instanceof SQLiteTileSource) {
|
||||||
tileSourceTemplates.add((ITileSource) object);
|
tileSourceTemplates.add((ITileSource) object);
|
||||||
} else if (object instanceof File) {
|
} 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) {
|
} else if (object instanceof AvoidRoadInfo) {
|
||||||
avoidRoads.add((AvoidRoadInfo) object);
|
avoidRoads.add((AvoidRoadInfo) object);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import androidx.fragment.app.FragmentManager;
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.IndexConstants;
|
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.map.ITileSource;
|
import net.osmand.map.ITileSource;
|
||||||
import net.osmand.map.TileSourceManager;
|
import net.osmand.map.TileSourceManager;
|
||||||
|
@ -36,16 +35,25 @@ import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.SQLiteTileSource;
|
import net.osmand.plus.SQLiteTileSource;
|
||||||
import net.osmand.plus.SettingsHelper;
|
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.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||||
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
||||||
import net.osmand.plus.poi.PoiUIFilter;
|
import net.osmand.plus.poi.PoiUIFilter;
|
||||||
import net.osmand.plus.quickaction.QuickAction;
|
import net.osmand.plus.quickaction.QuickAction;
|
||||||
import net.osmand.plus.widgets.TextViewEx;
|
|
||||||
import net.osmand.plus.settings.ExportImportSettingsAdapter.Type;
|
import net.osmand.plus.settings.ExportImportSettingsAdapter.Type;
|
||||||
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
@ -322,7 +330,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment
|
||||||
|| object instanceof SQLiteTileSource) {
|
|| object instanceof SQLiteTileSource) {
|
||||||
tileSourceTemplates.add((ITileSource) object);
|
tileSourceTemplates.add((ITileSource) object);
|
||||||
} else if (object instanceof File) {
|
} 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) {
|
} else if (object instanceof AvoidRoadInfo) {
|
||||||
avoidRoads.add((AvoidRoadInfo) object);
|
avoidRoads.add((AvoidRoadInfo) object);
|
||||||
}
|
}
|
||||||
|
@ -356,23 +364,28 @@ public class ImportSettingsFragment extends BaseOsmAndFragment
|
||||||
if (item.getType().equals(SettingsItemType.PROFILE)) {
|
if (item.getType().equals(SettingsItemType.PROFILE)) {
|
||||||
profiles.add(((ProfileSettingsItem) item).getModeBean());
|
profiles.add(((ProfileSettingsItem) item).getModeBean());
|
||||||
} else if (item.getType().equals(SettingsItemType.QUICK_ACTIONS)) {
|
} else if (item.getType().equals(SettingsItemType.QUICK_ACTIONS)) {
|
||||||
quickActions.addAll(((QuickActionsSettingsItem) item).getItems());
|
QuickActionsSettingsItem quickActionsItem = (QuickActionsSettingsItem) item;
|
||||||
quickActions.addAll(((QuickActionsSettingsItem) item).getDuplicateItems());
|
quickActions.addAll(quickActionsItem.getItems());
|
||||||
|
quickActions.addAll(quickActionsItem.getDuplicateItems());
|
||||||
} else if (item.getType().equals(SettingsItemType.POI_UI_FILTERS)) {
|
} else if (item.getType().equals(SettingsItemType.POI_UI_FILTERS)) {
|
||||||
poiUIFilters.addAll(((PoiUiFilterSettingsItem) item).getItems());
|
PoiUiFilterSettingsItem poiUiFilterItem = (PoiUiFilterSettingsItem) item;
|
||||||
poiUIFilters.addAll(((PoiUiFilterSettingsItem) item).getDuplicateItems());
|
poiUIFilters.addAll(poiUiFilterItem.getItems());
|
||||||
|
poiUIFilters.addAll(poiUiFilterItem.getDuplicateItems());
|
||||||
} else if (item.getType().equals(SettingsItemType.MAP_SOURCES)) {
|
} else if (item.getType().equals(SettingsItemType.MAP_SOURCES)) {
|
||||||
tileSourceTemplates.addAll(((MapSourcesSettingsItem) item).getItems());
|
MapSourcesSettingsItem mapSourcesItem = (MapSourcesSettingsItem) item;
|
||||||
tileSourceTemplates.addAll(((MapSourcesSettingsItem) item).getDuplicateItems());
|
tileSourceTemplates.addAll(mapSourcesItem.getItems());
|
||||||
|
tileSourceTemplates.addAll(mapSourcesItem.getDuplicateItems());
|
||||||
} else if (item.getType().equals(SettingsItemType.FILE)) {
|
} else if (item.getType().equals(SettingsItemType.FILE)) {
|
||||||
if (item.getName().contains(IndexConstants.RENDERERS_DIR)) {
|
FileSettingsItem fileItem = (FileSettingsItem) item;
|
||||||
renderFilesList.add(((FileSettingsItem) item).getFile());
|
if (fileItem.getSubtype() == FileSubtype.RENDERING_STYLE) {
|
||||||
} else if (item.getName().contains(IndexConstants.ROUTING_PROFILES_DIR)) {
|
renderFilesList.add(fileItem.getFile());
|
||||||
routingFilesList.add(((FileSettingsItem) item).getFile());
|
} else if (fileItem.getSubtype() == FileSubtype.ROUTING_CONFIG) {
|
||||||
|
routingFilesList.add(fileItem.getFile());
|
||||||
}
|
}
|
||||||
} else if (item.getType().equals(SettingsItemType.AVOID_ROADS)) {
|
} else if (item.getType().equals(SettingsItemType.AVOID_ROADS)) {
|
||||||
avoidRoads.addAll(((AvoidRoadsSettingsItem) item).getItems());
|
AvoidRoadsSettingsItem avoidRoadsItem = (AvoidRoadsSettingsItem) item;
|
||||||
avoidRoads.addAll(((AvoidRoadsSettingsItem) item).getDuplicateItems());
|
avoidRoads.addAll(avoidRoadsItem.getItems());
|
||||||
|
avoidRoads.addAll(avoidRoadsItem.getDuplicateItems());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue