From fb9afd7119fd74c78a3f03ed9d4d9c6c1d16876c Mon Sep 17 00:00:00 2001 From: cepprice Date: Thu, 28 Jan 2021 17:18:18 +0500 Subject: [PATCH 1/3] Test solution --- .../osmand/plus/activities/MapActivity.java | 4 +- .../plus/importfiles/SettingsImportTask.java | 2 +- .../backend/backup/SettingsHelper.java | 123 ++++++++++++++---- .../fragments/ExportSettingsFragment.java | 2 +- 4 files changed, 103 insertions(+), 28 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index eb6dcbfbb7..7b81a13e0a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -652,7 +652,9 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven protected void onNewIntent(final Intent intent) { super.onNewIntent(intent); setIntent(intent); - intentHelper.parseLaunchIntents(); + if (!intentHelper.parseLaunchIntents()) { + intentHelper.parseContentIntent(); + } } @Override diff --git a/OsmAnd/src/net/osmand/plus/importfiles/SettingsImportTask.java b/OsmAnd/src/net/osmand/plus/importfiles/SettingsImportTask.java index 0a5e0370af..1f886a23bb 100644 --- a/OsmAnd/src/net/osmand/plus/importfiles/SettingsImportTask.java +++ b/OsmAnd/src/net/osmand/plus/importfiles/SettingsImportTask.java @@ -102,7 +102,7 @@ class SettingsImportTask extends BaseLoadAsyncTask { } } else { Map> allSettingsMap = getSettingsToOperate(pluginIndependentItems, false); - List settingsList = settingsHelper.getFilteredSettingsItems(allSettingsMap, settingsTypes, false); + List settingsList = settingsHelper.getFilteredSettingsItems(allSettingsMap, settingsTypes, pluginIndependentItems, false); settingsHelper.checkDuplicates(file, settingsList, settingsList, getDuplicatesListener(file, replace)); } } diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 7008425f14..1fdfef081b 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -480,19 +480,21 @@ public class SettingsHelper { typesMap.putAll(getMyPlacesItems()); typesMap.putAll(getResourcesItems()); - return getFilteredSettingsItems(typesMap, settingsTypes, export); + return getFilteredSettingsItems(typesMap, settingsTypes, null, export); } - public List getFilteredSettingsItems(Map> allSettingsMap, - List settingsTypes, boolean export) { - List settingsItems = new ArrayList<>(); + public List getFilteredSettingsItems( + Map> allSettingsMap, List settingsTypes, + List settingsItems, boolean export + ) { + List filteredSettingsItems = new ArrayList<>(); for (ExportSettingsType settingsType : settingsTypes) { List settingsDataObjects = allSettingsMap.get(settingsType); if (settingsDataObjects != null) { - settingsItems.addAll(prepareSettingsItems(settingsDataObjects, export)); + filteredSettingsItems.addAll(prepareSettingsItems(settingsDataObjects, settingsItems, export)); } } - return settingsItems; + return filteredSettingsItems; } public Map getSettingsByCategory(boolean addProfiles) { @@ -693,8 +695,8 @@ public class SettingsHelper { return files; } - public List prepareSettingsItems(List data, boolean export) { - List settingsItems = new ArrayList<>(); + public List prepareSettingsItems(List data, List settingsItems, boolean export) { + List result = new ArrayList<>(); List quickActions = new ArrayList<>(); List poiUIFilters = new ArrayList<>(); List tileSourceTemplates = new ArrayList<>(); @@ -719,9 +721,9 @@ public class SettingsHelper { try { File file = (File) object; if (file.getName().endsWith(IndexConstants.GPX_FILE_EXT)) { - settingsItems.add(new GpxSettingsItem(app, file)); + result.add(new GpxSettingsItem(app, file)); } else { - settingsItems.add(new FileSettingsItem(app, file)); + result.add(new FileSettingsItem(app, file)); } } catch (IllegalArgumentException e) { LOG.warn("Trying to export unsuported file type", e); @@ -746,65 +748,136 @@ public class SettingsHelper { } else if (object instanceof HistoryEntry) { historyEntries.add((HistoryEntry) object); } else if (object instanceof GlobalSettingsItem) { - settingsItems.add((GlobalSettingsItem) object); + result.add((GlobalSettingsItem) object); } else if (object instanceof OnlineRoutingEngine) { onlineRoutingEngines.add((OnlineRoutingEngine) object); } } if (!quickActions.isEmpty()) { - settingsItems.add(new QuickActionsSettingsItem(app, quickActions)); + result.add(new QuickActionsSettingsItem(app, getBaseQuickActionsSettingsItem(settingsItems), quickActions)); } if (!poiUIFilters.isEmpty()) { - settingsItems.add(new PoiUiFiltersSettingsItem(app, poiUIFilters)); + result.add(new PoiUiFiltersSettingsItem(app, getBasePoiUiFiltersSettingsItem(settingsItems), poiUIFilters)); } if (!tileSourceTemplates.isEmpty()) { - settingsItems.add(new MapSourcesSettingsItem(app, tileSourceTemplates)); + result.add(new MapSourcesSettingsItem(app, getBaseMapSourcesSettingsItem(settingsItems), tileSourceTemplates)); } if (!avoidRoads.isEmpty()) { - settingsItems.add(new AvoidRoadsSettingsItem(app, avoidRoads)); + result.add(new AvoidRoadsSettingsItem(app, getBaseAvoidRoadsSettingsItem(settingsItems), avoidRoads)); } if (!appModeBeans.isEmpty()) { for (ApplicationModeBean modeBean : appModeBeans) { if (export) { ApplicationMode mode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null); if (mode != null) { - settingsItems.add(new ProfileSettingsItem(app, mode)); + result.add(new ProfileSettingsItem(app, mode)); } } else { - settingsItems.add(new ProfileSettingsItem(app, null, modeBean)); + result.add(new ProfileSettingsItem(app, getBaseProfileSettingsItem(modeBean, settingsItems), modeBean)); } } } if (!osmNotesPointList.isEmpty()) { - settingsItems.add(new OsmNotesSettingsItem(app, osmNotesPointList)); + OsmNotesSettingsItem baseItem = getBaseItem(SettingsItemType.OSM_NOTES, OsmNotesSettingsItem.class, settingsItems); + result.add(new OsmNotesSettingsItem(app, baseItem, osmNotesPointList)); } if (!osmEditsPointList.isEmpty()) { - settingsItems.add(new OsmEditsSettingsItem(app, osmEditsPointList)); + OsmEditsSettingsItem baseItem = getBaseItem(SettingsItemType.OSM_EDITS, OsmEditsSettingsItem.class, settingsItems); + result.add(new OsmEditsSettingsItem(app, baseItem, osmEditsPointList)); } if (!favoriteGroups.isEmpty()) { - settingsItems.add(new FavoritesSettingsItem(app, favoriteGroups)); + FavoritesSettingsItem baseItem = getBaseItem(SettingsItemType.FAVOURITES, FavoritesSettingsItem.class, settingsItems); + result.add(new FavoritesSettingsItem(app, baseItem, favoriteGroups)); } if (!markersGroups.isEmpty()) { List mapMarkers = new ArrayList<>(); for (MapMarkersGroup group : markersGroups) { mapMarkers.addAll(group.getMarkers()); } - settingsItems.add(new MarkersSettingsItem(app, mapMarkers)); + MarkersSettingsItem baseItem = getBaseItem(SettingsItemType.ACTIVE_MARKERS, MarkersSettingsItem.class, settingsItems); + result.add(new MarkersSettingsItem(app, baseItem, mapMarkers)); } if (!markersHistoryGroups.isEmpty()) { List mapMarkers = new ArrayList<>(); for (MapMarkersGroup group : markersHistoryGroups) { mapMarkers.addAll(group.getMarkers()); } - settingsItems.add(new HistoryMarkersSettingsItem(app, mapMarkers)); + HistoryMarkersSettingsItem baseItem = getBaseItem(SettingsItemType.HISTORY_MARKERS, HistoryMarkersSettingsItem.class, settingsItems); + result.add(new HistoryMarkersSettingsItem(app, baseItem, mapMarkers)); } if (!historyEntries.isEmpty()) { - settingsItems.add(new SearchHistorySettingsItem(app, historyEntries)); + SearchHistorySettingsItem baseItem = getBaseItem(SettingsItemType.SEARCH_HISTORY, SearchHistorySettingsItem.class, settingsItems); + result.add(new SearchHistorySettingsItem(app, baseItem, historyEntries)); } if (!onlineRoutingEngines.isEmpty()) { - settingsItems.add(new OnlineRoutingSettingsItem(app, onlineRoutingEngines)); + OnlineRoutingSettingsItem baseItem = getBaseItem(SettingsItemType.ONLINE_ROUTING_ENGINES, OnlineRoutingSettingsItem.class, settingsItems); + result.add(new OnlineRoutingSettingsItem(app, baseItem, onlineRoutingEngines)); } - return settingsItems; + return result; + } + + @Nullable + private ProfileSettingsItem getBaseProfileSettingsItem(ApplicationModeBean modeBean, List settingsItems) { + for (SettingsItem settingsItem : settingsItems) { + if (settingsItem.getType() == SettingsItemType.PROFILE) { + ProfileSettingsItem profileItem = (ProfileSettingsItem) settingsItem; + ApplicationModeBean bean = profileItem.getModeBean(); + if (Algorithms.objectEquals(bean.stringKey, modeBean.stringKey) && Algorithms.objectEquals(bean.userProfileName, modeBean.userProfileName)) { + return profileItem; + } + } + } + return null; + } + + @Nullable + private QuickActionsSettingsItem getBaseQuickActionsSettingsItem(List settingsItems) { + for (SettingsItem settingsItem : settingsItems) { + if (settingsItem.getType() == SettingsItemType.QUICK_ACTIONS) { + return (QuickActionsSettingsItem) settingsItem; + } + } + return null; + } + + @Nullable + private PoiUiFiltersSettingsItem getBasePoiUiFiltersSettingsItem(List settingsItems) { + for (SettingsItem settingsItem : settingsItems) { + if (settingsItem.getType() == SettingsItemType.POI_UI_FILTERS) { + return (PoiUiFiltersSettingsItem) settingsItem; + } + } + return null; + } + + @Nullable + private MapSourcesSettingsItem getBaseMapSourcesSettingsItem(List settingsItems) { + for (SettingsItem settingsItem : settingsItems) { + if (settingsItem.getType() == SettingsItemType.MAP_SOURCES) { + return (MapSourcesSettingsItem) settingsItem; + } + } + return null; + } + + @Nullable + private AvoidRoadsSettingsItem getBaseAvoidRoadsSettingsItem(List settingsItems) { + for (SettingsItem settingsItem : settingsItems) { + if (settingsItem.getType() == SettingsItemType.AVOID_ROADS) { + return (AvoidRoadsSettingsItem) settingsItem; + } + } + return null; + } + + @Nullable + private T getBaseItem(SettingsItemType settingsItemType, Class clazz, List settingsItems) { + for (SettingsItem settingsItem : settingsItems) { + if (settingsItem.getType() == settingsItemType && clazz.isInstance(settingsItem)) { + return clazz.cast(settingsItem); + } + } + return null; } public static Map getSettingsToOperateByCategory(List items, boolean importComplete) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java index 586b6f0db3..f38a0ba77a 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -150,7 +150,7 @@ public class ExportSettingsFragment extends BaseSettingsListFragment { showExportProgressDialog(); File tempDir = FileUtils.getTempDir(app); String fileName = getFileName(); - List items = app.getSettingsHelper().prepareSettingsItems(adapter.getData(), true); + List items = app.getSettingsHelper().prepareSettingsItems(adapter.getData(), null, true); progress.setMax(getMaxProgress(items)); app.getSettingsHelper().exportSettings(tempDir, fileName, getSettingsExportListener(), items, true); } From 1f345d0dfd0a714b65fbaa8b9b53e833a3a33560 Mon Sep 17 00:00:00 2001 From: cepprice Date: Thu, 28 Jan 2021 18:19:30 +0500 Subject: [PATCH 2/3] Small edit --- .../osmand/plus/settings/backend/backup/SettingsHelper.java | 4 ++-- .../plus/settings/fragments/ExportSettingsFragment.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 1fdfef081b..9a50851a56 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -480,12 +480,12 @@ public class SettingsHelper { typesMap.putAll(getMyPlacesItems()); typesMap.putAll(getResourcesItems()); - return getFilteredSettingsItems(typesMap, settingsTypes, null, export); + return getFilteredSettingsItems(typesMap, settingsTypes, Collections.emptyList(), export); } public List getFilteredSettingsItems( Map> allSettingsMap, List settingsTypes, - List settingsItems, boolean export + @NonNull List settingsItems, boolean export ) { List filteredSettingsItems = new ArrayList<>(); for (ExportSettingsType settingsType : settingsTypes) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java index f38a0ba77a..6fef4d4e03 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportSettingsFragment.java @@ -36,6 +36,7 @@ import org.apache.commons.logging.Log; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Locale; @@ -150,7 +151,7 @@ public class ExportSettingsFragment extends BaseSettingsListFragment { showExportProgressDialog(); File tempDir = FileUtils.getTempDir(app); String fileName = getFileName(); - List items = app.getSettingsHelper().prepareSettingsItems(adapter.getData(), null, true); + List items = app.getSettingsHelper().prepareSettingsItems(adapter.getData(), Collections.emptyList(), true); progress.setMax(getMaxProgress(items)); app.getSettingsHelper().exportSettings(tempDir, fileName, getSettingsExportListener(), items, true); } From 8f8ddbf9b457362e28d8b873ed208c00b871c116 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 1 Feb 2021 01:59:58 +0200 Subject: [PATCH 3/3] Try to remove duplicate code --- .../backend/backup/SettingsHelper.java | 54 +---- .../fragments/ImportSettingsFragment.java | 210 +----------------- 2 files changed, 11 insertions(+), 253 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java index 9a50851a56..11fe377040 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/SettingsHelper.java @@ -728,6 +728,8 @@ public class SettingsHelper { } catch (IllegalArgumentException e) { LOG.warn("Trying to export unsuported file type", e); } + } else if (object instanceof FileSettingsItem) { + result.add((FileSettingsItem) object); } else if (object instanceof AvoidRoadInfo) { avoidRoads.add((AvoidRoadInfo) object); } else if (object instanceof ApplicationModeBean) { @@ -754,16 +756,20 @@ public class SettingsHelper { } } if (!quickActions.isEmpty()) { - result.add(new QuickActionsSettingsItem(app, getBaseQuickActionsSettingsItem(settingsItems), quickActions)); + QuickActionsSettingsItem baseItem = getBaseItem(SettingsItemType.QUICK_ACTIONS, QuickActionsSettingsItem.class, settingsItems); + result.add(new QuickActionsSettingsItem(app, baseItem, quickActions)); } if (!poiUIFilters.isEmpty()) { - result.add(new PoiUiFiltersSettingsItem(app, getBasePoiUiFiltersSettingsItem(settingsItems), poiUIFilters)); + PoiUiFiltersSettingsItem baseItem = getBaseItem(SettingsItemType.POI_UI_FILTERS, PoiUiFiltersSettingsItem.class, settingsItems); + result.add(new PoiUiFiltersSettingsItem(app, baseItem, poiUIFilters)); } if (!tileSourceTemplates.isEmpty()) { - result.add(new MapSourcesSettingsItem(app, getBaseMapSourcesSettingsItem(settingsItems), tileSourceTemplates)); + MapSourcesSettingsItem baseItem = getBaseItem(SettingsItemType.MAP_SOURCES, MapSourcesSettingsItem.class, settingsItems); + result.add(new MapSourcesSettingsItem(app, baseItem, tileSourceTemplates)); } if (!avoidRoads.isEmpty()) { - result.add(new AvoidRoadsSettingsItem(app, getBaseAvoidRoadsSettingsItem(settingsItems), avoidRoads)); + AvoidRoadsSettingsItem baseItem = getBaseItem(SettingsItemType.AVOID_ROADS, AvoidRoadsSettingsItem.class, settingsItems); + result.add(new AvoidRoadsSettingsItem(app, baseItem, avoidRoads)); } if (!appModeBeans.isEmpty()) { for (ApplicationModeBean modeBean : appModeBeans) { @@ -830,46 +836,6 @@ public class SettingsHelper { return null; } - @Nullable - private QuickActionsSettingsItem getBaseQuickActionsSettingsItem(List settingsItems) { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.QUICK_ACTIONS) { - return (QuickActionsSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private PoiUiFiltersSettingsItem getBasePoiUiFiltersSettingsItem(List settingsItems) { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.POI_UI_FILTERS) { - return (PoiUiFiltersSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private MapSourcesSettingsItem getBaseMapSourcesSettingsItem(List settingsItems) { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.MAP_SOURCES) { - return (MapSourcesSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private AvoidRoadsSettingsItem getBaseAvoidRoadsSettingsItem(List settingsItems) { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.AVOID_ROADS) { - return (AvoidRoadsSettingsItem) settingsItem; - } - } - return null; - } - @Nullable private T getBaseItem(SettingsItemType settingsItemType, Class clazz, List settingsItems) { for (SettingsItem settingsItem : settingsItems) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java index 83a271b059..b614bc57dd 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ImportSettingsFragment.java @@ -18,57 +18,24 @@ import androidx.fragment.app.FragmentManager; import com.google.android.material.appbar.CollapsingToolbarLayout; -import net.osmand.IndexConstants; import net.osmand.PlatformUtil; -import net.osmand.map.ITileSource; -import net.osmand.map.TileSourceManager.TileSourceTemplate; import net.osmand.plus.AppInitializer; -import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; -import net.osmand.plus.SQLiteTileSource; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.audionotes.AudioVideoNotesPlugin; import net.osmand.plus.download.ReloadIndexesTask; import net.osmand.plus.download.ReloadIndexesTask.ReloadIndexesListener; -import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo; -import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; -import net.osmand.plus.mapmarkers.MapMarker; -import net.osmand.plus.mapmarkers.MapMarkersGroup; -import net.osmand.plus.onlinerouting.engine.OnlineRoutingEngine; -import net.osmand.plus.osmedit.OpenstreetmapPoint; -import net.osmand.plus.osmedit.OsmNotesPoint; -import net.osmand.plus.poi.PoiUIFilter; -import net.osmand.plus.quickaction.QuickAction; -import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean; -import net.osmand.plus.settings.backend.ExportSettingsType; -import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem; -import net.osmand.plus.settings.backend.backup.FavoritesSettingsItem; import net.osmand.plus.settings.backend.backup.FileSettingsItem; -import net.osmand.plus.settings.backend.backup.GlobalSettingsItem; -import net.osmand.plus.settings.backend.backup.GpxSettingsItem; -import net.osmand.plus.settings.backend.backup.HistoryMarkersSettingsItem; -import net.osmand.plus.settings.backend.backup.MapSourcesSettingsItem; -import net.osmand.plus.settings.backend.backup.MarkersSettingsItem; -import net.osmand.plus.settings.backend.backup.OnlineRoutingSettingsItem; -import net.osmand.plus.settings.backend.backup.OsmEditsSettingsItem; -import net.osmand.plus.settings.backend.backup.OsmNotesSettingsItem; -import net.osmand.plus.settings.backend.backup.PoiUiFiltersSettingsItem; -import net.osmand.plus.settings.backend.backup.ProfileSettingsItem; -import net.osmand.plus.settings.backend.backup.QuickActionsSettingsItem; -import net.osmand.plus.settings.backend.backup.SearchHistorySettingsItem; import net.osmand.plus.settings.backend.backup.SettingsHelper; import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask; import net.osmand.plus.settings.backend.backup.SettingsItem; -import net.osmand.plus.settings.backend.backup.SettingsItemType; -import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; import java.io.File; import java.lang.ref.WeakReference; -import java.util.ArrayList; import java.util.List; public class ImportSettingsFragment extends BaseSettingsListFragment { @@ -177,7 +144,7 @@ public class ImportSettingsFragment extends BaseSettingsListFragment { } private void importItems() { - List selectedItems = getSettingsItemsFromData(adapter.getData()); + List selectedItems = settingsHelper.prepareSettingsItems(adapter.getData(), settingsItems, false); if (file != null && settingsItems != null) { duplicateStartTime = System.currentTimeMillis(); settingsHelper.checkDuplicates(file, settingsItems, selectedItems, getDuplicatesListener()); @@ -272,181 +239,6 @@ public class ImportSettingsFragment extends BaseSettingsListFragment { this.settingsItems = settingsItems; } - @Nullable - private ProfileSettingsItem getBaseProfileSettingsItem(ApplicationModeBean modeBean) { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.PROFILE) { - ProfileSettingsItem profileItem = (ProfileSettingsItem) settingsItem; - ApplicationModeBean bean = profileItem.getModeBean(); - if (Algorithms.objectEquals(bean.stringKey, modeBean.stringKey) && Algorithms.objectEquals(bean.userProfileName, modeBean.userProfileName)) { - return profileItem; - } - } - } - return null; - } - - @Nullable - private QuickActionsSettingsItem getBaseQuickActionsSettingsItem() { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.QUICK_ACTIONS) { - return (QuickActionsSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private PoiUiFiltersSettingsItem getBasePoiUiFiltersSettingsItem() { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.POI_UI_FILTERS) { - return (PoiUiFiltersSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private MapSourcesSettingsItem getBaseMapSourcesSettingsItem() { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.MAP_SOURCES) { - return (MapSourcesSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private AvoidRoadsSettingsItem getBaseAvoidRoadsSettingsItem() { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == SettingsItemType.AVOID_ROADS) { - return (AvoidRoadsSettingsItem) settingsItem; - } - } - return null; - } - - @Nullable - private T getBaseItem(SettingsItemType settingsItemType, Class clazz) { - for (SettingsItem settingsItem : settingsItems) { - if (settingsItem.getType() == settingsItemType && clazz.isInstance(settingsItem)) { - return clazz.cast(settingsItem); - } - } - return null; - } - - private List getSettingsItemsFromData(List data) { - List settingsItems = new ArrayList<>(); - List appModeBeans = new ArrayList<>(); - List quickActions = new ArrayList<>(); - List poiUIFilters = new ArrayList<>(); - List tileSourceTemplates = new ArrayList<>(); - List avoidRoads = new ArrayList<>(); - List osmNotesPointList = new ArrayList<>(); - List osmEditsPointList = new ArrayList<>(); - List favoriteGroups = new ArrayList<>(); - List markersGroups = new ArrayList<>(); - List markersHistoryGroups = new ArrayList<>(); - List historyEntries = new ArrayList<>(); - List onlineRoutingEngines = new ArrayList<>(); - for (Object object : data) { - if (object instanceof ApplicationModeBean) { - appModeBeans.add((ApplicationModeBean) object); - } else if (object instanceof QuickAction) { - quickActions.add((QuickAction) object); - } else if (object instanceof PoiUIFilter) { - poiUIFilters.add((PoiUIFilter) object); - } else if (object instanceof TileSourceTemplate || object instanceof SQLiteTileSource) { - tileSourceTemplates.add((ITileSource) object); - } else if (object instanceof File) { - File file = (File) object; - if (file.getName().endsWith(IndexConstants.GPX_FILE_EXT)) { - settingsItems.add(new GpxSettingsItem(app, file)); - } else { - settingsItems.add(new FileSettingsItem(app, file)); - } - } else if (object instanceof FileSettingsItem) { - settingsItems.add((FileSettingsItem) object); - } else if (object instanceof AvoidRoadInfo) { - avoidRoads.add((AvoidRoadInfo) object); - } else if (object instanceof OsmNotesPoint) { - osmNotesPointList.add((OsmNotesPoint) object); - } else if (object instanceof OpenstreetmapPoint) { - osmEditsPointList.add((OpenstreetmapPoint) object); - } else if (object instanceof FavoriteGroup) { - favoriteGroups.add((FavoriteGroup) object); - } else if (object instanceof GlobalSettingsItem) { - settingsItems.add((GlobalSettingsItem) object); - } else if (object instanceof MapMarkersGroup) { - MapMarkersGroup markersGroup = (MapMarkersGroup) object; - if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) { - markersGroups.add((MapMarkersGroup) object); - } else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) { - markersHistoryGroups.add((MapMarkersGroup) object); - } - } else if (object instanceof HistoryEntry) { - historyEntries.add((HistoryEntry) object); - } else if (object instanceof OnlineRoutingEngine) { - onlineRoutingEngines.add((OnlineRoutingEngine) object); - } - } - if (!appModeBeans.isEmpty()) { - for (ApplicationModeBean modeBean : appModeBeans) { - settingsItems.add(new ProfileSettingsItem(app, getBaseProfileSettingsItem(modeBean), modeBean)); - } - } - if (!quickActions.isEmpty()) { - settingsItems.add(new QuickActionsSettingsItem(app, getBaseQuickActionsSettingsItem(), quickActions)); - } - if (!poiUIFilters.isEmpty()) { - settingsItems.add(new PoiUiFiltersSettingsItem(app, getBasePoiUiFiltersSettingsItem(), poiUIFilters)); - } - if (!tileSourceTemplates.isEmpty()) { - settingsItems.add(new MapSourcesSettingsItem(app, getBaseMapSourcesSettingsItem(), tileSourceTemplates)); - } - if (!avoidRoads.isEmpty()) { - settingsItems.add(new AvoidRoadsSettingsItem(app, getBaseAvoidRoadsSettingsItem(), avoidRoads)); - } - if (!osmNotesPointList.isEmpty()) { - OsmNotesSettingsItem baseItem = getBaseItem(SettingsItemType.OSM_NOTES, OsmNotesSettingsItem.class); - settingsItems.add(new OsmNotesSettingsItem(app, baseItem, osmNotesPointList)); - } - if (!osmEditsPointList.isEmpty()) { - OsmEditsSettingsItem baseItem = getBaseItem(SettingsItemType.OSM_EDITS, OsmEditsSettingsItem.class); - settingsItems.add(new OsmEditsSettingsItem(app, baseItem, osmEditsPointList)); - } - if (!favoriteGroups.isEmpty()) { - FavoritesSettingsItem baseItem = getBaseItem(SettingsItemType.FAVOURITES, FavoritesSettingsItem.class); - settingsItems.add(new FavoritesSettingsItem(app, baseItem, favoriteGroups)); - } - if (!markersGroups.isEmpty()) { - List mapMarkers = new ArrayList<>(); - for (MapMarkersGroup group : markersGroups) { - mapMarkers.addAll(group.getMarkers()); - } - MarkersSettingsItem baseItem = getBaseItem(SettingsItemType.ACTIVE_MARKERS, MarkersSettingsItem.class); - settingsItems.add(new MarkersSettingsItem(app, baseItem, mapMarkers)); - } - if (!markersHistoryGroups.isEmpty()) { - List mapMarkers = new ArrayList<>(); - for (MapMarkersGroup group : markersHistoryGroups) { - mapMarkers.addAll(group.getMarkers()); - } - HistoryMarkersSettingsItem baseItem = getBaseItem(SettingsItemType.HISTORY_MARKERS, HistoryMarkersSettingsItem.class); - settingsItems.add(new HistoryMarkersSettingsItem(app, baseItem, mapMarkers)); - } - if (!historyEntries.isEmpty()) { - SearchHistorySettingsItem baseItem = getBaseItem(SettingsItemType.SEARCH_HISTORY, SearchHistorySettingsItem.class); - settingsItems.add(new SearchHistorySettingsItem(app, baseItem, historyEntries)); - } - if (!onlineRoutingEngines.isEmpty()) { - OnlineRoutingSettingsItem baseItem = getBaseItem(SettingsItemType.ONLINE_ROUTING_ENGINES, OnlineRoutingSettingsItem.class); - settingsItems.add(new OnlineRoutingSettingsItem(app, baseItem, onlineRoutingEngines)); - } - return settingsItems; - } - public void setFile(File file) { this.file = file; }