Fix parsing settings items and remove unnecessary changes

This commit is contained in:
Vitaliy 2020-03-23 17:05:05 +02:00
parent 37f5dd0419
commit 235028d317
5 changed files with 57 additions and 441 deletions

View file

@ -4,28 +4,16 @@ import android.content.res.Configuration;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.map.ITileSource;
import net.osmand.map.TileSourceManager;
import net.osmand.osm.PoiCategory;
import net.osmand.plus.helpers.AvoidSpecificRoads;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -39,11 +27,6 @@ public class CustomOsmandPlugin extends OsmandPlugin {
public List<String> rendererNames = new ArrayList<>(); public List<String> rendererNames = new ArrayList<>();
public List<String> routerNames = new ArrayList<>(); public List<String> routerNames = new ArrayList<>();
public List<ApplicationMode> appModes = new ArrayList<>();
public List<QuickAction> quickActions = new ArrayList<>();
public List<PoiUIFilter> poiUIFilters = new ArrayList<>();
public List<ITileSource> mapSources = new ArrayList<>();
public List<AvoidSpecificRoads.AvoidRoadInfo> avoidRoadInfos = new ArrayList<>();
public CustomOsmandPlugin(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { public CustomOsmandPlugin(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(app); super(app);
@ -139,314 +122,9 @@ public class CustomOsmandPlugin extends OsmandPlugin {
} }
json.put("description", descriptionJson); json.put("description", descriptionJson);
saveAdditionalItemsToJson(json);
return json.toString(); return json.toString();
} }
public void loadAdditionalItemsFromJson(JSONObject json) throws JSONException {
if (json.has("appModes")) {
String appModesStr = json.getString("appModes");
if (!Algorithms.isEmpty(appModesStr)) {
JSONArray appModesJson = new JSONArray(appModesStr);
for (int i = 0; i < appModesJson.length(); i++) {
String str = appModesJson.getString(i);
ApplicationMode mode = ApplicationMode.valueOfStringKey(str, null);
if (mode != null) {
appModes.add(mode);
}
}
}
}
if (json.has("rendererNames")) {
String rendererNamesStr = json.getString("rendererNames");
if (!Algorithms.isEmpty(rendererNamesStr)) {
JSONArray rendererNamesJson = new JSONArray(rendererNamesStr);
for (int i = 0; i < rendererNamesJson.length(); i++) {
String str = rendererNamesJson.getString(i);
rendererNames.add(str);
}
}
}
if (json.has("routerNames")) {
String routerNamesStr = json.getString("routerNames");
if (!Algorithms.isEmpty(routerNamesStr)) {
JSONArray routerNamesJson = new JSONArray(routerNamesStr);
for (int i = 0; i < routerNamesJson.length(); i++) {
String str = routerNamesJson.getString(i);
routerNames.add(str);
}
}
}
readPoiUIFiltersFromJson(json);
readMapSourcesFromJson(json);
readQuickActionsFromJson(json);
readAvoidRoadsFromJson(json);
}
public void saveAdditionalItemsToJson(JSONObject json) throws JSONException {
if (!appModes.isEmpty()) {
List<String> appModesKeys = new ArrayList<>();
for (ApplicationMode mode : appModes) {
appModesKeys.add(mode.getStringKey());
}
JSONArray appModesJson = new JSONArray(appModesKeys);
json.put("appModes", appModesJson);
}
if (!rendererNames.isEmpty()) {
JSONArray rendererNamesJson = new JSONArray(rendererNames);
json.put("rendererNames", rendererNamesJson);
}
if (!routerNames.isEmpty()) {
JSONArray rendererNamesJson = new JSONArray(routerNames);
json.put("routerNames", rendererNamesJson);
}
savePoiUIFiltersToJson(json);
saveMapSourcesToJson(json);
saveQuickActionsToJson(json);
saveAvoidRoadsToJson(json);
}
private void savePoiUIFiltersToJson(JSONObject poiUIFiltersJson) throws JSONException {
if (!poiUIFilters.isEmpty()) {
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
Gson gson = new Gson();
Type type = new TypeToken<HashMap<PoiCategory, LinkedHashSet<String>>>() {
}.getType();
try {
for (PoiUIFilter filter : poiUIFilters) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", filter.getName());
jsonObject.put("filterId", filter.getFilterId());
jsonObject.put("acceptedTypes", gson.toJson(filter.getAcceptedTypes(), type));
jsonArray.put(jsonObject);
}
json.put("items", jsonArray);
} catch (JSONException e) {
LOG.error("Failed write to json", e);
}
poiUIFiltersJson.put("poiUIFilters", json);
}
}
private void saveMapSourcesToJson(JSONObject mapSourcesJson) throws JSONException {
if (!mapSources.isEmpty()) {
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
if (!mapSources.isEmpty()) {
try {
for (ITileSource template : mapSources) {
JSONObject jsonObject = new JSONObject();
boolean sql = template instanceof SQLiteTileSource;
jsonObject.put("sql", sql);
jsonObject.put("name", template.getName());
jsonObject.put("minZoom", template.getMinimumZoomSupported());
jsonObject.put("maxZoom", template.getMaximumZoomSupported());
jsonObject.put("url", template.getUrlTemplate());
jsonObject.put("randoms", template.getRandoms());
jsonObject.put("ellipsoid", template.isEllipticYTile());
jsonObject.put("inverted_y", template.isInvertedYTile());
jsonObject.put("referer", template.getReferer());
jsonObject.put("timesupported", template.isTimeSupported());
jsonObject.put("expire", template.getExpirationTimeMillis());
jsonObject.put("inversiveZoom", template.getInversiveZoom());
jsonObject.put("ext", template.getTileFormat());
jsonObject.put("tileSize", template.getTileSize());
jsonObject.put("bitDensity", template.getBitDensity());
jsonObject.put("avgSize", template.getAvgSize());
jsonObject.put("rule", template.getRule());
jsonArray.put(jsonObject);
}
json.put("items", jsonArray);
} catch (JSONException e) {
LOG.error("Failed write to json", e);
}
}
mapSourcesJson.put("mapSources", json);
}
}
private void saveAvoidRoadsToJson(JSONObject avoidRoadInfosJson) throws JSONException {
if (!avoidRoadInfos.isEmpty()) {
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
if (!avoidRoadInfos.isEmpty()) {
try {
for (AvoidSpecificRoads.AvoidRoadInfo avoidRoad : avoidRoadInfos) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("latitude", avoidRoad.latitude);
jsonObject.put("longitude", avoidRoad.longitude);
jsonObject.put("name", avoidRoad.name);
jsonObject.put("appModeKey", avoidRoad.appModeKey);
jsonArray.put(jsonObject);
}
json.put("items", jsonArray);
} catch (JSONException e) {
LOG.error("Failed write to json", e);
}
}
avoidRoadInfosJson.put("avoidRoadInfos", json);
}
}
private void saveQuickActionsToJson(JSONObject quickActionsJson) throws JSONException {
if (!quickActions.isEmpty()) {
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
Gson gson = new Gson();
Type type = new TypeToken<HashMap<String, String>>() {
}.getType();
if (!quickActions.isEmpty()) {
try {
for (QuickAction action : quickActions) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", action.hasCustomName(app)
? action.getName(app) : "");
jsonObject.put("type", action.getType());
jsonObject.put("params", gson.toJson(action.getParams(), type));
jsonArray.put(jsonObject);
}
json.put("items", jsonArray);
} catch (JSONException e) {
LOG.error("Failed write to json", e);
}
}
quickActionsJson.put("quickActions", json);
}
}
private void readMapSourcesFromJson(JSONObject json) {
if (json.has("mapSources")) {
try {
String mapSourcesStr = json.getString("mapSources");
if (!Algorithms.isEmpty(mapSourcesStr)) {
json = new JSONObject(mapSourcesStr);
JSONArray jsonArray = json.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
boolean sql = object.optBoolean("sql");
String name = object.optString("name");
int minZoom = object.optInt("minZoom");
int maxZoom = object.optInt("maxZoom");
String url = object.optString("url");
String randoms = object.optString("randoms");
boolean ellipsoid = object.optBoolean("ellipsoid", false);
boolean invertedY = object.optBoolean("inverted_y", false);
String referer = object.optString("referer");
boolean timesupported = object.optBoolean("timesupported", false);
long expire = object.optLong("expire");
boolean inversiveZoom = object.optBoolean("inversiveZoom", false);
String ext = object.optString("ext");
int tileSize = object.optInt("tileSize");
int bitDensity = object.optInt("bitDensity");
int avgSize = object.optInt("avgSize");
String rule = object.optString("rule");
ITileSource template;
if (!sql) {
template = new TileSourceManager.TileSourceTemplate(name, url, ext, maxZoom, minZoom, tileSize, bitDensity, avgSize);
} else {
template = new SQLiteTileSource(app, name, minZoom, maxZoom, url, randoms, ellipsoid, invertedY, referer, timesupported, expire, inversiveZoom);
}
mapSources.add(template);
}
}
} catch (JSONException e) {
throw new IllegalArgumentException("Json parse error", e);
}
}
}
private void readQuickActionsFromJson(JSONObject json) {
if (json.has("quickActions")) {
try {
String quickActionsStr = json.getString("quickActions");
if (!Algorithms.isEmpty(quickActionsStr)) {
Gson gson = new Gson();
Type type = new TypeToken<HashMap<String, String>>() {
}.getType();
JSONObject quickActionsJson = new JSONObject(quickActionsStr);
JSONArray itemsJson = quickActionsJson.getJSONArray("items");
for (int i = 0; i < itemsJson.length(); i++) {
JSONObject object = itemsJson.getJSONObject(i);
String name = object.getString("name");
int actionType = object.getInt("type");
String paramsString = object.getString("params");
HashMap<String, String> params = gson.fromJson(paramsString, type);
QuickAction action = app.getQuickActionRegistry().getQuickAction(app, actionType, name, params);
if (action != null) {
quickActions.add(action);
}
}
}
} catch (JSONException e) {
throw new IllegalArgumentException("Json parse error", e);
}
}
}
private void readAvoidRoadsFromJson(JSONObject json) {
if (json.has("avoidRoadInfos")) {
try {
String avoidRoadInfosStr = json.getString("avoidRoadInfos");
if (!Algorithms.isEmpty(avoidRoadInfosStr)) {
JSONObject avoidRoadInfosJson = new JSONObject(avoidRoadInfosStr);
JSONArray jsonArray = avoidRoadInfosJson.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
double latitude = object.optDouble("latitude");
double longitude = object.optDouble("longitude");
String name = object.optString("name");
String appModeKey = object.optString("appModeKey");
AvoidSpecificRoads.AvoidRoadInfo roadInfo = new AvoidSpecificRoads.AvoidRoadInfo();
roadInfo.id = 0;
roadInfo.latitude = latitude;
roadInfo.longitude = longitude;
roadInfo.name = name;
if (ApplicationMode.valueOfStringKey(appModeKey, null) != null) {
roadInfo.appModeKey = appModeKey;
} else {
roadInfo.appModeKey = app.getRoutingHelper().getAppMode().getStringKey();
}
avoidRoadInfos.add(roadInfo);
}
}
} catch (JSONException e) {
throw new IllegalArgumentException("Json parse error", e);
}
}
}
private void readPoiUIFiltersFromJson(JSONObject json) {
if (json.has("poiUIFilters")) {
try {
String poiUIFiltersStr = json.getString("poiUIFilters");
if (!Algorithms.isEmpty(poiUIFiltersStr)) {
JSONObject poiUIFiltersJson = new JSONObject(poiUIFiltersStr);
JSONArray jsonArray = poiUIFiltersJson.getJSONArray("items");
List<PoiUIFilter> existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
String name = object.getString("name");
String filterId = object.getString("filterId");
for (PoiUIFilter filter : existingItems) {
if (filter.getName().equals(name)) {
poiUIFilters.add(filter);
}
}
}
}
} catch (JSONException e) {
throw new IllegalArgumentException("Json parse error", e);
}
}
}
@Override @Override
public List<String> getRendererNames() { public List<String> getRendererNames() {
return rendererNames; return rendererNames;
@ -456,29 +134,4 @@ public class CustomOsmandPlugin extends OsmandPlugin {
public List<String> getRouterNames() { public List<String> getRouterNames() {
return routerNames; return routerNames;
} }
@Override
public List<ApplicationMode> getAddedAppModes() {
return appModes;
}
@Override
public List<QuickAction> getQuickActions() {
return quickActions;
}
@Override
public List<PoiUIFilter> getPoiUIFilters() {
return poiUIFilters;
}
@Override
public List<ITileSource> getMapSources() {
return mapSources;
}
@Override
public List<AvoidSpecificRoads.AvoidRoadInfo> getAvoidRoadInfos() {
return avoidRoadInfos;
}
} }

View file

@ -20,7 +20,6 @@ import net.osmand.IProgress;
import net.osmand.Location; import net.osmand.Location;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.access.AccessibilityPlugin; import net.osmand.access.AccessibilityPlugin;
import net.osmand.map.ITileSource;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.TabActivity.TabItem; import net.osmand.plus.activities.TabActivity.TabItem;
import net.osmand.plus.api.SettingsAPI; import net.osmand.plus.api.SettingsAPI;
@ -30,7 +29,6 @@ import net.osmand.plus.development.OsmandDevelopmentPlugin;
import net.osmand.plus.dialogs.PluginDisabledBottomSheet; import net.osmand.plus.dialogs.PluginDisabledBottomSheet;
import net.osmand.plus.dialogs.PluginInstalledBottomSheetDialog; import net.osmand.plus.dialogs.PluginInstalledBottomSheetDialog;
import net.osmand.plus.download.IndexItem; import net.osmand.plus.download.IndexItem;
import net.osmand.plus.helpers.AvoidSpecificRoads;
import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.plus.mapcontextmenu.MenuController;
import net.osmand.plus.mapillary.MapillaryPlugin; import net.osmand.plus.mapillary.MapillaryPlugin;
@ -40,8 +38,6 @@ import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
import net.osmand.plus.osmedit.OsmEditingPlugin; import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.parkingpoint.ParkingPositionPlugin; import net.osmand.plus.parkingpoint.ParkingPositionPlugin;
import net.osmand.plus.quickaction.QuickActionType; import net.osmand.plus.quickaction.QuickActionType;
import net.osmand.plus.poi.PoiUIFilter;
import net.osmand.plus.quickaction.QuickAction;
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin; import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
import net.osmand.plus.settings.BaseSettingsFragment; import net.osmand.plus.settings.BaseSettingsFragment;
import net.osmand.plus.skimapsplugin.SkiMapsPlugin; import net.osmand.plus.skimapsplugin.SkiMapsPlugin;
@ -185,22 +181,6 @@ public abstract class OsmandPlugin {
return Collections.emptyList(); return Collections.emptyList();
} }
public List<QuickAction> getQuickActions() {
return Collections.emptyList();
}
public List<PoiUIFilter> getPoiUIFilters() {
return Collections.emptyList();
}
public List<ITileSource> getMapSources() {
return Collections.emptyList();
}
public List<AvoidSpecificRoads.AvoidRoadInfo> getAvoidRoadInfos() {
return Collections.emptyList();
}
/** /**
* Plugin was installed * Plugin was installed
*/ */
@ -311,7 +291,6 @@ public abstract class OsmandPlugin {
for (int i = 0; i < jArray.length(); i++) { for (int i = 0; i < jArray.length(); i++) {
JSONObject json = jArray.getJSONObject(i); JSONObject json = jArray.getJSONObject(i);
CustomOsmandPlugin plugin = new CustomOsmandPlugin(app, json); CustomOsmandPlugin plugin = new CustomOsmandPlugin(app, json);
plugin.loadAdditionalItemsFromJson(json);
allPlugins.add(plugin); allPlugins.add(plugin);
} }
} catch (JSONException e) { } catch (JSONException e) {

View file

@ -25,7 +25,6 @@ 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.QuickActionRegistry; import net.osmand.plus.quickaction.QuickActionRegistry;
import net.osmand.plus.quickaction.QuickActionType;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -136,16 +135,20 @@ public class SettingsHelper {
public abstract static class SettingsItem { public abstract static class SettingsItem {
protected OsmandApplication app;
private String pluginId; private String pluginId;
private String fileName; private String fileName;
boolean shouldReplace = false; boolean shouldReplace = false;
SettingsItem() { SettingsItem(OsmandApplication app) {
this.app = app;
init(); init();
} }
SettingsItem(@NonNull JSONObject json) throws JSONException { SettingsItem(OsmandApplication app, @NonNull JSONObject json) throws JSONException {
this.app = app;
init(); init();
readFromJson(json); readFromJson(json);
} }
@ -313,14 +316,11 @@ public class SettingsHelper {
public static class PluginSettingsItem extends SettingsItem { public static class PluginSettingsItem extends SettingsItem {
private OsmandApplication app;
private CustomOsmandPlugin plugin; private CustomOsmandPlugin plugin;
private List<SettingsItem> pluginItems; private List<SettingsItem> pluginItems;
PluginSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { PluginSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
this.app = app;
readFromJson(app, json);
} }
@NonNull @NonNull
@ -355,7 +355,9 @@ public class SettingsHelper {
return pluginItems; return pluginItems;
} }
void readFromJson(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { @Override
void readFromJson(@NonNull JSONObject json) throws JSONException {
super.readFromJson(json);
plugin = new CustomOsmandPlugin(app, json); plugin = new CustomOsmandPlugin(app, json);
} }
@ -384,13 +386,13 @@ public class SettingsHelper {
duplicateItems = new ArrayList<>(); duplicateItems = new ArrayList<>();
} }
CollectionSettingsItem(@NonNull List<T> items) { CollectionSettingsItem(OsmandApplication app, @NonNull List<T> items) {
super(); super(app);
this.items = items; this.items = items;
} }
CollectionSettingsItem(@NonNull JSONObject json) throws JSONException { CollectionSettingsItem(OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
} }
@NonNull @NonNull
@ -453,12 +455,12 @@ public class SettingsHelper {
private OsmandSettings settings; private OsmandSettings settings;
protected OsmandSettingsItem(@NonNull OsmandSettings settings) { protected OsmandSettingsItem(@NonNull OsmandSettings settings) {
super(); super(settings.getContext());
this.settings = settings; this.settings = settings;
} }
protected OsmandSettingsItem(@NonNull SettingsItemType type, @NonNull OsmandSettings settings, @NonNull JSONObject json) throws JSONException { protected OsmandSettingsItem(@NonNull SettingsItemType type, @NonNull OsmandSettings settings, @NonNull JSONObject json) throws JSONException {
super(json); super(settings.getContext(), json);
this.settings = settings; this.settings = settings;
} }
@ -620,7 +622,6 @@ public class SettingsHelper {
public static class ProfileSettingsItem extends OsmandSettingsItem { public static class ProfileSettingsItem extends OsmandSettingsItem {
private OsmandApplication app;
private ApplicationMode appMode; private ApplicationMode appMode;
private ApplicationModeBuilder builder; private ApplicationModeBuilder builder;
private ApplicationModeBean modeBean; private ApplicationModeBean modeBean;
@ -628,14 +629,12 @@ public class SettingsHelper {
public ProfileSettingsItem(@NonNull OsmandApplication app, @NonNull ApplicationMode appMode) { public ProfileSettingsItem(@NonNull OsmandApplication app, @NonNull ApplicationMode appMode) {
super(app.getSettings()); super(app.getSettings());
this.app = app;
this.appMode = appMode; this.appMode = appMode;
appModeBeanPrefsIds = new HashSet<>(Arrays.asList(app.getSettings().appModeBeanPrefsIds)); appModeBeanPrefsIds = new HashSet<>(Arrays.asList(app.getSettings().appModeBeanPrefsIds));
} }
public ProfileSettingsItem(@NonNull OsmandApplication app, @NonNull ApplicationModeBean modeBean) { public ProfileSettingsItem(@NonNull OsmandApplication app, @NonNull ApplicationModeBean modeBean) {
super(app.getSettings()); super(app.getSettings());
this.app = app;
this.modeBean = modeBean; this.modeBean = modeBean;
builder = ApplicationMode.fromModeBean(app, modeBean); builder = ApplicationMode.fromModeBean(app, modeBean);
appMode = builder.getApplicationMode(); appMode = builder.getApplicationMode();
@ -644,8 +643,6 @@ public class SettingsHelper {
public ProfileSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { public ProfileSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(SettingsItemType.PROFILE, app.getSettings(), json); super(SettingsItemType.PROFILE, app.getSettings(), json);
this.app = app;
readFromJson(app, json);
appModeBeanPrefsIds = new HashSet<>(Arrays.asList(app.getSettings().appModeBeanPrefsIds)); appModeBeanPrefsIds = new HashSet<>(Arrays.asList(app.getSettings().appModeBeanPrefsIds));
} }
@ -687,7 +684,9 @@ public class SettingsHelper {
return "profile_" + getName() + ".json"; return "profile_" + getName() + ".json";
} }
void readFromJson(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { @Override
void readFromJson(@NonNull JSONObject json) throws JSONException {
super.readFromJson(json);
String appModeJson = json.getString("appMode"); String appModeJson = json.getString("appMode");
modeBean = ApplicationMode.fromJson(appModeJson); modeBean = ApplicationMode.fromJson(appModeJson);
builder = ApplicationMode.fromModeBean(app, modeBean); builder = ApplicationMode.fromModeBean(app, modeBean);
@ -814,17 +813,17 @@ public class SettingsHelper {
private InputStream inputStream; private InputStream inputStream;
protected String name; protected String name;
public StreamSettingsItem(@NonNull String name) { public StreamSettingsItem(@NonNull OsmandApplication app, @NonNull String name) {
super(); super(app);
this.name = name; this.name = name;
} }
StreamSettingsItem(@NonNull JSONObject json) throws JSONException { StreamSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
} }
public StreamSettingsItem(@NonNull InputStream inputStream, @NonNull String name) { public StreamSettingsItem(@NonNull OsmandApplication app, @NonNull InputStream inputStream, @NonNull String name) {
super(); super(app);
this.inputStream = inputStream; this.inputStream = inputStream;
this.name = name; this.name = name;
} }
@ -868,16 +867,16 @@ public class SettingsHelper {
@Nullable @Nullable
private byte[] data; private byte[] data;
public DataSettingsItem(@NonNull String name) { public DataSettingsItem(@NonNull OsmandApplication app, @NonNull String name) {
super(name); super(app, name);
} }
DataSettingsItem(@NonNull JSONObject json) throws JSONException { DataSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
} }
public DataSettingsItem(@NonNull byte[] data, @NonNull String name) { public DataSettingsItem(@NonNull OsmandApplication app, @NonNull byte[] data, @NonNull String name) {
super(name); super(app, name);
this.data = data; this.data = data;
} }
@ -992,7 +991,7 @@ public class SettingsHelper {
private FileSubtype subtype; private FileSubtype subtype;
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull File file) throws IllegalArgumentException { public FileSettingsItem(@NonNull OsmandApplication app, @NonNull File file) throws IllegalArgumentException {
super(file.getPath().replace(app.getAppPath(null).getPath(), "")); super(app, file.getPath().replace(app.getAppPath(null).getPath(), ""));
this.file = file; this.file = file;
this.appPath = app.getAppPath(null); this.appPath = app.getAppPath(null);
this.subtype = FileSubtype.getSubtypeByFileName(getFileName()); this.subtype = FileSubtype.getSubtypeByFileName(getFileName());
@ -1002,7 +1001,7 @@ public class SettingsHelper {
} }
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull FileSubtype subtype, @NonNull File file) throws IllegalArgumentException { public FileSettingsItem(@NonNull OsmandApplication app, @NonNull FileSubtype subtype, @NonNull File file) throws IllegalArgumentException {
super(file.getPath().replace(app.getAppPath(null).getPath(), "")); super(app, file.getPath().replace(app.getAppPath(null).getPath(), ""));
this.file = file; this.file = file;
this.appPath = app.getAppPath(null); this.appPath = app.getAppPath(null);
this.subtype = subtype; this.subtype = subtype;
@ -1012,7 +1011,7 @@ public class SettingsHelper {
} }
FileSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { FileSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
this.file = new File(app.getAppPath(null), name); this.file = new File(app.getAppPath(null), name);
this.appPath = app.getAppPath(null); this.appPath = app.getAppPath(null);
} }
@ -1176,19 +1175,16 @@ public class SettingsHelper {
public static class QuickActionsSettingsItem extends CollectionSettingsItem<QuickAction> { public static class QuickActionsSettingsItem extends CollectionSettingsItem<QuickAction> {
private OsmandApplication app;
private QuickActionRegistry actionRegistry; private QuickActionRegistry actionRegistry;
public QuickActionsSettingsItem(@NonNull OsmandApplication app, @NonNull List<QuickAction> items) { public QuickActionsSettingsItem(@NonNull OsmandApplication app, @NonNull List<QuickAction> items) {
super(items); super(app, items);
this.app = app;
actionRegistry = app.getQuickActionRegistry(); actionRegistry = app.getQuickActionRegistry();
existingItems = actionRegistry.getQuickActions(); existingItems = actionRegistry.getQuickActions();
} }
QuickActionsSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { QuickActionsSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
this.app = app;
actionRegistry = app.getQuickActionRegistry(); actionRegistry = app.getQuickActionRegistry();
existingItems = actionRegistry.getQuickActions(); existingItems = actionRegistry.getQuickActions();
} }
@ -1270,10 +1266,10 @@ public class SettingsHelper {
JSONObject object = itemsJson.getJSONObject(i); JSONObject object = itemsJson.getJSONObject(i);
String name = object.getString("name"); String name = object.getString("name");
QuickAction quickAction = null; QuickAction quickAction = null;
if(object.has("actionType")) { if (object.has("actionType")) {
quickAction = quickActionRegistry .newActionByStringType(object.getString("actionType")); quickAction = quickActionRegistry.newActionByStringType(object.getString("actionType"));
} else if(object.has("type")) { } else if (object.has("type")) {
quickAction = quickActionRegistry .newActionByType(object.getInt("type")); quickAction = quickActionRegistry.newActionByType(object.getInt("type"));
} }
if (quickAction != null) { if (quickAction != null) {
String paramsString = object.getString("params"); String paramsString = object.getString("params");
@ -1329,17 +1325,13 @@ public class SettingsHelper {
public static class PoiUiFilterSettingsItem extends CollectionSettingsItem<PoiUIFilter> { public static class PoiUiFilterSettingsItem extends CollectionSettingsItem<PoiUIFilter> {
private OsmandApplication app;
public PoiUiFilterSettingsItem(@NonNull OsmandApplication app, @NonNull List<PoiUIFilter> items) { public PoiUiFilterSettingsItem(@NonNull OsmandApplication app, @NonNull List<PoiUIFilter> items) {
super(items); super(app, items);
this.app = app;
existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false); existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
} }
PoiUiFilterSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { PoiUiFilterSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
this.app = app;
existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false); existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
} }
@ -1479,13 +1471,13 @@ public class SettingsHelper {
private List<String> existingItemsNames; private List<String> existingItemsNames;
public MapSourcesSettingsItem(@NonNull OsmandApplication app, @NonNull List<ITileSource> items) { public MapSourcesSettingsItem(@NonNull OsmandApplication app, @NonNull List<ITileSource> items) {
super(items); super(app, items);
this.app = app; this.app = app;
existingItemsNames = new ArrayList<>(app.getSettings().getTileSourceEntries().values()); existingItemsNames = new ArrayList<>(app.getSettings().getTileSourceEntries().values());
} }
MapSourcesSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { MapSourcesSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
this.app = app; this.app = app;
existingItemsNames = new ArrayList<>(app.getSettings().getTileSourceEntries().values()); existingItemsNames = new ArrayList<>(app.getSettings().getTileSourceEntries().values());
} }
@ -1682,7 +1674,7 @@ public class SettingsHelper {
private AvoidSpecificRoads specificRoads; private AvoidSpecificRoads specificRoads;
public AvoidRoadsSettingsItem(@NonNull OsmandApplication app, @NonNull List<AvoidRoadInfo> items) { public AvoidRoadsSettingsItem(@NonNull OsmandApplication app, @NonNull List<AvoidRoadInfo> items) {
super(items); super(app, items);
this.app = app; this.app = app;
settings = app.getSettings(); settings = app.getSettings();
specificRoads = app.getAvoidSpecificRoads(); specificRoads = app.getAvoidSpecificRoads();
@ -1690,7 +1682,7 @@ public class SettingsHelper {
} }
AvoidRoadsSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { AvoidRoadsSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
super(json); super(app, json);
this.app = app; this.app = app;
settings = app.getSettings(); settings = app.getSettings();
specificRoads = app.getAvoidSpecificRoads(); specificRoads = app.getAvoidSpecificRoads();
@ -1910,7 +1902,7 @@ public class SettingsHelper {
item = new PluginSettingsItem(app, json); item = new PluginSettingsItem(app, json);
break; break;
case DATA: case DATA:
item = new DataSettingsItem(json); item = new DataSettingsItem(app, json);
break; break;
case FILE: case FILE:
item = new FileSettingsItem(app, json); item = new FileSettingsItem(app, json);

View file

@ -797,7 +797,7 @@ public class ImportHelper {
for (SettingsHelper.SettingsItem item : items) { for (SettingsHelper.SettingsItem item : items) {
if (item instanceof SettingsHelper.PluginSettingsItem) { if (item instanceof SettingsHelper.PluginSettingsItem) {
pluginSettingsItems.add((SettingsHelper.PluginSettingsItem) item); pluginSettingsItems.add((SettingsHelper.PluginSettingsItem) item);
} else { } else if (Algorithms.isEmpty(item.getPluginId())) {
pluginIndependentItems.add(item); pluginIndependentItems.add(item);
} }
} }
@ -805,23 +805,16 @@ public class ImportHelper {
CustomOsmandPlugin plugin = pluginItem.getPlugin(); CustomOsmandPlugin plugin = pluginItem.getPlugin();
List<SettingsHelper.SettingsItem> pluginItems = pluginItem.getPluginItems(); List<SettingsHelper.SettingsItem> pluginItems = pluginItem.getPluginItems();
if (!Algorithms.isEmpty(pluginItems)) { if (!Algorithms.isEmpty(pluginItems)) {
pluginIndependentItems.removeAll(pluginItems);
for (SettingsHelper.SettingsItem item : pluginItems) { for (SettingsHelper.SettingsItem item : pluginItems) {
item.setShouldReplace(true); item.setShouldReplace(true);
if (item instanceof SettingsHelper.QuickActionsSettingsItem) { if (item instanceof SettingsHelper.FileSettingsItem) {
plugin.quickActions = ((SettingsHelper.QuickActionsSettingsItem) item).getItems(); SettingsHelper.FileSettingsItem fileItem = (SettingsHelper.FileSettingsItem) item;
if (fileItem.getSubtype() == SettingsHelper.FileSettingsItem.FileSubtype.RENDERING_STYLE) {
plugin.rendererNames.add(fileItem.getFileName());
} }
if (item instanceof SettingsHelper.PoiUiFilterSettingsItem) { if (fileItem.getSubtype() == SettingsHelper.FileSettingsItem.FileSubtype.ROUTING_CONFIG) {
plugin.poiUIFilters = ((SettingsHelper.PoiUiFilterSettingsItem) item).getItems(); plugin.routerNames.add(fileItem.getFileName());
} }
if (item instanceof SettingsHelper.MapSourcesSettingsItem) {
plugin.mapSources = ((SettingsHelper.MapSourcesSettingsItem) item).getItems();
}
if (item instanceof SettingsHelper.AvoidRoadsSettingsItem) {
plugin.avoidRoadInfos = ((SettingsHelper.AvoidRoadsSettingsItem) item).getItems();
}
if (item instanceof SettingsHelper.ProfileSettingsItem) {
plugin.appModes.add(((SettingsHelper.ProfileSettingsItem) item).getAppMode());
} }
} }

View file

@ -34,7 +34,6 @@ import net.osmand.plus.quickaction.actions.NewAction;
import net.osmand.plus.quickaction.actions.ShowHideFavoritesAction; import net.osmand.plus.quickaction.actions.ShowHideFavoritesAction;
import net.osmand.plus.quickaction.actions.ShowHideGpxTracksAction; import net.osmand.plus.quickaction.actions.ShowHideGpxTracksAction;
import net.osmand.plus.quickaction.actions.ShowHidePoiAction; import net.osmand.plus.quickaction.actions.ShowHidePoiAction;
import net.osmand.util.Algorithms;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
@ -194,7 +193,7 @@ public class QuickActionRegistry {
Type type = new TypeToken<List<QuickAction>>() { Type type = new TypeToken<List<QuickAction>>() {
}.getType(); }.getType();
List<QuickAction> quickActions = gson.fromJson(json, type); List<QuickAction> quickActions = gson.fromJson(json, type);
List<QuickAction> rquickActions = new ArrayList<>(quickActions.size()); List<QuickAction> rquickActions = new ArrayList<>();
if (quickActions != null) { if (quickActions != null) {
for (QuickAction qa : quickActions) { for (QuickAction qa : quickActions) {
if (qa != null) { if (qa != null) {