Merge pull request #651 from krabaey/feature-favourites-import
option to import favourites.gpx as favourites
This commit is contained in:
commit
f68a84b8f7
2 changed files with 98 additions and 0 deletions
|
@ -1482,6 +1482,8 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
|||
<string name="rotate_map_to_bearing">Map orientation</string>
|
||||
<string name="show_route">Route details</string>
|
||||
<string name="fav_imported_sucessfully">Favorites successfully imported</string>
|
||||
<string name="import_file_favourites">Save as GPX file or import into favourites?</string>
|
||||
<string name="import_save">Save</string>
|
||||
<string name="fav_file_to_load_not_found">GPX file containing favorites is not found at {0}</string>
|
||||
<string name="fav_saved_sucessfully">Favorites successfully saved to {0}</string>
|
||||
<string name="no_fav_to_save">No favorite points to save</string>
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package net.osmand.plus.helpers;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
|
@ -9,6 +12,8 @@ import android.provider.OpenableColumns;
|
|||
import android.widget.Toast;
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.access.AccessibleToast;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.GPXUtilities;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
@ -24,7 +29,9 @@ import java.io.InputStream;
|
|||
import java.io.UnsupportedEncodingException;
|
||||
import java.text.MessageFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Koen Rabaey
|
||||
|
@ -52,6 +59,8 @@ public class GpxImportHelper {
|
|||
public void handleFileImport(final Uri intentUri, final String fileName) {
|
||||
if (fileName != null && fileName.endsWith(KML_SUFFIX)) {
|
||||
handleKmlImport(intentUri, fileName);
|
||||
} else if (fileName != null && fileName.endsWith("favourites.gpx")) {
|
||||
handleFavouritesImport(intentUri, fileName);
|
||||
} else {
|
||||
handleGpxImport(intentUri, fileName);
|
||||
}
|
||||
|
@ -107,6 +116,44 @@ public class GpxImportHelper {
|
|||
}.execute();
|
||||
}
|
||||
|
||||
private void handleFavouritesImport(final Uri gpxFile, final String fileName) {
|
||||
new AsyncTask<Void, Void, GPXUtilities.GPXFile>() {
|
||||
ProgressDialog progress = null;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
progress = ProgressDialog.show(mapActivity, application.getString(R.string.loading), application.getString(R.string.loading_data));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GPXUtilities.GPXFile doInBackground(Void... nothing) {
|
||||
InputStream is = null;
|
||||
try {
|
||||
final ParcelFileDescriptor pFD = application.getContentResolver().openFileDescriptor(gpxFile, "r");
|
||||
|
||||
if (pFD != null) {
|
||||
is = new FileInputStream(pFD.getFileDescriptor());
|
||||
return GPXUtilities.loadGPXFile(application, is);
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
//
|
||||
} finally {
|
||||
if (is != null) try {
|
||||
is.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final GPXUtilities.GPXFile result) {
|
||||
progress.dismiss();
|
||||
importFavourites(result, fileName);
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
private void handleKmlImport(final Uri kmlFile, final String name) {
|
||||
new AsyncTask<Void, Void, GPXUtilities.GPXFile>() {
|
||||
ProgressDialog progress = null;
|
||||
|
@ -227,4 +274,53 @@ public class GpxImportHelper {
|
|||
mapView.refreshMap();
|
||||
}
|
||||
}
|
||||
|
||||
private void importFavourites(final GPXUtilities.GPXFile gpxFile, final String fileName) {
|
||||
final DialogInterface.OnClickListener importFavouritesListener = new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
switch (which) {
|
||||
case DialogInterface.BUTTON_POSITIVE:
|
||||
final List<FavouritePoint> favourites = asFavourites(gpxFile.points);
|
||||
final FavouritesDbHelper favorites = application.getFavorites();
|
||||
|
||||
for (final FavouritePoint favourite : favourites) {
|
||||
favorites.deleteFavourite(favourite);
|
||||
favorites.addFavourite(favourite);
|
||||
}
|
||||
|
||||
AccessibleToast.makeText(mapActivity, R.string.fav_imported_sucessfully, Toast.LENGTH_LONG).show();
|
||||
final Intent newIntent = new Intent(mapActivity, application.getAppCustomization().getFavoritesActivity());
|
||||
mapActivity.startActivity(newIntent);
|
||||
break;
|
||||
case DialogInterface.BUTTON_NEGATIVE:
|
||||
handleResult(gpxFile, fileName );
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
new AlertDialog.Builder(mapActivity)
|
||||
.setMessage(R.string.import_file_favourites)
|
||||
.setPositiveButton(R.string.import_fav, importFavouritesListener)
|
||||
.setNegativeButton(R.string.import_save, importFavouritesListener)
|
||||
.show();
|
||||
}
|
||||
|
||||
private List<FavouritePoint> asFavourites(final List<GPXUtilities.WptPt> wptPts) {
|
||||
final List<FavouritePoint> favourites = new ArrayList<FavouritePoint>();
|
||||
|
||||
for (GPXUtilities.WptPt p : wptPts) {
|
||||
if (p.category != null) {
|
||||
favourites.add(new FavouritePoint(p.lat, p.lon, p.name, p.category));
|
||||
} else if (p.name != null) {
|
||||
int c;
|
||||
if ((c = p.name.lastIndexOf('_')) != -1) {
|
||||
favourites.add(new FavouritePoint(p.lat, p.lon, p.name.substring(0, c), p.name.substring(c + 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return favourites;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue