Merge branch 'imp_exp_local_maps_offline' into imp_exp_osm_note

This commit is contained in:
Dima-1 2020-10-23 15:30:37 +03:00
commit ada0a8d300
5 changed files with 84 additions and 2 deletions

View file

@ -13,5 +13,6 @@ public enum ExportSettingsType {
TRACKS,
MULTIMEDIA_NOTES,
OSM_NOTES,
OSM_EDITS
OSM_EDITS,
OFFLINE_MAPS
}

View file

@ -16,8 +16,11 @@ import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.activities.LocalIndexHelper;
import net.osmand.plus.activities.LocalIndexInfo;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin.Recording;
import net.osmand.plus.download.ui.AbstractLoadLocalIndexTask;
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
@ -519,9 +522,30 @@ public class SettingsHelper {
dataList.put(ExportSettingsType.OSM_EDITS, editsPointList);
}
}
List<File> files = getLocalMapFiles();
if (!files.isEmpty()) {
dataList.put(ExportSettingsType.OFFLINE_MAPS, files);
}
return dataList;
}
private List<File> getLocalMapFiles() {
List<File> files = new ArrayList<>();
LocalIndexHelper helper = new LocalIndexHelper(app);
List<LocalIndexInfo> localMapFileList = helper.getLocalFullMaps(new AbstractLoadLocalIndexTask() {
@Override
public void loadFile(LocalIndexInfo... loaded) {
}
});
for (LocalIndexInfo map : localMapFileList) {
File file = new File(map.getPathToData());
if (file != null && file.exists()) {
files.add(file);
}
}
return files;
}
public List<SettingsItem> prepareAdditionalSettingsItems(List<? super Object> data) {
List<SettingsItem> settingsItems = new ArrayList<>();
List<QuickAction> quickActions = new ArrayList<>();
@ -583,6 +607,7 @@ public class SettingsHelper {
List<File> renderFilesList = new ArrayList<>();
List<File> multimediaFilesList = new ArrayList<>();
List<File> tracksFilesList = new ArrayList<>();
List<File> mapFilesList = new ArrayList<>();
List<AvoidRoadInfo> avoidRoads = new ArrayList<>();
List<OsmNotesPoint> notesPointList = new ArrayList<>();
List<OpenstreetmapPoint> editsPointList = new ArrayList<>();
@ -601,6 +626,8 @@ public class SettingsHelper {
multimediaFilesList.add(fileItem.getFile());
} else if (fileItem.getSubtype() == FileSettingsItem.FileSubtype.GPX) {
tracksFilesList.add(fileItem.getFile());
} else if (fileItem.getSubtype() == FileSettingsItem.FileSubtype.OBF_MAP) {
mapFilesList.add(fileItem.getFile());
}
break;
case QUICK_ACTIONS:
@ -689,6 +716,9 @@ public class SettingsHelper {
if (!editsPointList.isEmpty()) {
settingsToOperate.put(ExportSettingsType.OSM_EDITS, editsPointList);
}
if (!mapFilesList.isEmpty()) {
settingsToOperate.put(ExportSettingsType.OFFLINE_MAPS, mapFilesList);
}
return settingsToOperate;
}
}

View file

@ -18,5 +18,6 @@ public enum SettingsItemType {
TRACKS,
AUDIO_VIDEO_NOTES,
OSM_NOTES,
OSM_EDITS
OSM_EDITS,
OFFLINE_MAPS
}

View file

@ -264,6 +264,11 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
title.setText(OsmEditingPlugin.getTitle((OpenstreetmapPoint) currentItem, app));
setupIcon(icon, R.drawable.ic_action_info_dark, itemSelected);
break;
case OFFLINE_MAPS:
file = (File) currentItem;
title.setText(file.getName());
setupIcon(icon, R.drawable.ic_map, itemSelected);
break;
default:
return child;
}
@ -344,6 +349,8 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
return R.string.osm_notes;
case OSM_EDITS:
return R.string.osm_edit_modified_poi;
case OFFLINE_MAPS:
return R.string.download_regular_maps;
default:
return R.string.access_empty_list;
}

View file

@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.style.StyleSpan;
@ -27,6 +28,7 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import net.osmand.AndroidUtils;
import net.osmand.IProgress;
import net.osmand.PlatformUtil;
import net.osmand.map.ITileSource;
import net.osmand.map.TileSourceManager.TileSourceTemplate;
@ -63,11 +65,14 @@ 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.HashMap;
import java.util.List;
import java.util.Map;
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype.*;
public class ImportSettingsFragment extends BaseOsmAndFragment
implements View.OnClickListener {
@ -271,6 +276,7 @@ public class ImportSettingsFragment extends BaseOsmAndFragment
if (succeed) {
app.getRendererRegistry().updateExternalRenderers();
AppInitializer.loadRoutingFiles(app, null);
reloadIndexes(items);
if (fm != null && file != null) {
ImportCompleteFragment.showInstance(fm, items, file.getName());
}
@ -279,6 +285,43 @@ public class ImportSettingsFragment extends BaseOsmAndFragment
};
}
private void reloadIndexes(@NonNull List<SettingsItem> items) {
for (SettingsItem item : items) {
if (item instanceof FileSettingsItem && ((FileSettingsItem) item).getSubtype() == OBF_MAP) {
Activity activity = getActivity();
if (activity instanceof MapActivity) {
new ReloadIndexesTack((MapActivity) activity).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
break;
}
}
}
private static class ReloadIndexesTack extends AsyncTask<Void, Void, Void> {
private final WeakReference<MapActivity> mapActivityRef;
private final OsmandApplication app;
ReloadIndexesTack(@NonNull MapActivity mapActivity) {
this.mapActivityRef = new WeakReference<>(mapActivity);
this.app = mapActivity.getMyApplication();
}
@Override
protected Void doInBackground(Void[] params) {
app.getResourceManager().reloadIndexes(IProgress.EMPTY_PROGRESS, new ArrayList<String>());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
MapActivity mapActivity = mapActivityRef.get();
if (mapActivity != null) {
mapActivity.refreshMap();
}
}
}
private SettingsHelper.CheckDuplicatesListener getDuplicatesListener() {
return new SettingsHelper.CheckDuplicatesListener() {
@Override