Add xml files import after check for file signature
This commit is contained in:
parent
27b235cb39
commit
fea6b424ca
3 changed files with 29 additions and 12 deletions
|
@ -87,7 +87,9 @@ public class ImportHelper {
|
|||
public enum ImportType {
|
||||
SETTINGS(OSMAND_SETTINGS_FILE_EXT),
|
||||
ROUTING(ROUTING_FILE_EXT),
|
||||
RENDERING(RENDERER_INDEX_EXT);
|
||||
RENDERING(RENDERER_INDEX_EXT),
|
||||
GPX(GPX_FILE_EXT),
|
||||
KML(KML_SUFFIX);
|
||||
|
||||
ImportType(String extension) {
|
||||
this.extension = extension;
|
||||
|
@ -226,8 +228,8 @@ public class ImportHelper {
|
|||
executeImportTask(new GpxImportTask(this, activity, gpxFile, fileName, save, useImportDir, showInDetailsActivity));
|
||||
}
|
||||
|
||||
private void handleGpxOrFavouritesImport(Uri fileUri, String fileName, boolean save, boolean useImportDir,
|
||||
boolean forceImportFavourites, boolean forceImportGpx) {
|
||||
protected void handleGpxOrFavouritesImport(Uri fileUri, String fileName, boolean save, boolean useImportDir,
|
||||
boolean forceImportFavourites, boolean forceImportGpx) {
|
||||
executeImportTask(new GpxOrFavouritesImportTask(this, activity, fileUri, fileName, save, useImportDir, forceImportFavourites, forceImportGpx));
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import androidx.fragment.app.FragmentActivity;
|
|||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.importfiles.ImportHelper.ImportType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.File;
|
||||
|
@ -19,6 +20,7 @@ import java.io.OutputStream;
|
|||
import static net.osmand.FileUtils.createUniqueFileName;
|
||||
import static net.osmand.IndexConstants.BINARY_MAP_INDEX_EXT;
|
||||
import static net.osmand.IndexConstants.MAPS_PATH;
|
||||
import static net.osmand.IndexConstants.RENDERER_INDEX_EXT;
|
||||
import static net.osmand.IndexConstants.ROUTING_FILE_EXT;
|
||||
import static net.osmand.IndexConstants.SQLITE_EXT;
|
||||
import static net.osmand.IndexConstants.TEMP_DIR;
|
||||
|
@ -99,7 +101,13 @@ class UriImportTask extends BaseImportAsyncTask<Void, Void, String> {
|
|||
if (error == null && file.exists()) {
|
||||
Uri tempUri = AndroidUtils.getUriForFile(app, file);
|
||||
if (XML_FILE_SIGNATURE == fileSignature) {
|
||||
importHelper.handleXmlFileImport(tempUri, null, null);
|
||||
ImportType importType = XmlImportTask.checkImportType(app, tempUri);
|
||||
if (importType == ImportType.RENDERING || importType == ImportType.ROUTING) {
|
||||
String name = importType == ImportType.RENDERING ? "renderer" + RENDERER_INDEX_EXT : "router" + ROUTING_FILE_EXT;
|
||||
importHelper.handleXmlFileImport(tempUri, name, null);
|
||||
} else if (importType == ImportType.GPX || importType == ImportType.KML) {
|
||||
importHelper.handleGpxOrFavouritesImport(tempUri, tempFileName, save, useImportDir, false, false);
|
||||
}
|
||||
} else if (OBF_FILE_SIGNATURE == fileSignature) {
|
||||
String name = createUniqueFileName(app, "map", MAPS_PATH, BINARY_MAP_INDEX_EXT);
|
||||
importHelper.handleObfImport(tempUri, name);
|
||||
|
|
|
@ -11,6 +11,7 @@ import net.osmand.CallbackWithObject;
|
|||
import net.osmand.IndexConstants;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.AppInitializer.LoadRoutingFilesCallback;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.importfiles.ImportHelper.ImportType;
|
||||
import net.osmand.router.RoutingConfiguration.Builder;
|
||||
|
@ -29,26 +30,26 @@ import static net.osmand.plus.AppInitializer.loadRoutingFiles;
|
|||
|
||||
class XmlImportTask extends BaseImportAsyncTask<Void, Void, String> {
|
||||
|
||||
private Uri intentUri;
|
||||
private Uri uri;
|
||||
private String destFileName;
|
||||
private ImportType importType;
|
||||
private CallbackWithObject routingCallback;
|
||||
|
||||
public XmlImportTask(@NonNull FragmentActivity activity, @NonNull Uri intentUri,
|
||||
@NonNull String fileName, @Nullable CallbackWithObject routingCallback) {
|
||||
public XmlImportTask(@NonNull FragmentActivity activity, @NonNull Uri uri,
|
||||
@NonNull String fileName, @Nullable CallbackWithObject routingCallback) {
|
||||
super(activity);
|
||||
this.intentUri = intentUri;
|
||||
this.uri = uri;
|
||||
this.destFileName = fileName;
|
||||
this.routingCallback = routingCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doInBackground(Void... voids) {
|
||||
checkImportType();
|
||||
importType = checkImportType(app, uri);
|
||||
if (importType != null) {
|
||||
File dest = getDestinationFile();
|
||||
if (dest != null) {
|
||||
return ImportHelper.copyFile(app, dest, intentUri, true);
|
||||
return ImportHelper.copyFile(app, dest, uri, true);
|
||||
}
|
||||
}
|
||||
return app.getString(R.string.file_import_error, destFileName, app.getString(R.string.unsupported_type_error));
|
||||
|
@ -115,10 +116,11 @@ class XmlImportTask extends BaseImportAsyncTask<Void, Void, String> {
|
|||
return null;
|
||||
}
|
||||
|
||||
private void checkImportType() {
|
||||
protected static ImportType checkImportType(OsmandApplication app, Uri uri) {
|
||||
ImportType importType = null;
|
||||
InputStream is = null;
|
||||
try {
|
||||
is = app.getContentResolver().openInputStream(intentUri);
|
||||
is = app.getContentResolver().openInputStream(uri);
|
||||
if (is != null) {
|
||||
XmlPullParser parser = PlatformUtil.newXMLPullParser();
|
||||
parser.setInput(is, "UTF-8");
|
||||
|
@ -130,6 +132,10 @@ class XmlImportTask extends BaseImportAsyncTask<Void, Void, String> {
|
|||
importType = ImportType.ROUTING;
|
||||
} else if ("renderingStyle".equals(name)) {
|
||||
importType = ImportType.RENDERING;
|
||||
} else if ("gpx".equals(name)) {
|
||||
importType = ImportType.GPX;
|
||||
} else if ("kml".equals(name)) {
|
||||
importType = ImportType.KML;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -145,5 +151,6 @@ class XmlImportTask extends BaseImportAsyncTask<Void, Void, String> {
|
|||
} finally {
|
||||
Algorithms.closeStream(is);
|
||||
}
|
||||
return importType;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue