Reformat files using Android Studio
android-studio/bin/format.sh -m '*.java' -r brouter-routing-app To rebase active branches on top of the new master just rebase your branch onto the commit prior to the reformatting and format every commit of your branch using (<commit> should be replaced by this commit) git rebase \ --strategy-option=theirs \ --onto <commit> \ --exec 'format.sh -m "*.java" -r brouter-routing-app' \ --exec 'git commit --all --no-edit --amend' \ <commit>~ To ignore this mass edit during git blame see `.git-blame-ignore-revs`
This commit is contained in:
parent
13e0e382c1
commit
54d5c5e943
18 changed files with 3025 additions and 3662 deletions
|
@ -13,34 +13,28 @@ import android.os.Environment;
|
||||||
/**
|
/**
|
||||||
* static logger interface to be used in the android app
|
* static logger interface to be used in the android app
|
||||||
*/
|
*/
|
||||||
public class AppLogger
|
public class AppLogger {
|
||||||
{
|
|
||||||
private static FileWriter debugLogWriter = null;
|
private static FileWriter debugLogWriter = null;
|
||||||
private static boolean initDone = false;
|
private static boolean initDone = false;
|
||||||
|
|
||||||
private static void init()
|
private static void init() {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
// open logfile if existing
|
// open logfile if existing
|
||||||
File sd = Environment.getExternalStorageDirectory();
|
File sd = Environment.getExternalStorageDirectory();
|
||||||
if (sd == null) return;
|
if (sd == null) return;
|
||||||
File debugLog = new File(sd, "Android/media/btools.routingapp/brouter/brouterapp.txt");
|
File debugLog = new File(sd, "Android/media/btools.routingapp/brouter/brouterapp.txt");
|
||||||
if ( debugLog.exists() )
|
if (debugLog.exists()) {
|
||||||
{
|
|
||||||
debugLogWriter = new FileWriter(debugLog, true);
|
debugLogWriter = new FileWriter(debugLog, true);
|
||||||
}
|
}
|
||||||
|
} catch (IOException ioe) {
|
||||||
}
|
}
|
||||||
catch( IOException ioe ) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* log an info trace to the app log file, if any
|
* log an info trace to the app log file, if any
|
||||||
*/
|
*/
|
||||||
public static boolean isLogging()
|
public static boolean isLogging() {
|
||||||
{
|
if (!initDone) {
|
||||||
if ( !initDone )
|
|
||||||
{
|
|
||||||
initDone = true;
|
initDone = true;
|
||||||
init();
|
init();
|
||||||
log("logging started at " + new Date());
|
log("logging started at " + new Date());
|
||||||
|
@ -51,18 +45,13 @@ public class AppLogger
|
||||||
/**
|
/**
|
||||||
* log an info trace to the app log file, if any
|
* log an info trace to the app log file, if any
|
||||||
*/
|
*/
|
||||||
public static void log( String msg )
|
public static void log(String msg) {
|
||||||
{
|
if (isLogging()) {
|
||||||
if ( isLogging() )
|
try {
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
debugLogWriter.write(msg);
|
debugLogWriter.write(msg);
|
||||||
debugLogWriter.write('\n');
|
debugLogWriter.write('\n');
|
||||||
debugLogWriter.flush();
|
debugLogWriter.flush();
|
||||||
}
|
} catch (IOException e) {
|
||||||
catch( IOException e )
|
|
||||||
{
|
|
||||||
throw new RuntimeException("cannot write brouterapp.txt: " + e);
|
throw new RuntimeException("cannot write brouterapp.txt: " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,8 +60,7 @@ public class AppLogger
|
||||||
/**
|
/**
|
||||||
* Format an exception using
|
* Format an exception using
|
||||||
*/
|
*/
|
||||||
public static String formatThrowable( Throwable t )
|
public static String formatThrowable(Throwable t) {
|
||||||
{
|
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
PrintWriter pw = new PrintWriter(sw);
|
PrintWriter pw = new PrintWriter(sw);
|
||||||
t.printStackTrace(pw);
|
t.printStackTrace(pw);
|
||||||
|
|
|
@ -45,7 +45,9 @@ public class BInstallerActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/**
|
||||||
|
* Called when the activity is first created.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -105,25 +107,19 @@ public class BInstallerActivity extends Activity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
protected Dialog onCreateDialog( int id )
|
protected Dialog onCreateDialog(int id) {
|
||||||
{
|
|
||||||
AlertDialog.Builder builder;
|
AlertDialog.Builder builder;
|
||||||
switch ( id )
|
switch (id) {
|
||||||
{
|
|
||||||
case DIALOG_CONFIRM_DELETE_ID:
|
case DIALOG_CONFIRM_DELETE_ID:
|
||||||
builder = new AlertDialog.Builder(this);
|
builder = new AlertDialog.Builder(this);
|
||||||
builder
|
builder
|
||||||
.setTitle("Confirm Delete")
|
.setTitle("Confirm Delete")
|
||||||
.setMessage( "Really delete?" ).setPositiveButton( "Yes", new DialogInterface.OnClickListener()
|
.setMessage("Really delete?").setPositiveButton("Yes", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
mBInstallerView.deleteSelectedTiles();
|
mBInstallerView.deleteSelectedTiles();
|
||||||
}
|
}
|
||||||
} ).setNegativeButton( "No", new DialogInterface.OnClickListener()
|
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return builder.create();
|
return builder.create();
|
||||||
|
@ -134,17 +130,14 @@ public class BInstallerActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showConfirmDelete()
|
public void showConfirmDelete() {
|
||||||
{
|
|
||||||
showDialog(DIALOG_CONFIRM_DELETE_ID);
|
showDialog(DIALOG_CONFIRM_DELETE_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<Integer> dialogIds = new HashSet<Integer>();
|
private Set<Integer> dialogIds = new HashSet<Integer>();
|
||||||
|
|
||||||
private void showNewDialog( int id )
|
private void showNewDialog(int id) {
|
||||||
{
|
if (dialogIds.contains(Integer.valueOf(id))) {
|
||||||
if ( dialogIds.contains( Integer.valueOf( id ) ) )
|
|
||||||
{
|
|
||||||
removeDialog(id);
|
removeDialog(id);
|
||||||
}
|
}
|
||||||
dialogIds.add(Integer.valueOf(id));
|
dialogIds.add(Integer.valueOf(id));
|
||||||
|
@ -157,8 +150,7 @@ public class BInstallerActivity extends Activity {
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||||
return stat.getAvailableBlocksLong() * stat.getBlockSizeLong();
|
return stat.getAvailableBlocksLong() * stat.getBlockSizeLong();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return stat.getAvailableBlocks() * stat.getBlockSize();
|
return stat.getAvailableBlocks() * stat.getBlockSize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,14 +29,14 @@ import android.util.Log;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import btools.mapaccess.PhysicalFile;
|
import btools.mapaccess.PhysicalFile;
|
||||||
import btools.mapaccess.Rd5DiffManager;
|
import btools.mapaccess.Rd5DiffManager;
|
||||||
import btools.mapaccess.Rd5DiffTool;
|
import btools.mapaccess.Rd5DiffTool;
|
||||||
import btools.router.RoutingHelper;
|
import btools.router.RoutingHelper;
|
||||||
import btools.util.ProgressListener;
|
import btools.util.ProgressListener;
|
||||||
|
|
||||||
public class BInstallerView extends View
|
public class BInstallerView extends View {
|
||||||
{
|
|
||||||
private static final int MASK_SELECTED_RD5 = 1;
|
private static final int MASK_SELECTED_RD5 = 1;
|
||||||
private static final int MASK_DELETED_RD5 = 2;
|
private static final int MASK_DELETED_RD5 = 2;
|
||||||
private static final int MASK_INSTALLED_RD5 = 4;
|
private static final int MASK_INSTALLED_RD5 = 4;
|
||||||
|
@ -86,8 +86,7 @@ public class BInstallerView extends View
|
||||||
Activity mActivity;
|
Activity mActivity;
|
||||||
|
|
||||||
|
|
||||||
protected String baseNameForTile( int tileIndex )
|
protected String baseNameForTile(int tileIndex) {
|
||||||
{
|
|
||||||
int lon = (tileIndex % 72) * 5 - 180;
|
int lon = (tileIndex % 72) * 5 - 180;
|
||||||
int lat = (tileIndex / 72) * 5 - 90;
|
int lat = (tileIndex / 72) * 5 - 90;
|
||||||
String slon = lon < 0 ? "W" + (-lon) : "E" + lon;
|
String slon = lon < 0 ? "W" + (-lon) : "E" + lon;
|
||||||
|
@ -95,13 +94,11 @@ public class BInstallerView extends View
|
||||||
return slon + "_" + slat;
|
return slon + "_" + slat;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int gridPos2Tileindex( int ix, int iy )
|
private int gridPos2Tileindex(int ix, int iy) {
|
||||||
{
|
|
||||||
return (35 - iy) * 72 + (ix >= 70 ? ix - 70 : ix + 2);
|
return (35 - iy) * 72 + (ix >= 70 ? ix - 70 : ix + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int tileForBaseName( String basename )
|
private int tileForBaseName(String basename) {
|
||||||
{
|
|
||||||
String uname = basename.toUpperCase(Locale.ROOT);
|
String uname = basename.toUpperCase(Locale.ROOT);
|
||||||
int idx = uname.indexOf("_");
|
int idx = uname.indexOf("_");
|
||||||
if (idx < 0) return -1;
|
if (idx < 0) return -1;
|
||||||
|
@ -117,22 +114,18 @@ public class BInstallerView extends View
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isDownloadCanceled()
|
public boolean isDownloadCanceled() {
|
||||||
{
|
|
||||||
return downloadCanceled;
|
return downloadCanceled;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleDownload()
|
private void toggleDownload() {
|
||||||
{
|
if (isDownloading) {
|
||||||
if ( isDownloading )
|
|
||||||
{
|
|
||||||
downloadCanceled = true;
|
downloadCanceled = true;
|
||||||
downloadAction = "Canceling...";
|
downloadAction = "Canceling...";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( delTiles > 0 )
|
if (delTiles > 0) {
|
||||||
{
|
|
||||||
((BInstallerActivity) getContext()).showConfirmDelete();
|
((BInstallerActivity) getContext()).showConfirmDelete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -142,17 +135,13 @@ public class BInstallerView extends View
|
||||||
|
|
||||||
ArrayList<Integer> downloadList = new ArrayList<>();
|
ArrayList<Integer> downloadList = new ArrayList<>();
|
||||||
// prepare download list
|
// prepare download list
|
||||||
for( int ix=0; ix<72; ix++ )
|
for (int ix = 0; ix < 72; ix++) {
|
||||||
{
|
for (int iy = 0; iy < 36; iy++) {
|
||||||
for( int iy=0; iy<36; iy++ )
|
|
||||||
{
|
|
||||||
int tidx = gridPos2Tileindex(ix, iy);
|
int tidx = gridPos2Tileindex(ix, iy);
|
||||||
if ( ( tileStatus[tidx] & MASK_SELECTED_RD5 ) != 0 )
|
if ((tileStatus[tidx] & MASK_SELECTED_RD5) != 0) {
|
||||||
{
|
|
||||||
int tilesize = BInstallerSizes.getRd5Size(tidx);
|
int tilesize = BInstallerSizes.getRd5Size(tidx);
|
||||||
downloadList.add(tidx);
|
downloadList.add(tidx);
|
||||||
if ( tilesize > 0 && tilesize < min_size )
|
if (tilesize > 0 && tilesize < min_size) {
|
||||||
{
|
|
||||||
tidx_min = tidx;
|
tidx_min = tidx;
|
||||||
min_size = tilesize;
|
min_size = tilesize;
|
||||||
}
|
}
|
||||||
|
@ -192,11 +181,9 @@ public class BInstallerView extends View
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void downloadDone( boolean success )
|
public void downloadDone(boolean success) {
|
||||||
{
|
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
if ( success )
|
if (success) {
|
||||||
{
|
|
||||||
scanExistingFiles();
|
scanExistingFiles();
|
||||||
toggleDownload(); // keep on if no error
|
toggleDownload(); // keep on if no error
|
||||||
}
|
}
|
||||||
|
@ -213,79 +200,65 @@ public class BInstallerView extends View
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private int tileIndex( float x, float y )
|
private int tileIndex(float x, float y) {
|
||||||
{
|
|
||||||
int ix = (int) (72.f * x / bmp.getWidth());
|
int ix = (int) (72.f * x / bmp.getWidth());
|
||||||
int iy = (int) (36.f * y / bmp.getHeight());
|
int iy = (int) (36.f * y / bmp.getHeight());
|
||||||
if (ix >= 0 && ix < 72 && iy >= 0 && iy < 36) return gridPos2Tileindex(ix, iy);
|
if (ix >= 0 && ix < 72 && iy >= 0 && iy < 36) return gridPos2Tileindex(ix, iy);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearTileSelection( int mask )
|
private void clearTileSelection(int mask) {
|
||||||
{
|
|
||||||
// clear selection if zooming out
|
// clear selection if zooming out
|
||||||
for (int ix = 0; ix < 72; ix++)
|
for (int ix = 0; ix < 72; ix++)
|
||||||
for( int iy=0; iy<36; iy++ )
|
for (int iy = 0; iy < 36; iy++) {
|
||||||
{
|
|
||||||
int tidx = gridPos2Tileindex(ix, iy);
|
int tidx = gridPos2Tileindex(ix, iy);
|
||||||
tileStatus[tidx] ^= tileStatus[tidx] & mask;
|
tileStatus[tidx] ^= tileStatus[tidx] & mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get back the current image scale
|
// get back the current image scale
|
||||||
private float currentScale()
|
private float currentScale() {
|
||||||
{
|
|
||||||
testVector[1] = 1.f;
|
testVector[1] = 1.f;
|
||||||
mat.mapVectors(testVector);
|
mat.mapVectors(testVector);
|
||||||
return testVector[1] / viewscale;
|
return testVector[1] / viewscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteRawTracks()
|
private void deleteRawTracks() {
|
||||||
{
|
|
||||||
File modeDir = new File(baseDir, "brouter/modes");
|
File modeDir = new File(baseDir, "brouter/modes");
|
||||||
String[] fileNames = modeDir.list();
|
String[] fileNames = modeDir.list();
|
||||||
if (fileNames == null) return;
|
if (fileNames == null) return;
|
||||||
for( String fileName : fileNames )
|
for (String fileName : fileNames) {
|
||||||
{
|
if (fileName.endsWith("_rawtrack.dat")) {
|
||||||
if ( fileName.endsWith( "_rawtrack.dat" ) )
|
|
||||||
{
|
|
||||||
File f = new File(modeDir, fileName);
|
File f = new File(modeDir, fileName);
|
||||||
f.delete();
|
f.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scanExistingFiles()
|
private void scanExistingFiles() {
|
||||||
{
|
|
||||||
clearTileSelection(MASK_INSTALLED_RD5 | MASK_CURRENT_RD5);
|
clearTileSelection(MASK_INSTALLED_RD5 | MASK_CURRENT_RD5);
|
||||||
|
|
||||||
scanExistingFiles(new File(baseDir, "brouter/segments4"));
|
scanExistingFiles(new File(baseDir, "brouter/segments4"));
|
||||||
|
|
||||||
File secondary = RoutingHelper.getSecondarySegmentDir(new File(baseDir, "brouter/segments4"));
|
File secondary = RoutingHelper.getSecondarySegmentDir(new File(baseDir, "brouter/segments4"));
|
||||||
if ( secondary != null )
|
if (secondary != null) {
|
||||||
{
|
|
||||||
scanExistingFiles(secondary);
|
scanExistingFiles(secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
availableSize = -1;
|
availableSize = -1;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
availableSize = (long) ((BInstallerActivity) getContext()).getAvailableSpace(baseDir.getAbsolutePath());
|
availableSize = (long) ((BInstallerActivity) getContext()).getAvailableSpace(baseDir.getAbsolutePath());
|
||||||
//StatFs stat = new StatFs(baseDir.getAbsolutePath ());
|
//StatFs stat = new StatFs(baseDir.getAbsolutePath ());
|
||||||
//availableSize = (long)stat.getAvailableBlocksLong()*stat.getBlockSizeLong();
|
//availableSize = (long)stat.getAvailableBlocksLong()*stat.getBlockSizeLong();
|
||||||
}
|
} catch (Exception e) { /* ignore */ }
|
||||||
catch (Exception e) { /* ignore */ }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scanExistingFiles( File dir )
|
private void scanExistingFiles(File dir) {
|
||||||
{
|
|
||||||
String[] fileNames = dir.list();
|
String[] fileNames = dir.list();
|
||||||
if (fileNames == null) return;
|
if (fileNames == null) return;
|
||||||
String suffix = ".rd5";
|
String suffix = ".rd5";
|
||||||
for( String fileName : fileNames )
|
for (String fileName : fileNames) {
|
||||||
{
|
if (fileName.endsWith(suffix)) {
|
||||||
if ( fileName.endsWith( suffix ) )
|
|
||||||
{
|
|
||||||
String basename = fileName.substring(0, fileName.length() - suffix.length());
|
String basename = fileName.substring(0, fileName.length() - suffix.length());
|
||||||
int tidx = tileForBaseName(basename);
|
int tidx = tileForBaseName(basename);
|
||||||
tileStatus[tidx] |= MASK_INSTALLED_RD5;
|
tileStatus[tidx] |= MASK_INSTALLED_RD5;
|
||||||
|
@ -303,15 +276,12 @@ public class BInstallerView extends View
|
||||||
|
|
||||||
baseDir = ConfigHelper.getBaseDir(getContext());
|
baseDir = ConfigHelper.getBaseDir(getContext());
|
||||||
segmentDir = new File(baseDir, "brouter/segments4");
|
segmentDir = new File(baseDir, "brouter/segments4");
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
AssetManager assetManager = getContext().getAssets();
|
AssetManager assetManager = getContext().getAssets();
|
||||||
InputStream istr = assetManager.open("world.png");
|
InputStream istr = assetManager.open("world.png");
|
||||||
bmp = BitmapFactory.decodeStream(istr);
|
bmp = BitmapFactory.decodeStream(istr);
|
||||||
istr.close();
|
istr.close();
|
||||||
}
|
} catch (IOException io) {
|
||||||
catch( IOException io )
|
|
||||||
{
|
|
||||||
throw new RuntimeException("cannot read world.png from assets");
|
throw new RuntimeException("cannot read world.png from assets");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,16 +326,13 @@ public class BInstallerView extends View
|
||||||
super.onSizeChanged(w, h, oldw, oldh);
|
super.onSizeChanged(w, h, oldw, oldh);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toast( String msg )
|
private void toast(String msg) {
|
||||||
{
|
|
||||||
Toast.makeText(getContext(), msg, Toast.LENGTH_LONG).show();
|
Toast.makeText(getContext(), msg, Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas)
|
protected void onDraw(Canvas canvas) {
|
||||||
{
|
if (!isDownloading) {
|
||||||
if ( !isDownloading )
|
|
||||||
{
|
|
||||||
canvas.setMatrix(mat);
|
canvas.setMatrix(mat);
|
||||||
canvas.drawBitmap(bmp, 0, 0, null);
|
canvas.drawBitmap(bmp, 0, 0, null);
|
||||||
}
|
}
|
||||||
|
@ -378,18 +345,15 @@ public class BInstallerView extends View
|
||||||
|
|
||||||
boolean drawGrid = tilesVisible && !isDownloading;
|
boolean drawGrid = tilesVisible && !isDownloading;
|
||||||
|
|
||||||
if ( drawGrid )
|
if (drawGrid) {
|
||||||
{
|
|
||||||
|
|
||||||
pnt_1.setColor(Color.GREEN);
|
pnt_1.setColor(Color.GREEN);
|
||||||
|
|
||||||
for( int ix=1; ix<72; ix++ )
|
for (int ix = 1; ix < 72; ix++) {
|
||||||
{
|
|
||||||
float fx = fw * ix;
|
float fx = fw * ix;
|
||||||
canvas.drawLine(fx, 0, fx, ih, pnt_1);
|
canvas.drawLine(fx, 0, fx, ih, pnt_1);
|
||||||
}
|
}
|
||||||
for( int iy=1; iy<36; iy++ )
|
for (int iy = 1; iy < 36; iy++) {
|
||||||
{
|
|
||||||
float fy = fh * iy;
|
float fy = fh * iy;
|
||||||
canvas.drawLine(0, fy, iw, fy, pnt_1);
|
canvas.drawLine(0, fy, iw, fy, pnt_1);
|
||||||
}
|
}
|
||||||
|
@ -422,23 +386,20 @@ public class BInstallerView extends View
|
||||||
|
|
||||||
long mb = 1024 * 1024;
|
long mb = 1024 * 1024;
|
||||||
|
|
||||||
if ( isDownloading )
|
if (isDownloading) {
|
||||||
{
|
|
||||||
String sizeHint = currentDownloadSize > 0 ? " (" + ((currentDownloadSize + mb - 1) / mb) + " MB)" : "";
|
String sizeHint = currentDownloadSize > 0 ? " (" + ((currentDownloadSize + mb - 1) / mb) + " MB)" : "";
|
||||||
paint.setTextSize(30);
|
paint.setTextSize(30);
|
||||||
canvas.drawText(currentDownloadOperation, 30, (imgh / 3) * 2 - 30, paint);
|
canvas.drawText(currentDownloadOperation, 30, (imgh / 3) * 2 - 30, paint);
|
||||||
// canvas.drawText( currentDownloadOperation + " " + currentDownloadFile + sizeHint, 30, (imgh/3)*2-30, paint);
|
// canvas.drawText( currentDownloadOperation + " " + currentDownloadFile + sizeHint, 30, (imgh/3)*2-30, paint);
|
||||||
canvas.drawText(downloadAction, 30, (imgh / 3) * 2, paint);
|
canvas.drawText(downloadAction, 30, (imgh / 3) * 2, paint);
|
||||||
}
|
}
|
||||||
if ( !tilesVisible && !isDownloading)
|
if (!tilesVisible && !isDownloading) {
|
||||||
{
|
|
||||||
paint.setTextSize(35);
|
paint.setTextSize(35);
|
||||||
canvas.drawText("Touch region to zoom in!", 30, (imgh / 3) * 2, paint);
|
canvas.drawText("Touch region to zoom in!", 30, (imgh / 3) * 2, paint);
|
||||||
}
|
}
|
||||||
paint.setTextSize(20);
|
paint.setTextSize(20);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String totmb = ((totalSize + mb - 1) / mb) + " MB";
|
String totmb = ((totalSize + mb - 1) / mb) + " MB";
|
||||||
String freemb = availableSize >= 0 ? ((availableSize + mb - 1) / mb) + " MB" : "?";
|
String freemb = availableSize >= 0 ? ((availableSize + mb - 1) / mb) + " MB" : "?";
|
||||||
canvas.drawText("Selected segments=" + rd5Tiles, 10, 25, paint);
|
canvas.drawText("Selected segments=" + rd5Tiles, 10, 25, paint);
|
||||||
|
@ -453,8 +414,7 @@ public class BInstallerView extends View
|
||||||
rd5Tiles == 0 &&
|
rd5Tiles == 0 &&
|
||||||
RoutingHelper.hasDirectoryAnyDatafiles(segmentDir)) btnText = "Update all";
|
RoutingHelper.hasDirectoryAnyDatafiles(segmentDir)) btnText = "Update all";
|
||||||
|
|
||||||
if ( btnText != null )
|
if (btnText != null) {
|
||||||
{
|
|
||||||
canvas.drawLine(imgw - btnw, imgh - btnh, imgw - btnw, imgh - 2, paint);
|
canvas.drawLine(imgw - btnw, imgh - btnh, imgw - btnw, imgh - 2, paint);
|
||||||
canvas.drawLine(imgw - btnw, imgh - btnh, imgw - 2, imgh - btnh, paint);
|
canvas.drawLine(imgw - btnw, imgh - btnh, imgw - 2, imgh - btnh, paint);
|
||||||
canvas.drawLine(imgw - btnw, imgh - btnh, imgw - btnw, imgh - 2, paint);
|
canvas.drawLine(imgw - btnw, imgh - btnh, imgw - btnw, imgh - 2, paint);
|
||||||
|
@ -470,24 +430,18 @@ public class BInstallerView extends View
|
||||||
|
|
||||||
float tx, ty;
|
float tx, ty;
|
||||||
|
|
||||||
private void drawSelectedTiles( Canvas canvas, Paint pnt, float fw, float fh, int status, int mask, boolean doCount, boolean cntDel, boolean doDraw )
|
private void drawSelectedTiles(Canvas canvas, Paint pnt, float fw, float fh, int status, int mask, boolean doCount, boolean cntDel, boolean doDraw) {
|
||||||
{
|
|
||||||
for (int ix = 0; ix < 72; ix++)
|
for (int ix = 0; ix < 72; ix++)
|
||||||
for ( int iy = 0; iy < 36; iy++ )
|
for (int iy = 0; iy < 36; iy++) {
|
||||||
{
|
|
||||||
int tidx = gridPos2Tileindex(ix, iy);
|
int tidx = gridPos2Tileindex(ix, iy);
|
||||||
if ( ( tileStatus[tidx] & mask ) == status )
|
if ((tileStatus[tidx] & mask) == status) {
|
||||||
{
|
|
||||||
int tilesize = BInstallerSizes.getRd5Size(tidx);
|
int tilesize = BInstallerSizes.getRd5Size(tidx);
|
||||||
if ( tilesize > 0 )
|
if (tilesize > 0) {
|
||||||
{
|
if (doCount) {
|
||||||
if ( doCount )
|
|
||||||
{
|
|
||||||
rd5Tiles++;
|
rd5Tiles++;
|
||||||
totalSize += BInstallerSizes.getRd5Size(tidx);
|
totalSize += BInstallerSizes.getRd5Size(tidx);
|
||||||
}
|
}
|
||||||
if ( cntDel )
|
if (cntDel) {
|
||||||
{
|
|
||||||
delTiles++;
|
delTiles++;
|
||||||
totalSize += BInstallerSizes.getRd5Size(tidx);
|
totalSize += BInstallerSizes.getRd5Size(tidx);
|
||||||
}
|
}
|
||||||
|
@ -507,15 +461,11 @@ float tx, ty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteSelectedTiles()
|
public void deleteSelectedTiles() {
|
||||||
{
|
for (int ix = 0; ix < 72; ix++) {
|
||||||
for ( int ix = 0; ix < 72; ix++ )
|
for (int iy = 0; iy < 36; iy++) {
|
||||||
{
|
|
||||||
for ( int iy = 0; iy < 36; iy++ )
|
|
||||||
{
|
|
||||||
int tidx = gridPos2Tileindex(ix, iy);
|
int tidx = gridPos2Tileindex(ix, iy);
|
||||||
if ( ( tileStatus[tidx] & MASK_DELETED_RD5 ) != 0 )
|
if ((tileStatus[tidx] & MASK_DELETED_RD5) != 0) {
|
||||||
{
|
|
||||||
new File(baseDir, "brouter/segments4/" + baseNameForTile(tidx) + ".rd5").delete();
|
new File(baseDir, "brouter/segments4/" + baseNameForTile(tidx) + ".rd5").delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -567,8 +517,7 @@ float tx, ty;
|
||||||
float r = (float) Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));
|
float r = (float) Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));
|
||||||
float hr = (float) Math.sqrt((hx1 - hx0) * (hx1 - hx0) + (hy1 - hy0) * (hy1 - hy0));
|
float hr = (float) Math.sqrt((hx1 - hx0) * (hx1 - hx0) + (hy1 - hy0) * (hy1 - hy0));
|
||||||
|
|
||||||
if ( hr > 0. )
|
if (hr > 0.) {
|
||||||
{
|
|
||||||
float ratio = r / hr;
|
float ratio = r / hr;
|
||||||
|
|
||||||
float mx = (x1 + x0) / 2.f;
|
float mx = (x1 + x0) / 2.f;
|
||||||
|
@ -585,8 +534,7 @@ float tx, ty;
|
||||||
mat.postScale(ratio, ratio, mx, my);
|
mat.postScale(ratio, ratio, mx, my);
|
||||||
|
|
||||||
boolean tilesv = currentScale() >= 3.f;
|
boolean tilesv = currentScale() >= 3.f;
|
||||||
if ( tilesVisible && !tilesv )
|
if (tilesVisible && !tilesv) {
|
||||||
{
|
|
||||||
clearTileSelection(MASK_SELECTED_RD5 | MASK_DELETED_RD5);
|
clearTileSelection(MASK_SELECTED_RD5 | MASK_DELETED_RD5);
|
||||||
}
|
}
|
||||||
tilesVisible = tilesv;
|
tilesVisible = tilesv;
|
||||||
|
@ -602,24 +550,19 @@ float tx, ty;
|
||||||
|
|
||||||
long downTime = event.getEventTime() - event.getDownTime();
|
long downTime = event.getEventTime() - event.getDownTime();
|
||||||
|
|
||||||
if ( downTime < 5 || downTime > 500 )
|
if (downTime < 5 || downTime > 500) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Math.abs(lastDownX - event.getX() ) > 10 || Math.abs(lastDownY - event.getY() ) > 10 )
|
if (Math.abs(lastDownX - event.getX()) > 10 || Math.abs(lastDownY - event.getY()) > 10) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// download button?
|
// download button?
|
||||||
if ( ( delTiles > 0 || rd5Tiles >= 0 || isDownloading ) && event.getX() > imgwOrig - btnw*scaleOrig && event.getY() > imghOrig-btnh*scaleOrig )
|
if ((delTiles > 0 || rd5Tiles >= 0 || isDownloading) && event.getX() > imgwOrig - btnw * scaleOrig && event.getY() > imghOrig - btnh * scaleOrig) {
|
||||||
{
|
|
||||||
if (rd5Tiles == 0) {
|
if (rd5Tiles == 0) {
|
||||||
for ( int ix = 0; ix < 72; ix++ )
|
for (int ix = 0; ix < 72; ix++) {
|
||||||
{
|
for (int iy = 0; iy < 36; iy++) {
|
||||||
for ( int iy = 0; iy < 36; iy++ )
|
|
||||||
{
|
|
||||||
int tidx = gridPos2Tileindex(ix, iy);
|
int tidx = gridPos2Tileindex(ix, iy);
|
||||||
if (tidx != -1) {
|
if (tidx != -1) {
|
||||||
if ((tileStatus[tidx] & MASK_INSTALLED_RD5) != 0) {
|
if ((tileStatus[tidx] & MASK_INSTALLED_RD5) != 0) {
|
||||||
|
@ -635,11 +578,9 @@ float tx, ty;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !tilesVisible )
|
if (!tilesVisible) {
|
||||||
{
|
|
||||||
float scale = currentScale();
|
float scale = currentScale();
|
||||||
if ( scale > 0f && scale < 5f )
|
if (scale > 0f && scale < 5f) {
|
||||||
{
|
|
||||||
float ratio = 5f / scale;
|
float ratio = 5f / scale;
|
||||||
mat.postScale(ratio, ratio, event.getX(), event.getY());
|
mat.postScale(ratio, ratio, event.getX(), event.getY());
|
||||||
tilesVisible = true;
|
tilesVisible = true;
|
||||||
|
@ -650,30 +591,22 @@ float tx, ty;
|
||||||
if (isDownloading) break;
|
if (isDownloading) break;
|
||||||
|
|
||||||
Matrix imat = new Matrix();
|
Matrix imat = new Matrix();
|
||||||
if ( mat.invert(imat) )
|
if (mat.invert(imat)) {
|
||||||
{
|
|
||||||
float[] touchpoint = new float[2];
|
float[] touchpoint = new float[2];
|
||||||
touchpoint[0] = event.getX();
|
touchpoint[0] = event.getX();
|
||||||
touchpoint[1] = event.getY();
|
touchpoint[1] = event.getY();
|
||||||
imat.mapPoints(touchpoint);
|
imat.mapPoints(touchpoint);
|
||||||
|
|
||||||
int tidx = tileIndex(touchpoint[0], touchpoint[1]);
|
int tidx = tileIndex(touchpoint[0], touchpoint[1]);
|
||||||
if ( tidx != -1 )
|
if (tidx != -1) {
|
||||||
{
|
if ((tileStatus[tidx] & MASK_SELECTED_RD5) != 0) {
|
||||||
if ( ( tileStatus[tidx] & MASK_SELECTED_RD5 ) != 0 )
|
|
||||||
{
|
|
||||||
tileStatus[tidx] ^= MASK_SELECTED_RD5;
|
tileStatus[tidx] ^= MASK_SELECTED_RD5;
|
||||||
if ( ( tileStatus[tidx] & MASK_INSTALLED_RD5 ) != 0 )
|
if ((tileStatus[tidx] & MASK_INSTALLED_RD5) != 0) {
|
||||||
{
|
|
||||||
tileStatus[tidx] |= MASK_DELETED_RD5;
|
tileStatus[tidx] |= MASK_DELETED_RD5;
|
||||||
}
|
}
|
||||||
}
|
} else if ((tileStatus[tidx] & MASK_DELETED_RD5) != 0) {
|
||||||
else if ( ( tileStatus[tidx] & MASK_DELETED_RD5 ) != 0 )
|
|
||||||
{
|
|
||||||
tileStatus[tidx] ^= MASK_DELETED_RD5;
|
tileStatus[tidx] ^= MASK_DELETED_RD5;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
tileStatus[tidx] ^= MASK_SELECTED_RD5;
|
tileStatus[tidx] ^= MASK_SELECTED_RD5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -696,5 +629,4 @@ float tx, ty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,11 +63,12 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
private PowerManager mPowerManager;
|
private PowerManager mPowerManager;
|
||||||
private WakeLock mWakeLock;
|
private WakeLock mWakeLock;
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/**
|
||||||
|
* Called when the activity is first created.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void onCreate( Bundle savedInstanceState )
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
// Get an instance of the PowerManager
|
// Get an instance of the PowerManager
|
||||||
|
@ -87,20 +88,16 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
protected Dialog onCreateDialog( int id )
|
protected Dialog onCreateDialog(int id) {
|
||||||
{
|
|
||||||
AlertDialog.Builder builder;
|
AlertDialog.Builder builder;
|
||||||
builder = new AlertDialog.Builder(this);
|
builder = new AlertDialog.Builder(this);
|
||||||
builder.setCancelable(false);
|
builder.setCancelable(false);
|
||||||
|
|
||||||
switch ( id )
|
switch (id) {
|
||||||
{
|
|
||||||
case DIALOG_SELECTPROFILE_ID:
|
case DIALOG_SELECTPROFILE_ID:
|
||||||
builder.setTitle("Select a routing profile");
|
builder.setTitle("Select a routing profile");
|
||||||
builder.setItems( availableProfiles, new DialogInterface.OnClickListener()
|
builder.setItems(availableProfiles, new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int item) {
|
||||||
public void onClick( DialogInterface dialog, int item )
|
|
||||||
{
|
|
||||||
selectedProfile = availableProfiles[item];
|
selectedProfile = availableProfiles[item];
|
||||||
mBRouterView.startProcessing(selectedProfile);
|
mBRouterView.startProcessing(selectedProfile);
|
||||||
}
|
}
|
||||||
|
@ -110,10 +107,8 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
builder.setTitle("Select Main Action");
|
builder.setTitle("Select Main Action");
|
||||||
builder
|
builder
|
||||||
.setItems(new String[]
|
.setItems(new String[]
|
||||||
{ "Download Manager", "BRouter App" }, new DialogInterface.OnClickListener()
|
{"Download Manager", "BRouter App"}, new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int item) {
|
||||||
public void onClick( DialogInterface dialog, int item )
|
|
||||||
{
|
|
||||||
if (item == 0)
|
if (item == 0)
|
||||||
startDownloadManager();
|
startDownloadManager();
|
||||||
else
|
else
|
||||||
|
@ -121,10 +116,8 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.setNegativeButton( "Close", new DialogInterface.OnClickListener()
|
.setNegativeButton("Close", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,18 +129,14 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
.setMessage(
|
.setMessage(
|
||||||
"*** Attention: ***\n\n" + "The Download Manager is used to download routing-data "
|
"*** Attention: ***\n\n" + "The Download Manager is used to download routing-data "
|
||||||
+ "files which can be up to 170MB each. Do not start the Download Manager " + "on a cellular data connection without a data plan! "
|
+ "files which can be up to 170MB each. Do not start the Download Manager " + "on a cellular data connection without a data plan! "
|
||||||
+ "Download speed is restricted to 4 MBit/s." ).setPositiveButton( "I know", new DialogInterface.OnClickListener()
|
+ "Download speed is restricted to 4 MBit/s.").setPositiveButton("I know", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
Intent intent = new Intent(BRouterActivity.this, BInstallerActivity.class);
|
Intent intent = new Intent(BRouterActivity.this, BInstallerActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
// finish();
|
// finish();
|
||||||
}
|
}
|
||||||
} ).setNegativeButton( "Cancel", new DialogInterface.OnClickListener()
|
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -163,16 +152,12 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
+ "configure the profile mapping. But you will not be able to use nogo-points or do "
|
+ "configure the profile mapping. But you will not be able to use nogo-points or do "
|
||||||
+ "long distance calculations. If you know the path to your map-tool, you can manually "
|
+ "long distance calculations. If you know the path to your map-tool, you can manually "
|
||||||
+ "configure it in 'storageconfig.txt'. Or I can do an extended scan searching "
|
+ "configure it in 'storageconfig.txt'. Or I can do an extended scan searching "
|
||||||
+ "your sd-card for a valid waypoint database" ).setPositiveButton( "Scan", new DialogInterface.OnClickListener()
|
+ "your sd-card for a valid waypoint database").setPositiveButton("Scan", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
mBRouterView.startWpDatabaseScan();
|
mBRouterView.startWpDatabaseScan();
|
||||||
}
|
}
|
||||||
} ).setNegativeButton( "Exit", new DialogInterface.OnClickListener()
|
}).setNegativeButton("Exit", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -191,10 +176,8 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
+ "very long distance calculations. If you want to get classic mode back, you can manually install "
|
+ "very long distance calculations. If you want to get classic mode back, you can manually install "
|
||||||
+ "the APK of the BRouter App from the release page ( http://brouter.de/brouter/revisions.html ), which "
|
+ "the APK of the BRouter App from the release page ( http://brouter.de/brouter/revisions.html ), which "
|
||||||
+ "is still built against Android API 10, and does not have these limitations. "
|
+ "is still built against Android API 10, and does not have these limitations. "
|
||||||
).setNegativeButton( "Exit", new DialogInterface.OnClickListener()
|
).setNegativeButton("Exit", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -206,10 +189,8 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
"You successfully repeated a calculation that previously run into a timeout "
|
"You successfully repeated a calculation that previously run into a timeout "
|
||||||
+ "when started from your map-tool. If you repeat the same request from your "
|
+ "when started from your map-tool. If you repeat the same request from your "
|
||||||
+ "maptool, with the exact same destination point and a close-by starting point, "
|
+ "maptool, with the exact same destination point and a close-by starting point, "
|
||||||
+ "this request is guaranteed not to time out." ).setNegativeButton( "Exit", new DialogInterface.OnClickListener()
|
+ "this request is guaranteed not to time out.").setNegativeButton("Exit", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -218,16 +199,12 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
builder
|
builder
|
||||||
.setTitle("Waypoint Database ")
|
.setTitle("Waypoint Database ")
|
||||||
.setMessage("Found Waypoint-Database(s) for maptool-dir: " + maptoolDirCandidate
|
.setMessage("Found Waypoint-Database(s) for maptool-dir: " + maptoolDirCandidate
|
||||||
+ " Configure that?" ).setPositiveButton( "Yes", new DialogInterface.OnClickListener()
|
+ " Configure that?").setPositiveButton("Yes", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
mBRouterView.saveMaptoolDir(maptoolDirCandidate);
|
mBRouterView.saveMaptoolDir(maptoolDirCandidate);
|
||||||
}
|
}
|
||||||
} ).setNegativeButton( "No", new DialogInterface.OnClickListener()
|
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -240,37 +217,29 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
+ "Before downloading new datafiles made for the new table, "
|
+ "Before downloading new datafiles made for the new table, "
|
||||||
+ "you have to reset your local setup by 'moving away' (or deleting) "
|
+ "you have to reset your local setup by 'moving away' (or deleting) "
|
||||||
+ "your <basedir>/brouter directory and start a new setup by calling the " + "BRouter App again.")
|
+ "your <basedir>/brouter directory and start a new setup by calling the " + "BRouter App again.")
|
||||||
.setPositiveButton( "OK", new DialogInterface.OnClickListener()
|
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return builder.create();
|
return builder.create();
|
||||||
case DIALOG_ROUTINGMODES_ID:
|
case DIALOG_ROUTINGMODES_ID:
|
||||||
builder.setTitle(message);
|
builder.setTitle(message);
|
||||||
builder.setMultiChoiceItems( routingModes, routingModesChecked, new DialogInterface.OnMultiChoiceClickListener()
|
builder.setMultiChoiceItems(routingModes, routingModesChecked, new DialogInterface.OnMultiChoiceClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick( DialogInterface dialog, int which, boolean isChecked )
|
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
|
||||||
{
|
|
||||||
routingModesChecked[which] = isChecked;
|
routingModesChecked[which] = isChecked;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setPositiveButton( "Ok", new DialogInterface.OnClickListener()
|
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
public void onClick( DialogInterface dialog, int whichButton )
|
|
||||||
{
|
|
||||||
mBRouterView.configureService(routingModes, routingModesChecked);
|
mBRouterView.configureService(routingModes, routingModesChecked);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return builder.create();
|
return builder.create();
|
||||||
case DIALOG_EXCEPTION_ID:
|
case DIALOG_EXCEPTION_ID:
|
||||||
builder.setTitle( "An Error occured" ).setMessage( errorMessage ).setPositiveButton( "OK", new DialogInterface.OnClickListener()
|
builder.setTitle("An Error occured").setMessage(errorMessage).setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
mBRouterView.continueProcessing();
|
mBRouterView.continueProcessing();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -281,10 +250,8 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
final EditText input = new EditText(this);
|
final EditText input = new EditText(this);
|
||||||
input.setText(defaultbasedir);
|
input.setText(defaultbasedir);
|
||||||
builder.setView(input);
|
builder.setView(input);
|
||||||
builder.setPositiveButton( "Ok", new DialogInterface.OnClickListener()
|
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
public void onClick( DialogInterface dialog, int whichButton )
|
|
||||||
{
|
|
||||||
String basedir = input.getText().toString();
|
String basedir = input.getText().toString();
|
||||||
mBRouterView.startSetup(new File(basedir), true);
|
mBRouterView.startSetup(new File(basedir), true);
|
||||||
}
|
}
|
||||||
|
@ -293,24 +260,17 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
case DIALOG_SELECTBASEDIR_ID:
|
case DIALOG_SELECTBASEDIR_ID:
|
||||||
builder.setTitle("Choose brouter data base dir:");
|
builder.setTitle("Choose brouter data base dir:");
|
||||||
// builder.setMessage( message );
|
// builder.setMessage( message );
|
||||||
builder.setSingleChoiceItems( basedirOptions, 0, new DialogInterface.OnClickListener()
|
builder.setSingleChoiceItems(basedirOptions, 0, new DialogInterface.OnClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick( DialogInterface dialog, int item )
|
public void onClick(DialogInterface dialog, int item) {
|
||||||
{
|
|
||||||
selectedBasedir = item;
|
selectedBasedir = item;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setPositiveButton( "Ok", new DialogInterface.OnClickListener()
|
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
public void onClick( DialogInterface dialog, int whichButton )
|
if (selectedBasedir < availableBasedirs.size()) {
|
||||||
{
|
|
||||||
if ( selectedBasedir < availableBasedirs.size() )
|
|
||||||
{
|
|
||||||
mBRouterView.startSetup(availableBasedirs.get(selectedBasedir), true);
|
mBRouterView.startSetup(availableBasedirs.get(selectedBasedir), true);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
showDialog(DIALOG_TEXTENTRY_ID);
|
showDialog(DIALOG_TEXTENTRY_ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -318,25 +278,18 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
return builder.create();
|
return builder.create();
|
||||||
case DIALOG_VIASELECT_ID:
|
case DIALOG_VIASELECT_ID:
|
||||||
builder.setTitle("Check VIA Selection:");
|
builder.setTitle("Check VIA Selection:");
|
||||||
builder.setMultiChoiceItems( availableVias, getCheckedBooleanArray( availableVias.length ), new DialogInterface.OnMultiChoiceClickListener()
|
builder.setMultiChoiceItems(availableVias, getCheckedBooleanArray(availableVias.length), new DialogInterface.OnMultiChoiceClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick( DialogInterface dialog, int which, boolean isChecked )
|
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
|
||||||
{
|
if (isChecked) {
|
||||||
if ( isChecked )
|
|
||||||
{
|
|
||||||
selectedVias.add(availableVias[which]);
|
selectedVias.add(availableVias[which]);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
selectedVias.remove(availableVias[which]);
|
selectedVias.remove(availableVias[which]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setPositiveButton( "Ok", new DialogInterface.OnClickListener()
|
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
public void onClick( DialogInterface dialog, int whichButton )
|
|
||||||
{
|
|
||||||
mBRouterView.updateViaList(selectedVias);
|
mBRouterView.updateViaList(selectedVias);
|
||||||
mBRouterView.startProcessing(selectedProfile);
|
mBRouterView.startProcessing(selectedProfile);
|
||||||
}
|
}
|
||||||
|
@ -348,18 +301,14 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
for (int i = 0; i < nogoList.size(); i++)
|
for (int i = 0; i < nogoList.size(); i++)
|
||||||
nogoNames[i] = nogoList.get(i).name;
|
nogoNames[i] = nogoList.get(i).name;
|
||||||
final boolean[] nogoEnabled = getCheckedBooleanArray(nogoList.size());
|
final boolean[] nogoEnabled = getCheckedBooleanArray(nogoList.size());
|
||||||
builder.setMultiChoiceItems( nogoNames, getCheckedBooleanArray( nogoNames.length ), new DialogInterface.OnMultiChoiceClickListener()
|
builder.setMultiChoiceItems(nogoNames, getCheckedBooleanArray(nogoNames.length), new DialogInterface.OnMultiChoiceClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick( DialogInterface dialog, int which, boolean isChecked )
|
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
|
||||||
{
|
|
||||||
nogoEnabled[which] = isChecked;
|
nogoEnabled[which] = isChecked;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setPositiveButton( "Ok", new DialogInterface.OnClickListener()
|
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
public void onClick( DialogInterface dialog, int whichButton )
|
|
||||||
{
|
|
||||||
mBRouterView.updateNogoList(nogoEnabled);
|
mBRouterView.updateNogoList(nogoEnabled);
|
||||||
mBRouterView.startProcessing(selectedProfile);
|
mBRouterView.startProcessing(selectedProfile);
|
||||||
}
|
}
|
||||||
|
@ -369,37 +318,23 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
String leftLabel = wpCount < 0 ? (wpCount != -2 ? "Exit" : "Help") : (wpCount == 0 ? "Select from" : "Select to/via");
|
String leftLabel = wpCount < 0 ? (wpCount != -2 ? "Exit" : "Help") : (wpCount == 0 ? "Select from" : "Select to/via");
|
||||||
String rightLabel = wpCount < 2 ? (wpCount == -3 ? "Help" : "Server-Mode") : "Calc Route";
|
String rightLabel = wpCount < 2 ? (wpCount == -3 ? "Help" : "Server-Mode") : "Calc Route";
|
||||||
|
|
||||||
builder.setTitle( title ).setMessage( errorMessage ).setPositiveButton( leftLabel, new DialogInterface.OnClickListener()
|
builder.setTitle(title).setMessage(errorMessage).setPositiveButton(leftLabel, new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
if (wpCount == -2) {
|
||||||
{
|
|
||||||
if ( wpCount == -2 )
|
|
||||||
{
|
|
||||||
showWaypointDatabaseHelp();
|
showWaypointDatabaseHelp();
|
||||||
}
|
} else if (wpCount == -1 || wpCount == -3) {
|
||||||
else if ( wpCount == -1 || wpCount == -3 )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
mBRouterView.pickWaypoints();
|
mBRouterView.pickWaypoints();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ).setNegativeButton( rightLabel, new DialogInterface.OnClickListener()
|
}).setNegativeButton(rightLabel, new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
if (wpCount == -3) {
|
||||||
{
|
|
||||||
if ( wpCount == -3 )
|
|
||||||
{
|
|
||||||
showRepeatTimeoutHelp();
|
showRepeatTimeoutHelp();
|
||||||
}
|
} else if (wpCount < 2) {
|
||||||
else if ( wpCount < 2 )
|
|
||||||
{
|
|
||||||
mBRouterView.startConfigureService();
|
mBRouterView.startConfigureService();
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
mBRouterView.finishWaypointSelection();
|
mBRouterView.finishWaypointSelection();
|
||||||
mBRouterView.startProcessing(selectedProfile);
|
mBRouterView.startProcessing(selectedProfile);
|
||||||
}
|
}
|
||||||
|
@ -407,20 +342,16 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
});
|
});
|
||||||
return builder.create();
|
return builder.create();
|
||||||
case DIALOG_MODECONFIGOVERVIEW_ID:
|
case DIALOG_MODECONFIGOVERVIEW_ID:
|
||||||
builder.setTitle( "Success" ).setMessage( message ).setPositiveButton( "Exit", new DialogInterface.OnClickListener()
|
builder.setTitle("Success").setMessage(message).setPositiveButton("Exit", new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
public void onClick( DialogInterface dialog, int id )
|
|
||||||
{
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return builder.create();
|
return builder.create();
|
||||||
case DIALOG_PICKWAYPOINT_ID:
|
case DIALOG_PICKWAYPOINT_ID:
|
||||||
builder.setTitle(wpCount > 0 ? "Select to/via" : "Select from");
|
builder.setTitle(wpCount > 0 ? "Select to/via" : "Select from");
|
||||||
builder.setItems( availableWaypoints, new DialogInterface.OnClickListener()
|
builder.setItems(availableWaypoints, new DialogInterface.OnClickListener() {
|
||||||
{
|
public void onClick(DialogInterface dialog, int item) {
|
||||||
public void onClick( DialogInterface dialog, int item )
|
|
||||||
{
|
|
||||||
mBRouterView.updateWaypointList(availableWaypoints[item]);
|
mBRouterView.updateWaypointList(availableWaypoints[item]);
|
||||||
mBRouterView.startProcessing(selectedProfile);
|
mBRouterView.startProcessing(selectedProfile);
|
||||||
}
|
}
|
||||||
|
@ -432,8 +363,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean[] getCheckedBooleanArray( int size )
|
private boolean[] getCheckedBooleanArray(int size) {
|
||||||
{
|
|
||||||
boolean[] checked = new boolean[size];
|
boolean[] checked = new boolean[size];
|
||||||
for (int i = 0; i < checked.length; i++) checked[i] = true;
|
for (int i = 0; i < checked.length; i++) checked[i] = true;
|
||||||
return checked;
|
return checked;
|
||||||
|
@ -461,8 +391,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
|
|
||||||
private String maptoolDirCandidate;
|
private String maptoolDirCandidate;
|
||||||
|
|
||||||
public boolean isOnline(Context context)
|
public boolean isOnline(Context context) {
|
||||||
{
|
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
@ -486,50 +415,38 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void selectProfile( String[] items )
|
public void selectProfile(String[] items) {
|
||||||
{
|
|
||||||
availableProfiles = items;
|
availableProfiles = items;
|
||||||
|
|
||||||
// if we have internet access, first show the main action dialog
|
// if we have internet access, first show the main action dialog
|
||||||
if ( isOnline(this) )
|
if (isOnline(this)) {
|
||||||
{
|
|
||||||
showDialog(DIALOG_MAINACTION_ID);
|
showDialog(DIALOG_MAINACTION_ID);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
showDialog(DIALOG_SELECTPROFILE_ID);
|
showDialog(DIALOG_SELECTPROFILE_ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void startDownloadManager()
|
public void startDownloadManager() {
|
||||||
{
|
if (!mBRouterView.hasUpToDateLookups()) {
|
||||||
if ( !mBRouterView.hasUpToDateLookups() )
|
|
||||||
{
|
|
||||||
showDialog(DIALOG_OLDDATAHINT_ID);
|
showDialog(DIALOG_OLDDATAHINT_ID);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
showDialog(DIALOG_SHOW_DM_INFO_ID);
|
showDialog(DIALOG_SHOW_DM_INFO_ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void selectBasedir( ArrayList<File> items, String defaultBasedir, String message )
|
public void selectBasedir(ArrayList<File> items, String defaultBasedir, String message) {
|
||||||
{
|
|
||||||
this.defaultbasedir = defaultBasedir;
|
this.defaultbasedir = defaultBasedir;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
availableBasedirs = items;
|
availableBasedirs = items;
|
||||||
ArrayList<Long> dirFreeSizes = new ArrayList<Long>();
|
ArrayList<Long> dirFreeSizes = new ArrayList<Long>();
|
||||||
for ( File f : items )
|
for (File f : items) {
|
||||||
{
|
|
||||||
long size = 0L;
|
long size = 0L;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
StatFs stat = new StatFs(f.getAbsolutePath());
|
StatFs stat = new StatFs(f.getAbsolutePath());
|
||||||
size = (long) stat.getAvailableBlocks() * stat.getBlockSize();
|
size = (long) stat.getAvailableBlocks() * stat.getBlockSize();
|
||||||
}
|
} catch (Exception e) { /* ignore */ }
|
||||||
catch (Exception e) { /* ignore */ }
|
|
||||||
dirFreeSizes.add(Long.valueOf(size));
|
dirFreeSizes.add(Long.valueOf(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -541,8 +458,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
|
|
||||||
int bdidx = 0;
|
int bdidx = 0;
|
||||||
DecimalFormat df = new DecimalFormat("###0.00");
|
DecimalFormat df = new DecimalFormat("###0.00");
|
||||||
for ( int idx = 0; idx < availableBasedirs.size(); idx++ )
|
for (int idx = 0; idx < availableBasedirs.size(); idx++) {
|
||||||
{
|
|
||||||
basedirOptions[bdidx++] = availableBasedirs.get(idx) + " (" + df.format(dirFreeSizes.get(idx) / 1024. / 1024. / 1024.) + " GB free)";
|
basedirOptions[bdidx++] = availableBasedirs.get(idx) + " (" + df.format(dirFreeSizes.get(idx) / 1024. / 1024. / 1024.) + " GB free)";
|
||||||
}
|
}
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||||
|
@ -553,8 +469,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void selectRoutingModes( String[] modes, boolean[] modesChecked, String message )
|
public void selectRoutingModes(String[] modes, boolean[] modesChecked, String message) {
|
||||||
{
|
|
||||||
routingModes = modes;
|
routingModes = modes;
|
||||||
routingModesChecked = modesChecked;
|
routingModesChecked = modesChecked;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
|
@ -562,15 +477,13 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showModeConfigOverview( String message )
|
public void showModeConfigOverview(String message) {
|
||||||
{
|
|
||||||
this.message = message;
|
this.message = message;
|
||||||
showDialog(DIALOG_MODECONFIGOVERVIEW_ID);
|
showDialog(DIALOG_MODECONFIGOVERVIEW_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void selectVias( String[] items )
|
public void selectVias(String[] items) {
|
||||||
{
|
|
||||||
availableVias = items;
|
availableVias = items;
|
||||||
selectedVias = new HashSet<String>(availableVias.length);
|
selectedVias = new HashSet<String>(availableVias.length);
|
||||||
for (String via : items)
|
for (String via : items)
|
||||||
|
@ -579,51 +492,41 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void selectWaypoint( String[] items )
|
public void selectWaypoint(String[] items) {
|
||||||
{
|
|
||||||
availableWaypoints = items;
|
availableWaypoints = items;
|
||||||
showNewDialog(DIALOG_PICKWAYPOINT_ID);
|
showNewDialog(DIALOG_PICKWAYPOINT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showWaypointDatabaseHelp()
|
public void showWaypointDatabaseHelp() {
|
||||||
{
|
if (mBRouterView.canAccessSdCard) {
|
||||||
if ( mBRouterView.canAccessSdCard )
|
|
||||||
{
|
|
||||||
showNewDialog(DIALOG_SHOW_WP_HELP_ID);
|
showNewDialog(DIALOG_SHOW_WP_HELP_ID);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
showNewDialog(DIALOG_SHOW_API23_HELP_ID);
|
showNewDialog(DIALOG_SHOW_API23_HELP_ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showRepeatTimeoutHelp()
|
public void showRepeatTimeoutHelp() {
|
||||||
{
|
|
||||||
showNewDialog(DIALOG_SHOW_REPEAT_TIMEOUT_HELP_ID);
|
showNewDialog(DIALOG_SHOW_REPEAT_TIMEOUT_HELP_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showWpDatabaseScanSuccess( String bestGuess )
|
public void showWpDatabaseScanSuccess(String bestGuess) {
|
||||||
{
|
|
||||||
maptoolDirCandidate = bestGuess;
|
maptoolDirCandidate = bestGuess;
|
||||||
showNewDialog(DIALOG_SHOW_WP_SCANRESULT_ID);
|
showNewDialog(DIALOG_SHOW_WP_SCANRESULT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void selectNogos( List<OsmNodeNamed> nogoList )
|
public void selectNogos(List<OsmNodeNamed> nogoList) {
|
||||||
{
|
|
||||||
this.nogoList = nogoList;
|
this.nogoList = nogoList;
|
||||||
showDialog(DIALOG_NOGOSELECT_ID);
|
showDialog(DIALOG_NOGOSELECT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<Integer> dialogIds = new HashSet<Integer>();
|
private Set<Integer> dialogIds = new HashSet<Integer>();
|
||||||
|
|
||||||
private void showNewDialog( int id )
|
private void showNewDialog(int id) {
|
||||||
{
|
if (dialogIds.contains(Integer.valueOf(id))) {
|
||||||
if ( dialogIds.contains( Integer.valueOf( id ) ) )
|
|
||||||
{
|
|
||||||
removeDialog(id);
|
removeDialog(id);
|
||||||
}
|
}
|
||||||
dialogIds.add(Integer.valueOf(id));
|
dialogIds.add(Integer.valueOf(id));
|
||||||
|
@ -635,15 +538,13 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
private int wpCount;
|
private int wpCount;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showErrorMessage( String msg )
|
public void showErrorMessage(String msg) {
|
||||||
{
|
|
||||||
errorMessage = msg;
|
errorMessage = msg;
|
||||||
showNewDialog(DIALOG_EXCEPTION_ID);
|
showNewDialog(DIALOG_EXCEPTION_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void showResultMessage( String title, String msg, int wpCount )
|
public void showResultMessage(String title, String msg, int wpCount) {
|
||||||
{
|
|
||||||
errorMessage = msg;
|
errorMessage = msg;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.wpCount = wpCount;
|
this.wpCount = wpCount;
|
||||||
|
@ -651,8 +552,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume()
|
protected void onResume() {
|
||||||
{
|
|
||||||
super.onResume();
|
super.onResume();
|
||||||
/*
|
/*
|
||||||
* when the activity is resumed, we acquire a wake-lock so that the screen
|
* when the activity is resumed, we acquire a wake-lock so that the screen
|
||||||
|
@ -663,8 +563,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause()
|
protected void onPause() {
|
||||||
{
|
|
||||||
super.onPause();
|
super.onPause();
|
||||||
/*
|
/*
|
||||||
* When the activity is paused, we make sure to stop the router
|
* When the activity is paused, we make sure to stop the router
|
||||||
|
@ -710,8 +609,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
File sd = Environment.getExternalStorageDirectory();
|
File sd = Environment.getExternalStorageDirectory();
|
||||||
File testDir = new File(sd, "brouter");
|
File testDir = new File(sd, "brouter");
|
||||||
boolean didExist = testDir.isDirectory();
|
boolean didExist = testDir.isDirectory();
|
||||||
if ( !didExist )
|
if (!didExist) {
|
||||||
{
|
|
||||||
testDir.mkdir();
|
testDir.mkdir();
|
||||||
}
|
}
|
||||||
File testFile = new File(testDir, "test" + System.currentTimeMillis());
|
File testFile = new File(testDir, "test" + System.currentTimeMillis());
|
||||||
|
@ -720,8 +618,7 @@ public class BRouterActivity extends Activity implements ActivityCompat.OnReques
|
||||||
testFile.delete();
|
testFile.delete();
|
||||||
isWritable = true;
|
isWritable = true;
|
||||||
}
|
}
|
||||||
}
|
} catch (Throwable t) {
|
||||||
catch (Throwable t) {
|
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
return isWritable;
|
return isWritable;
|
||||||
|
|
|
@ -33,8 +33,7 @@ import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import btools.router.OsmNodeNamed;
|
import btools.router.OsmNodeNamed;
|
||||||
|
|
||||||
public class BRouterService extends Service
|
public class BRouterService extends Service {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent arg0) {
|
public IBinder onBind(Intent arg0) {
|
||||||
|
@ -42,11 +41,9 @@ public class BRouterService extends Service
|
||||||
return myBRouterServiceStub;
|
return myBRouterServiceStub;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IBRouterService.Stub myBRouterServiceStub = new IBRouterService.Stub()
|
private IBRouterService.Stub myBRouterServiceStub = new IBRouterService.Stub() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public String getTrackFromParams( Bundle params ) throws RemoteException
|
public String getTrackFromParams(Bundle params) throws RemoteException {
|
||||||
{
|
|
||||||
logBundle(params);
|
logBundle(params);
|
||||||
|
|
||||||
BRouterWorker worker = new BRouterWorker();
|
BRouterWorker worker = new BRouterWorker();
|
||||||
|
@ -54,26 +51,23 @@ public class BRouterService extends Service
|
||||||
// get base dir from private file
|
// get base dir from private file
|
||||||
String baseDir = null;
|
String baseDir = null;
|
||||||
InputStream configInput = null;
|
InputStream configInput = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
configInput = openFileInput("config15.dat");
|
configInput = openFileInput("config15.dat");
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(configInput));
|
BufferedReader br = new BufferedReader(new InputStreamReader(configInput));
|
||||||
baseDir = br.readLine();
|
baseDir = br.readLine();
|
||||||
|
} catch (Exception e) {
|
||||||
|
} finally {
|
||||||
|
if (configInput != null) try {
|
||||||
|
configInput.close();
|
||||||
|
} catch (Exception ee) {
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( configInput != null ) try { configInput.close(); } catch (Exception ee) {}
|
|
||||||
}
|
}
|
||||||
worker.baseDir = baseDir;
|
worker.baseDir = baseDir;
|
||||||
worker.segmentDir = new File(baseDir, "brouter/segments4");
|
worker.segmentDir = new File(baseDir, "brouter/segments4");
|
||||||
|
|
||||||
String remoteProfile = params.getString("remoteProfile");
|
String remoteProfile = params.getString("remoteProfile");
|
||||||
|
|
||||||
if ( remoteProfile == null )
|
if (remoteProfile == null) {
|
||||||
{
|
|
||||||
remoteProfile = checkForTestDummy(baseDir);
|
remoteProfile = checkForTestDummy(baseDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,30 +79,26 @@ public class BRouterService extends Service
|
||||||
worker.profileName = profile;
|
worker.profileName = profile;
|
||||||
worker.profilePath = baseDir + "/brouter/profiles2/" + profile + ".brf";
|
worker.profilePath = baseDir + "/brouter/profiles2/" + profile + ".brf";
|
||||||
worker.rawTrackPath = baseDir + "/brouter/modes/" + profile + "_rawtrack.dat";
|
worker.rawTrackPath = baseDir + "/brouter/modes/" + profile + "_rawtrack.dat";
|
||||||
if (!new File(worker.profilePath).exists()) errMsg = "Profile " + profile + " does not exists";
|
if (!new File(worker.profilePath).exists())
|
||||||
|
errMsg = "Profile " + profile + " does not exists";
|
||||||
try {
|
try {
|
||||||
readNogos(worker, baseDir);
|
readNogos(worker, baseDir);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errMsg = e.getLocalizedMessage();
|
errMsg = e.getLocalizedMessage();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
errMsg = getConfigFromMode(worker, baseDir, params.getString("v"), params.getString("fast"));
|
errMsg = getConfigFromMode(worker, baseDir, params.getString("v"), params.getString("fast"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( errMsg != null )
|
if (errMsg != null) {
|
||||||
{
|
|
||||||
return errMsg;
|
return errMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean canCompress = "true".equals(params.getString("acceptCompressedResult"));
|
boolean canCompress = "true".equals(params.getString("acceptCompressedResult"));
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
String gpxMessage = worker.getTrackFromParams(params);
|
String gpxMessage = worker.getTrackFromParams(params);
|
||||||
if ( canCompress && gpxMessage.startsWith( "<" ) )
|
if (canCompress && gpxMessage.startsWith("<")) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
baos.write("z64".getBytes(Charset.forName("UTF-8"))); // marker prefix
|
baos.write("z64".getBytes(Charset.forName("UTF-8"))); // marker prefix
|
||||||
OutputStream os = new GZIPOutputStream(baos);
|
OutputStream os = new GZIPOutputStream(baos);
|
||||||
|
@ -119,32 +109,25 @@ public class BRouterService extends Service
|
||||||
os.close();
|
os.close();
|
||||||
gpxMessage = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
|
gpxMessage = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
|
||||||
return gpxMessage;
|
return gpxMessage;
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
return "error compressing result";
|
return "error compressing result";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return gpxMessage;
|
return gpxMessage;
|
||||||
}
|
} catch (IllegalArgumentException iae) {
|
||||||
catch (IllegalArgumentException iae)
|
|
||||||
{
|
|
||||||
return iae.getMessage();
|
return iae.getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getConfigFromMode( BRouterWorker worker, String baseDir, String mode, String fast )
|
private String getConfigFromMode(BRouterWorker worker, String baseDir, String mode, String fast) {
|
||||||
{
|
|
||||||
boolean isFast = "1".equals(fast) || "true".equals(fast) || "yes".equals(fast);
|
boolean isFast = "1".equals(fast) || "true".equals(fast) || "yes".equals(fast);
|
||||||
String mode_key = mode + "_" + (isFast ? "fast" : "short");
|
String mode_key = mode + "_" + (isFast ? "fast" : "short");
|
||||||
|
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
String modesFile = baseDir + "/brouter/modes/serviceconfig.dat";
|
String modesFile = baseDir + "/brouter/modes/serviceconfig.dat";
|
||||||
br = new BufferedReader(new FileReader(modesFile));
|
br = new BufferedReader(new FileReader(modesFile));
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null)
|
if (line == null)
|
||||||
break;
|
break;
|
||||||
|
@ -159,20 +142,18 @@ public class BRouterService extends Service
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
return "no brouter service config found, mode " + mode_key;
|
return "no brouter service config found, mode " + mode_key;
|
||||||
|
} finally {
|
||||||
|
if (br != null) try {
|
||||||
|
br.close();
|
||||||
|
} catch (Exception ee) {
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( br != null ) try { br.close(); } catch( Exception ee ) {}
|
|
||||||
}
|
}
|
||||||
return "no brouter service config found for mode " + mode_key;
|
return "no brouter service config found for mode " + mode_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getConfigForRemoteProfile( BRouterWorker worker, String baseDir, String remoteProfile )
|
private String getConfigForRemoteProfile(BRouterWorker worker, String baseDir, String remoteProfile) {
|
||||||
{
|
|
||||||
worker.profileName = "remote";
|
worker.profileName = "remote";
|
||||||
worker.profilePath = baseDir + "/brouter/profiles2/remote.brf";
|
worker.profilePath = baseDir + "/brouter/profiles2/remote.brf";
|
||||||
worker.rawTrackPath = baseDir + "/brouter/modes/remote_rawtrack.dat";
|
worker.rawTrackPath = baseDir + "/brouter/modes/remote_rawtrack.dat";
|
||||||
|
@ -181,26 +162,22 @@ public class BRouterService extends Service
|
||||||
byte[] profileBytes = remoteProfile.getBytes();
|
byte[] profileBytes = remoteProfile.getBytes();
|
||||||
File profileFile = new File(worker.profilePath);
|
File profileFile = new File(worker.profilePath);
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
readNogos(worker, baseDir);
|
readNogos(worker, baseDir);
|
||||||
|
|
||||||
if ( !fileEqual( profileBytes, profileFile ) )
|
if (!fileEqual(profileBytes, profileFile)) {
|
||||||
{
|
|
||||||
OutputStream os = null;
|
OutputStream os = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
os = new FileOutputStream(profileFile);
|
os = new FileOutputStream(profileFile);
|
||||||
os.write(profileBytes);
|
os.write(profileBytes);
|
||||||
}
|
} finally {
|
||||||
finally
|
if (os != null) try {
|
||||||
{
|
os.close();
|
||||||
if ( os != null ) try { os.close(); } catch( IOException io ) {}
|
} catch (IOException io) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch( Exception e )
|
} catch (Exception e) {
|
||||||
{
|
|
||||||
return "error caching remote profile: " + e;
|
return "error caching remote profile: " + e;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -225,10 +202,8 @@ public class BRouterService extends Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean fileEqual( byte[] fileBytes, File file ) throws Exception
|
private boolean fileEqual(byte[] fileBytes, File file) throws Exception {
|
||||||
{
|
if (!file.exists()) {
|
||||||
if ( !file.exists() )
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int nbytes = fileBytes.length;
|
int nbytes = fileBytes.length;
|
||||||
|
@ -236,64 +211,54 @@ public class BRouterService extends Service
|
||||||
int blen = 8192;
|
int blen = 8192;
|
||||||
byte[] buf = new byte[blen];
|
byte[] buf = new byte[blen];
|
||||||
InputStream is = null;
|
InputStream is = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
is = new FileInputStream(file);
|
is = new FileInputStream(file);
|
||||||
while( pos < nbytes )
|
while (pos < nbytes) {
|
||||||
{
|
|
||||||
int len = is.read(buf, 0, blen);
|
int len = is.read(buf, 0, blen);
|
||||||
if (len <= 0) return false;
|
if (len <= 0) return false;
|
||||||
if (pos + len > nbytes) return false;
|
if (pos + len > nbytes) return false;
|
||||||
for( int j=0; j<len; j++ )
|
for (int j = 0; j < len; j++) {
|
||||||
{
|
if (fileBytes[pos++] != buf[j]) {
|
||||||
if ( fileBytes[pos++] != buf[j] )
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
} finally {
|
||||||
|
if (is != null) try {
|
||||||
|
is.close();
|
||||||
|
} catch (IOException io) {
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( is != null ) try { is.close(); } catch( IOException io ) {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String checkForTestDummy( String baseDir )
|
private String checkForTestDummy(String baseDir) {
|
||||||
{
|
|
||||||
File testdummy = new File(baseDir + "/brouter/profiles2/remotetestdummy.brf");
|
File testdummy = new File(baseDir + "/brouter/profiles2/remotetestdummy.brf");
|
||||||
if (!testdummy.exists()) return null;
|
if (!testdummy.exists()) return null;
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
br = new BufferedReader(new FileReader(testdummy));
|
br = new BufferedReader(new FileReader(testdummy));
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null)
|
if (line == null)
|
||||||
break;
|
break;
|
||||||
sb.append(line).append('\n');
|
sb.append(line).append('\n');
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("error reading " + testdummy);
|
throw new RuntimeException("error reading " + testdummy);
|
||||||
|
} finally {
|
||||||
|
if (br != null) try {
|
||||||
|
br.close();
|
||||||
|
} catch (Exception ee) {
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( br != null ) try { br.close(); } catch( Exception ee ) {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logBundle( Bundle params )
|
private void logBundle(Bundle params) {
|
||||||
{
|
if (AppLogger.isLogging()) {
|
||||||
if ( AppLogger.isLogging() )
|
for (String k : params.keySet()) {
|
||||||
{
|
|
||||||
for( String k : params.keySet() )
|
|
||||||
{
|
|
||||||
Object val = "remoteProfile".equals(k) ? "<..cut..>" : params.get(k);
|
Object val = "remoteProfile".equals(k) ? "<..cut..>" : params.get(k);
|
||||||
String desc = "key=" + k + (val == null ? "" : " class=" + val.getClass() + " val=" + val.toString());
|
String desc = "key=" + k + (val == null ? "" : " class=" + val.getClass() + " val=" + val.toString());
|
||||||
AppLogger.log(desc);
|
AppLogger.log(desc);
|
||||||
|
@ -304,15 +269,13 @@ public class BRouterService extends Service
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate()
|
public void onCreate() {
|
||||||
{
|
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
Log.d(getClass().getSimpleName(), "onCreate()");
|
Log.d(getClass().getSimpleName(), "onCreate()");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy()
|
public void onDestroy() {
|
||||||
{
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
Log.d(getClass().getSimpleName(), "onDestroy()");
|
Log.d(getClass().getSimpleName(), "onDestroy()");
|
||||||
}
|
}
|
||||||
|
@ -323,20 +286,17 @@ public class BRouterService extends Service
|
||||||
// method will not be called.
|
// method will not be called.
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void onStart(Intent intent, int startId)
|
public void onStart(Intent intent, int startId) {
|
||||||
{
|
|
||||||
Log.d(getClass().getSimpleName(), "onStart()");
|
Log.d(getClass().getSimpleName(), "onStart()");
|
||||||
handleStart(intent, startId);
|
handleStart(intent, startId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId)
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
{
|
|
||||||
handleStart(intent, startId);
|
handleStart(intent, startId);
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleStart(Intent intent, int startId)
|
void handleStart(Intent intent, int startId) {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,8 +53,7 @@ import btools.router.RoutingEngine;
|
||||||
import btools.router.RoutingHelper;
|
import btools.router.RoutingHelper;
|
||||||
import btools.util.CheapRuler;
|
import btools.util.CheapRuler;
|
||||||
|
|
||||||
public class BRouterView extends View
|
public class BRouterView extends View {
|
||||||
{
|
|
||||||
RoutingEngine cr;
|
RoutingEngine cr;
|
||||||
private int imgw;
|
private int imgw;
|
||||||
private int imgh;
|
private int imgh;
|
||||||
|
@ -98,21 +97,17 @@ public class BRouterView extends View
|
||||||
|
|
||||||
public boolean canAccessSdCard;
|
public boolean canAccessSdCard;
|
||||||
|
|
||||||
public void stopRouting()
|
public void stopRouting() {
|
||||||
{
|
|
||||||
if (cr != null) cr.terminate();
|
if (cr != null) cr.terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BRouterView( Context context, int memoryClass )
|
public BRouterView(Context context, int memoryClass) {
|
||||||
{
|
|
||||||
super(context);
|
super(context);
|
||||||
this.memoryClass = memoryClass;
|
this.memoryClass = memoryClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init()
|
public void init() {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
DisplayMetrics metrics = new DisplayMetrics();
|
DisplayMetrics metrics = new DisplayMetrics();
|
||||||
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||||
imgw = metrics.widthPixels;
|
imgw = metrics.widthPixels;
|
||||||
|
@ -122,12 +117,10 @@ public class BRouterView extends View
|
||||||
File baseDir = ConfigHelper.getBaseDir(getContext());
|
File baseDir = ConfigHelper.getBaseDir(getContext());
|
||||||
// check if valid
|
// check if valid
|
||||||
boolean bdValid = false;
|
boolean bdValid = false;
|
||||||
if ( baseDir != null )
|
if (baseDir != null) {
|
||||||
{
|
|
||||||
bdValid = baseDir.isDirectory();
|
bdValid = baseDir.isDirectory();
|
||||||
File brd = new File(baseDir, "brouter");
|
File brd = new File(baseDir, "brouter");
|
||||||
if ( brd.isDirectory() )
|
if (brd.isDirectory()) {
|
||||||
{
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q &&
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q &&
|
||||||
!brd.getAbsolutePath().contains("/Android/media/btools.routingapp")) {
|
!brd.getAbsolutePath().contains("/Android/media/btools.routingapp")) {
|
||||||
String message = "(previous basedir " + baseDir + " has to migrate )";
|
String message = "(previous basedir " + baseDir + " has to migrate )";
|
||||||
|
@ -148,9 +141,7 @@ public class BRouterView extends View
|
||||||
|
|
||||||
((BRouterActivity) getContext()).selectBasedir(((BRouterActivity) getContext()).getStorageDirectories(), guessBaseDir(), message);
|
((BRouterActivity) getContext()).selectBasedir(((BRouterActivity) getContext()).getStorageDirectories(), guessBaseDir(), message);
|
||||||
waitingForSelection = true;
|
waitingForSelection = true;
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
String msg = e instanceof IllegalArgumentException ? e.getMessage() : e.toString();
|
String msg = e instanceof IllegalArgumentException ? e.getMessage() : e.toString();
|
||||||
|
|
||||||
AppLogger.log(msg);
|
AppLogger.log(msg);
|
||||||
|
@ -160,21 +151,17 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startSetup( File baseDir, boolean storeBasedir )
|
public void startSetup(File baseDir, boolean storeBasedir) {
|
||||||
{
|
|
||||||
if (baseDir == null) {
|
if (baseDir == null) {
|
||||||
baseDir = retryBaseDir;
|
baseDir = retryBaseDir;
|
||||||
retryBaseDir = null;
|
retryBaseDir = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( storeBasedir )
|
if (storeBasedir) {
|
||||||
{
|
|
||||||
File td = new File(baseDir, "brouter");
|
File td = new File(baseDir, "brouter");
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
td.mkdirs();
|
td.mkdirs();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
Log.d("BRouterView", "Error creating base directory: " + e.getMessage());
|
Log.d("BRouterView", "Error creating base directory: " + e.getMessage());
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -190,8 +177,7 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
ConfigHelper.writeBaseDir(getContext(), baseDir);
|
ConfigHelper.writeBaseDir(getContext(), baseDir);
|
||||||
}
|
}
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
cor = null;
|
cor = null;
|
||||||
|
|
||||||
String basedir = baseDir.getAbsolutePath();
|
String basedir = baseDir.getAbsolutePath();
|
||||||
|
@ -202,8 +188,7 @@ public class BRouterView extends View
|
||||||
// create missing directories
|
// create missing directories
|
||||||
assertDirectoryExists("project directory", new File(basedir, "brouter"), null, null);
|
assertDirectoryExists("project directory", new File(basedir, "brouter"), null, null);
|
||||||
segmentDir = new File(basedir, "/brouter/segments4");
|
segmentDir = new File(basedir, "/brouter/segments4");
|
||||||
if ( assertDirectoryExists( "data directory", segmentDir, "segments4.zip", null ) )
|
if (assertDirectoryExists("data directory", segmentDir, "segments4.zip", null)) {
|
||||||
{
|
|
||||||
ConfigMigration.tryMigrateStorageConfig(
|
ConfigMigration.tryMigrateStorageConfig(
|
||||||
new File(basedir + "/brouter/segments3/storageconfig.txt"),
|
new File(basedir + "/brouter/segments3/storageconfig.txt"),
|
||||||
new File(basedir + "/brouter/segments4/storageconfig.txt"));
|
new File(basedir + "/brouter/segments4/storageconfig.txt"));
|
||||||
|
@ -245,38 +230,30 @@ public class BRouterView extends View
|
||||||
needsNogoSelection = nogoList.size() > 0;
|
needsNogoSelection = nogoList.size() > 0;
|
||||||
needsWaypointSelection = wpList.size() == 0;
|
needsWaypointSelection = wpList.size() == 0;
|
||||||
|
|
||||||
if ( cor.tracksdir != null )
|
if (cor.tracksdir != null) {
|
||||||
{
|
|
||||||
tracksDir = new File(cor.basedir, cor.tracksdir);
|
tracksDir = new File(cor.basedir, cor.tracksdir);
|
||||||
assertDirectoryExists("track directory", tracksDir, null, null);
|
assertDirectoryExists("track directory", tracksDir, null, null);
|
||||||
|
|
||||||
// output redirect: look for a pointerfile in tracksdir
|
// output redirect: look for a pointerfile in tracksdir
|
||||||
File tracksDirPointer = new File(tracksDir, "brouter.redirect");
|
File tracksDirPointer = new File(tracksDir, "brouter.redirect");
|
||||||
if ( tracksDirPointer.isFile() )
|
if (tracksDirPointer.isFile()) {
|
||||||
{
|
|
||||||
String tracksDirStr = readSingleLineFile(tracksDirPointer);
|
String tracksDirStr = readSingleLineFile(tracksDirPointer);
|
||||||
if (tracksDirStr == null)
|
if (tracksDirStr == null)
|
||||||
throw new IllegalArgumentException("redirect pointer file is empty: " + tracksDirPointer);
|
throw new IllegalArgumentException("redirect pointer file is empty: " + tracksDirPointer);
|
||||||
tracksDir = new File(tracksDirStr);
|
tracksDir = new File(tracksDirStr);
|
||||||
if (!(tracksDir.isDirectory()))
|
if (!(tracksDir.isDirectory()))
|
||||||
throw new IllegalArgumentException("redirect pointer file " + tracksDirPointer + " does not point to a directory: " + tracksDir);
|
throw new IllegalArgumentException("redirect pointer file " + tracksDirPointer + " does not point to a directory: " + tracksDir);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
File writeTest = new File(tracksDir + "/brouter.writetest");
|
File writeTest = new File(tracksDir + "/brouter.writetest");
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
writeTest.createNewFile();
|
writeTest.createNewFile();
|
||||||
writeTest.delete();
|
writeTest.delete();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
tracksDir = null;
|
tracksDir = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( tracksDir == null )
|
if (tracksDir == null) {
|
||||||
{
|
|
||||||
tracksDir = new File(basedir, "router"); // fallback
|
tracksDir = new File(basedir, "router"); // fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,10 +261,8 @@ public class BRouterView extends View
|
||||||
ArrayList<String> profiles = new ArrayList<String>();
|
ArrayList<String> profiles = new ArrayList<String>();
|
||||||
|
|
||||||
boolean lookupsFound = false;
|
boolean lookupsFound = false;
|
||||||
for ( String fileName : fileNames )
|
for (String fileName : fileNames) {
|
||||||
{
|
if (fileName.endsWith(".brf")) {
|
||||||
if ( fileName.endsWith( ".brf" ) )
|
|
||||||
{
|
|
||||||
profiles.add(fileName.substring(0, fileName.length() - 4));
|
profiles.add(fileName.substring(0, fileName.length() - 4));
|
||||||
}
|
}
|
||||||
if (fileName.equals("lookups.dat"))
|
if (fileName.equals("lookups.dat"))
|
||||||
|
@ -297,34 +272,28 @@ public class BRouterView extends View
|
||||||
// add a "last timeout" dummy profile
|
// add a "last timeout" dummy profile
|
||||||
File lastTimeoutFile = new File(modesDir + "/timeoutdata.txt");
|
File lastTimeoutFile = new File(modesDir + "/timeoutdata.txt");
|
||||||
long lastTimeoutTime = lastTimeoutFile.lastModified();
|
long lastTimeoutTime = lastTimeoutFile.lastModified();
|
||||||
if ( lastTimeoutTime > 0 && System.currentTimeMillis() - lastTimeoutTime < 1800000 )
|
if (lastTimeoutTime > 0 && System.currentTimeMillis() - lastTimeoutTime < 1800000) {
|
||||||
{
|
|
||||||
BufferedReader br = new BufferedReader(new FileReader(lastTimeoutFile));
|
BufferedReader br = new BufferedReader(new FileReader(lastTimeoutFile));
|
||||||
String repeatProfile = br.readLine();
|
String repeatProfile = br.readLine();
|
||||||
br.close();
|
br.close();
|
||||||
profiles.add(0, "<repeat:" + repeatProfile + ">");
|
profiles.add(0, "<repeat:" + repeatProfile + ">");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !lookupsFound )
|
if (!lookupsFound) {
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("The profile-directory " + profileDir + " does not contain the lookups.dat file."
|
throw new IllegalArgumentException("The profile-directory " + profileDir + " does not contain the lookups.dat file."
|
||||||
+ " see brouter.de/brouter for setup instructions.");
|
+ " see brouter.de/brouter for setup instructions.");
|
||||||
}
|
}
|
||||||
if ( profiles.size() == 0 )
|
if (profiles.size() == 0) {
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("The profile-directory " + profileDir + " contains no routing profiles (*.brf)."
|
throw new IllegalArgumentException("The profile-directory " + profileDir + " contains no routing profiles (*.brf)."
|
||||||
+ " see brouter.de/brouter for setup instructions.");
|
+ " see brouter.de/brouter for setup instructions.");
|
||||||
}
|
}
|
||||||
if ( !RoutingHelper.hasDirectoryAnyDatafiles( segmentDir ) )
|
if (!RoutingHelper.hasDirectoryAnyDatafiles(segmentDir)) {
|
||||||
{
|
|
||||||
((BRouterActivity) getContext()).startDownloadManager();
|
((BRouterActivity) getContext()).startDownloadManager();
|
||||||
waitingForSelection = true;
|
waitingForSelection = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
((BRouterActivity) getContext()).selectProfile(profiles.toArray(new String[0]));
|
((BRouterActivity) getContext()).selectProfile(profiles.toArray(new String[0]));
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
String msg = e instanceof IllegalArgumentException ? e.getMessage()
|
String msg = e instanceof IllegalArgumentException ? e.getMessage()
|
||||||
+ (cor == null ? "" : " (coordinate-source: " + cor.basedir + cor.rootdir + ")") : e.toString();
|
+ (cor == null ? "" : " (coordinate-source: " + cor.basedir + cor.rootdir + ")") : e.toString();
|
||||||
|
|
||||||
|
@ -361,8 +330,7 @@ public class BRouterView extends View
|
||||||
|
|
||||||
//create output directory if it doesn't exist
|
//create output directory if it doesn't exist
|
||||||
File dir = new File(outputPath);
|
File dir = new File(outputPath);
|
||||||
if (!dir.exists())
|
if (!dir.exists()) {
|
||||||
{
|
|
||||||
dir.mkdirs();
|
dir.mkdirs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,35 +355,28 @@ public class BRouterView extends View
|
||||||
new File(inputPath + "/" + inputFile).delete();
|
new File(inputPath + "/" + inputFile).delete();
|
||||||
|
|
||||||
|
|
||||||
}
|
} catch (FileNotFoundException fnfe1) {
|
||||||
|
|
||||||
catch (FileNotFoundException fnfe1) {
|
|
||||||
Log.e("tag", fnfe1.getMessage());
|
Log.e("tag", fnfe1.getMessage());
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
Log.e("tag", e.getMessage());
|
Log.e("tag", e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasUpToDateLookups()
|
public boolean hasUpToDateLookups() {
|
||||||
{
|
|
||||||
BExpressionMetaData meta = new BExpressionMetaData();
|
BExpressionMetaData meta = new BExpressionMetaData();
|
||||||
meta.readMetaData(new File(profileDir, "lookups.dat"));
|
meta.readMetaData(new File(profileDir, "lookups.dat"));
|
||||||
return meta.lookupVersion == 10;
|
return meta.lookupVersion == 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void continueProcessing()
|
public void continueProcessing() {
|
||||||
{
|
|
||||||
waitingForSelection = false;
|
waitingForSelection = false;
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateViaList( Set<String> selectedVias )
|
public void updateViaList(Set<String> selectedVias) {
|
||||||
{
|
|
||||||
ArrayList<OsmNodeNamed> filtered = new ArrayList<OsmNodeNamed>(wpList.size());
|
ArrayList<OsmNodeNamed> filtered = new ArrayList<OsmNodeNamed>(wpList.size());
|
||||||
for ( OsmNodeNamed n : wpList )
|
for (OsmNodeNamed n : wpList) {
|
||||||
{
|
|
||||||
String name = n.name;
|
String name = n.name;
|
||||||
if ("from".equals(name) || "to".equals(name) || selectedVias.contains(name))
|
if ("from".equals(name) || "to".equals(name) || selectedVias.contains(name))
|
||||||
filtered.add(n);
|
filtered.add(n);
|
||||||
|
@ -423,30 +384,22 @@ public class BRouterView extends View
|
||||||
wpList = filtered;
|
wpList = filtered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateNogoList( boolean[] enabled )
|
public void updateNogoList(boolean[] enabled) {
|
||||||
{
|
for (int i = nogoList.size() - 1; i >= 0; i--) {
|
||||||
for ( int i = nogoList.size() - 1; i >= 0; i-- )
|
if (enabled[i]) {
|
||||||
{
|
|
||||||
if ( enabled[i] )
|
|
||||||
{
|
|
||||||
nogoVetoList.add(nogoList.get(i));
|
nogoVetoList.add(nogoList.get(i));
|
||||||
nogoList.remove(i);
|
nogoList.remove(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pickWaypoints()
|
public void pickWaypoints() {
|
||||||
{
|
|
||||||
String msg = null;
|
String msg = null;
|
||||||
|
|
||||||
if ( cor.allpoints == null )
|
if (cor.allpoints == null) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
cor.readAllPoints();
|
cor.readAllPoints();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
msg = "Error reading waypoints: " + e.toString();
|
msg = "Error reading waypoints: " + e.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,12 +410,9 @@ public class BRouterView extends View
|
||||||
msg = "coordinate source contains too much waypoints: " + size + "(please use from/to/via names)";
|
msg = "coordinate source contains too much waypoints: " + size + "(please use from/to/via names)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( msg != null )
|
if (msg != null) {
|
||||||
{
|
|
||||||
((BRouterActivity) getContext()).showErrorMessage(msg);
|
((BRouterActivity) getContext()).showErrorMessage(msg);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
String[] wpts = new String[cor.allpoints.size()];
|
String[] wpts = new String[cor.allpoints.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (OsmNodeNamed wp : cor.allpoints)
|
for (OsmNodeNamed wp : cor.allpoints)
|
||||||
|
@ -471,17 +421,12 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateWaypointList( String waypoint )
|
public void updateWaypointList(String waypoint) {
|
||||||
{
|
for (OsmNodeNamed wp : cor.allpoints) {
|
||||||
for( OsmNodeNamed wp : cor.allpoints )
|
if (wp.name.equals(waypoint)) {
|
||||||
{
|
if (wp.ilat != 0 || wp.ilon != 0) {
|
||||||
if ( wp.name.equals( waypoint ) )
|
|
||||||
{
|
|
||||||
if ( wp.ilat != 0 || wp.ilon != 0 )
|
|
||||||
{
|
|
||||||
int nwp = wpList.size();
|
int nwp = wpList.size();
|
||||||
if ( nwp == 0 || wpList.get( nwp-1 ) != wp )
|
if (nwp == 0 || wpList.get(nwp - 1) != wp) {
|
||||||
{
|
|
||||||
wpList.add(wp);
|
wpList.add(wp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -490,30 +435,25 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startWpDatabaseScan()
|
public void startWpDatabaseScan() {
|
||||||
{
|
|
||||||
dataBaseScanner = new WpDatabaseScanner();
|
dataBaseScanner = new WpDatabaseScanner();
|
||||||
dataBaseScanner.start();
|
dataBaseScanner.start();
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveMaptoolDir( String dir )
|
public void saveMaptoolDir(String dir) {
|
||||||
{
|
|
||||||
ConfigMigration.saveAdditionalMaptoolDir(segmentDir, dir);
|
ConfigMigration.saveAdditionalMaptoolDir(segmentDir, dir);
|
||||||
((BRouterActivity) getContext()).showResultMessage("Success", "please restart to use new config", -1);
|
((BRouterActivity) getContext()).showResultMessage("Success", "please restart to use new config", -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void finishWaypointSelection()
|
public void finishWaypointSelection() {
|
||||||
{
|
|
||||||
needsWaypointSelection = false;
|
needsWaypointSelection = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OsmNodeNamed> readWpList( BufferedReader br, boolean isNogo ) throws Exception
|
private List<OsmNodeNamed> readWpList(BufferedReader br, boolean isNogo) throws Exception {
|
||||||
{
|
|
||||||
int cnt = Integer.parseInt(br.readLine());
|
int cnt = Integer.parseInt(br.readLine());
|
||||||
List<OsmNodeNamed> res = new ArrayList<OsmNodeNamed>(cnt);
|
List<OsmNodeNamed> res = new ArrayList<OsmNodeNamed>(cnt);
|
||||||
for( int i=0; i<cnt; i++ )
|
for (int i = 0; i < cnt; i++) {
|
||||||
{
|
|
||||||
OsmNodeNamed wp = OsmNodeNamed.decodeNogo(br.readLine());
|
OsmNodeNamed wp = OsmNodeNamed.decodeNogo(br.readLine());
|
||||||
wp.isNogo = isNogo;
|
wp.isNogo = isNogo;
|
||||||
res.add(wp);
|
res.add(wp);
|
||||||
|
@ -521,14 +461,11 @@ public class BRouterView extends View
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startProcessing( String profile )
|
public void startProcessing(String profile) {
|
||||||
{
|
|
||||||
rawTrackPath = null;
|
rawTrackPath = null;
|
||||||
if ( profile.startsWith( "<repeat" ) )
|
if (profile.startsWith("<repeat")) {
|
||||||
{
|
|
||||||
needsViaSelection = needsNogoSelection = needsWaypointSelection = false;
|
needsViaSelection = needsNogoSelection = needsWaypointSelection = false;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
File lastTimeoutFile = new File(modesDir + "/timeoutdata.txt");
|
File lastTimeoutFile = new File(modesDir + "/timeoutdata.txt");
|
||||||
BufferedReader br = new BufferedReader(new FileReader(lastTimeoutFile));
|
BufferedReader br = new BufferedReader(new FileReader(lastTimeoutFile));
|
||||||
profile = br.readLine();
|
profile = br.readLine();
|
||||||
|
@ -536,23 +473,18 @@ public class BRouterView extends View
|
||||||
wpList = readWpList(br, false);
|
wpList = readWpList(br, false);
|
||||||
nogoList = readWpList(br, true);
|
nogoList = readWpList(br, true);
|
||||||
br.close();
|
br.close();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
AppLogger.log(AppLogger.formatThrowable(e));
|
AppLogger.log(AppLogger.formatThrowable(e));
|
||||||
((BRouterActivity) getContext()).showErrorMessage(e.toString());
|
((BRouterActivity) getContext()).showErrorMessage(e.toString());
|
||||||
}
|
}
|
||||||
}
|
} else if ("remote".equals(profileName)) {
|
||||||
else if ( "remote".equals( profileName ) )
|
|
||||||
{
|
|
||||||
rawTrackPath = modesDir + "/remote_rawtrack.dat";
|
rawTrackPath = modesDir + "/remote_rawtrack.dat";
|
||||||
}
|
}
|
||||||
|
|
||||||
profilePath = profileDir + "/" + profile + ".brf";
|
profilePath = profileDir + "/" + profile + ".brf";
|
||||||
profileName = profile;
|
profileName = profile;
|
||||||
|
|
||||||
if ( needsViaSelection )
|
if (needsViaSelection) {
|
||||||
{
|
|
||||||
needsViaSelection = false;
|
needsViaSelection = false;
|
||||||
String[] availableVias = new String[wpList.size() - 2];
|
String[] availableVias = new String[wpList.size() - 2];
|
||||||
for (int viaidx = 0; viaidx < wpList.size() - 2; viaidx++)
|
for (int viaidx = 0; viaidx < wpList.size() - 2; viaidx++)
|
||||||
|
@ -561,22 +493,17 @@ public class BRouterView extends View
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( needsNogoSelection )
|
if (needsNogoSelection) {
|
||||||
{
|
|
||||||
needsNogoSelection = false;
|
needsNogoSelection = false;
|
||||||
((BRouterActivity) getContext()).selectNogos(nogoList);
|
((BRouterActivity) getContext()).selectNogos(nogoList);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( needsWaypointSelection )
|
if (needsWaypointSelection) {
|
||||||
{
|
|
||||||
String msg;
|
String msg;
|
||||||
if ( wpList.size() == 0 )
|
if (wpList.size() == 0) {
|
||||||
{
|
|
||||||
msg = "Expecting waypoint selection\n" + sourceHint;
|
msg = "Expecting waypoint selection\n" + sourceHint;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
msg = "current waypoint selection:\n";
|
msg = "current waypoint selection:\n";
|
||||||
for (int i = 0; i < wpList.size(); i++)
|
for (int i = 0; i < wpList.size(); i++)
|
||||||
msg += (i > 0 ? "->" : "") + wpList.get(i).name;
|
msg += (i > 0 ? "->" : "") + wpList.get(i).name;
|
||||||
|
@ -585,8 +512,7 @@ public class BRouterView extends View
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
waitingForSelection = false;
|
waitingForSelection = false;
|
||||||
|
|
||||||
RoutingContext rc = new RoutingContext();
|
RoutingContext rc = new RoutingContext();
|
||||||
|
@ -601,14 +527,12 @@ public class BRouterView extends View
|
||||||
int minlat = Integer.MAX_VALUE;
|
int minlat = Integer.MAX_VALUE;
|
||||||
|
|
||||||
OsmNode prev = null;
|
OsmNode prev = null;
|
||||||
for ( OsmNode n : wpList )
|
for (OsmNode n : wpList) {
|
||||||
{
|
|
||||||
maxlon = Math.max(n.ilon, maxlon);
|
maxlon = Math.max(n.ilon, maxlon);
|
||||||
minlon = Math.min(n.ilon, minlon);
|
minlon = Math.min(n.ilon, minlon);
|
||||||
maxlat = Math.max(n.ilat, maxlat);
|
maxlat = Math.max(n.ilat, maxlat);
|
||||||
minlat = Math.min(n.ilat, minlat);
|
minlat = Math.min(n.ilat, minlat);
|
||||||
if ( prev != null )
|
if (prev != null) {
|
||||||
{
|
|
||||||
plain_distance += n.calcDistance(prev);
|
plain_distance += n.calcDistance(prev);
|
||||||
}
|
}
|
||||||
prev = n;
|
prev = n;
|
||||||
|
@ -635,12 +559,9 @@ public class BRouterView extends View
|
||||||
rc.nogopoints = nogoList;
|
rc.nogopoints = nogoList;
|
||||||
|
|
||||||
rc.memoryclass = memoryClass;
|
rc.memoryclass = memoryClass;
|
||||||
if ( memoryClass < 16 )
|
if (memoryClass < 16) {
|
||||||
{
|
|
||||||
rc.memoryclass = 16;
|
rc.memoryclass = 16;
|
||||||
}
|
} else if (memoryClass > 256) {
|
||||||
else if ( memoryClass > 256 )
|
|
||||||
{
|
|
||||||
rc.memoryclass = 256;
|
rc.memoryclass = 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,44 +573,34 @@ public class BRouterView extends View
|
||||||
cr.start();
|
cr.start();
|
||||||
invalidate();
|
invalidate();
|
||||||
|
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
String msg = e instanceof IllegalArgumentException ? e.getMessage() : e.toString();
|
String msg = e instanceof IllegalArgumentException ? e.getMessage() : e.toString();
|
||||||
toast(msg);
|
toast(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean assertDirectoryExists( String message, File path, String assetZip, String versionTag )
|
private boolean assertDirectoryExists(String message, File path, String assetZip, String versionTag) {
|
||||||
{
|
|
||||||
boolean exists = path.exists();
|
boolean exists = path.exists();
|
||||||
if ( !exists )
|
if (!exists) {
|
||||||
{
|
|
||||||
path.mkdirs();
|
path.mkdirs();
|
||||||
}
|
}
|
||||||
if ( versionTag != null )
|
if (versionTag != null) {
|
||||||
{
|
|
||||||
File vtag = new File(path, versionTag);
|
File vtag = new File(path, versionTag);
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
exists = !vtag.createNewFile();
|
exists = !vtag.createNewFile();
|
||||||
}
|
} catch (IOException io) {
|
||||||
catch( IOException io ) { } // well..
|
} // well..
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !exists )
|
if (!exists) {
|
||||||
{
|
|
||||||
// default contents from assets archive
|
// default contents from assets archive
|
||||||
if ( assetZip != null )
|
if (assetZip != null) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
AssetManager assetManager = getContext().getAssets();
|
AssetManager assetManager = getContext().getAssets();
|
||||||
InputStream is = assetManager.open(assetZip);
|
InputStream is = assetManager.open(assetZip);
|
||||||
ZipInputStream zis = new ZipInputStream(is);
|
ZipInputStream zis = new ZipInputStream(is);
|
||||||
byte[] data = new byte[1024];
|
byte[] data = new byte[1024];
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
ZipEntry ze = zis.getNextEntry();
|
ZipEntry ze = zis.getNextEntry();
|
||||||
if (ze == null)
|
if (ze == null)
|
||||||
break;
|
break;
|
||||||
|
@ -698,8 +609,7 @@ public class BRouterView extends View
|
||||||
outfile.getParentFile().mkdirs();
|
outfile.getParentFile().mkdirs();
|
||||||
FileOutputStream fos = new FileOutputStream(outfile);
|
FileOutputStream fos = new FileOutputStream(outfile);
|
||||||
|
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
int len = zis.read(data, 0, 1024);
|
int len = zis.read(data, 0, 1024);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
break;
|
break;
|
||||||
|
@ -709,9 +619,7 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
is.close();
|
is.close();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (IOException io) {
|
||||||
catch (IOException io)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("error expanding " + assetZip + ": " + io);
|
throw new RuntimeException("error expanding " + assetZip + ": " + io);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,32 +630,27 @@ public class BRouterView extends View
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void paintPosition( int ilon, int ilat, int color, int with )
|
private void paintPosition(int ilon, int ilat, int color, int with) {
|
||||||
{
|
|
||||||
int lon = ilon - centerLon;
|
int lon = ilon - centerLon;
|
||||||
int lat = ilat - centerLat;
|
int lat = ilat - centerLat;
|
||||||
int x = imgw / 2 + (int) (scaleLon * lon);
|
int x = imgw / 2 + (int) (scaleLon * lon);
|
||||||
int y = imgh / 2 - (int) (scaleLat * lat);
|
int y = imgh / 2 - (int) (scaleLat * lat);
|
||||||
for (int nx = x - with; nx <= x + with; nx++)
|
for (int nx = x - with; nx <= x + with; nx++)
|
||||||
for ( int ny = y - with; ny <= y + with; ny++ )
|
for (int ny = y - with; ny <= y + with; ny++) {
|
||||||
{
|
if (nx >= 0 && nx < imgw && ny >= 0 && ny < imgh) {
|
||||||
if ( nx >= 0 && nx < imgw && ny >= 0 && ny < imgh )
|
|
||||||
{
|
|
||||||
imgPixels[nx + imgw * ny] = color;
|
imgPixels[nx + imgw * ny] = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void paintCircle( Canvas canvas, OsmNodeNamed n, int color, int minradius )
|
private void paintCircle(Canvas canvas, OsmNodeNamed n, int color, int minradius) {
|
||||||
{
|
|
||||||
int lon = n.ilon - centerLon;
|
int lon = n.ilon - centerLon;
|
||||||
int lat = n.ilat - centerLat;
|
int lat = n.ilat - centerLat;
|
||||||
int x = imgw / 2 + (int) (scaleLon * lon);
|
int x = imgw / 2 + (int) (scaleLon * lon);
|
||||||
int y = imgh / 2 - (int) (scaleLat * lat);
|
int y = imgh / 2 - (int) (scaleLat * lat);
|
||||||
|
|
||||||
int ir = (int) (n.radius * scaleMeter2Pixel);
|
int ir = (int) (n.radius * scaleMeter2Pixel);
|
||||||
if ( ir > minradius )
|
if (ir > minradius) {
|
||||||
{
|
|
||||||
Paint paint = new Paint();
|
Paint paint = new Paint();
|
||||||
paint.setColor(Color.RED);
|
paint.setColor(Color.RED);
|
||||||
paint.setStyle(Paint.Style.STROKE);
|
paint.setStyle(Paint.Style.STROKE);
|
||||||
|
@ -755,8 +658,7 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void paintLine( Canvas canvas, final int ilon0, final int ilat0, final int ilon1, final int ilat1, final Paint paint )
|
private void paintLine(Canvas canvas, final int ilon0, final int ilat0, final int ilon1, final int ilat1, final Paint paint) {
|
||||||
{
|
|
||||||
final int lon0 = ilon0 - centerLon;
|
final int lon0 = ilon0 - centerLon;
|
||||||
final int lat0 = ilat0 - centerLat;
|
final int lat0 = ilat0 - centerLat;
|
||||||
final int lon1 = ilon1 - centerLon;
|
final int lon1 = ilon1 - centerLon;
|
||||||
|
@ -768,21 +670,17 @@ public class BRouterView extends View
|
||||||
canvas.drawLine((float) x0, (float) y0, (float) x1, (float) y1, paint);
|
canvas.drawLine((float) x0, (float) y0, (float) x1, (float) y1, paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void paintPolygon( Canvas canvas, OsmNogoPolygon p, int minradius )
|
private void paintPolygon(Canvas canvas, OsmNogoPolygon p, int minradius) {
|
||||||
{
|
|
||||||
final int ir = (int) (p.radius * scaleMeter2Pixel);
|
final int ir = (int) (p.radius * scaleMeter2Pixel);
|
||||||
if ( ir > minradius )
|
if (ir > minradius) {
|
||||||
{
|
|
||||||
Paint paint = new Paint();
|
Paint paint = new Paint();
|
||||||
paint.setColor(Color.RED);
|
paint.setColor(Color.RED);
|
||||||
paint.setStyle(Paint.Style.STROKE);
|
paint.setStyle(Paint.Style.STROKE);
|
||||||
|
|
||||||
Point p0 = p.isClosed ? p.points.get(p.points.size() - 1) : null;
|
Point p0 = p.isClosed ? p.points.get(p.points.size() - 1) : null;
|
||||||
|
|
||||||
for ( final Point p1 : p.points )
|
for (final Point p1 : p.points) {
|
||||||
{
|
if (p0 != null) {
|
||||||
if (p0 != null)
|
|
||||||
{
|
|
||||||
paintLine(canvas, p0.x, p0.y, p1.x, p1.y, paint);
|
paintLine(canvas, p0.x, p0.y, p1.x, p1.y, paint);
|
||||||
}
|
}
|
||||||
p0 = p1;
|
p0 = p1;
|
||||||
|
@ -791,12 +689,10 @@ public class BRouterView extends View
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSizeChanged( int w, int h, int oldw, int oldh )
|
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toast( String msg )
|
private void toast(String msg) {
|
||||||
{
|
|
||||||
Toast.makeText(getContext(), msg, Toast.LENGTH_LONG).show();
|
Toast.makeText(getContext(), msg, Toast.LENGTH_LONG).show();
|
||||||
lastDataTime += 4000; // give time for the toast before exiting
|
lastDataTime += 4000; // give time for the toast before exiting
|
||||||
}
|
}
|
||||||
|
@ -805,38 +701,27 @@ public class BRouterView extends View
|
||||||
private long startTime = 0L;
|
private long startTime = 0L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw( Canvas canvas )
|
protected void onDraw(Canvas canvas) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
_onDraw(canvas);
|
_onDraw(canvas);
|
||||||
}
|
} catch (Throwable t) {
|
||||||
catch (Throwable t)
|
|
||||||
{
|
|
||||||
// on out of mem, try to stop the show
|
// on out of mem, try to stop the show
|
||||||
if (cr != null)
|
if (cr != null)
|
||||||
cr.cleanOnOOM();
|
cr.cleanOnOOM();
|
||||||
cr = null;
|
cr = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
}
|
} catch (InterruptedException ie) {
|
||||||
catch (InterruptedException ie)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
((BRouterActivity) getContext()).showErrorMessage(t.toString());
|
((BRouterActivity) getContext()).showErrorMessage(t.toString());
|
||||||
waitingForSelection = true;
|
waitingForSelection = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showDatabaseScanning( Canvas canvas )
|
private void showDatabaseScanning(Canvas canvas) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
Thread.sleep(100);
|
Thread.sleep(100);
|
||||||
}
|
} catch (InterruptedException ie) {
|
||||||
catch (InterruptedException ie)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
Paint paint1 = new Paint();
|
Paint paint1 = new Paint();
|
||||||
paint1.setColor(Color.WHITE);
|
paint1.setColor(Color.WHITE);
|
||||||
|
@ -851,12 +736,9 @@ public class BRouterView extends View
|
||||||
|
|
||||||
if (currentDir == null) // scan finished
|
if (currentDir == null) // scan finished
|
||||||
{
|
{
|
||||||
if ( bestGuess.length() == 0 )
|
if (bestGuess.length() == 0) {
|
||||||
{
|
|
||||||
((BRouterActivity) getContext()).showErrorMessage("scan did not find any possible waypoint database");
|
((BRouterActivity) getContext()).showErrorMessage("scan did not find any possible waypoint database");
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
((BRouterActivity) getContext()).showWpDatabaseScanSuccess(bestGuess);
|
((BRouterActivity) getContext()).showWpDatabaseScanSuccess(bestGuess);
|
||||||
}
|
}
|
||||||
cr = null;
|
cr = null;
|
||||||
|
@ -875,10 +757,8 @@ public class BRouterView extends View
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _onDraw( Canvas canvas )
|
private void _onDraw(Canvas canvas) {
|
||||||
{
|
if (dataBaseScanner != null) {
|
||||||
if ( dataBaseScanner != null )
|
|
||||||
{
|
|
||||||
showDatabaseScanning(canvas);
|
showDatabaseScanning(canvas);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -892,28 +772,20 @@ public class BRouterView extends View
|
||||||
while (sleeptime < 200)
|
while (sleeptime < 200)
|
||||||
sleeptime += 500;
|
sleeptime += 500;
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
Thread.sleep(sleeptime);
|
Thread.sleep(sleeptime);
|
||||||
}
|
} catch (InterruptedException ie) {
|
||||||
catch (InterruptedException ie)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
lastTs = System.currentTimeMillis();
|
lastTs = System.currentTimeMillis();
|
||||||
|
|
||||||
if ( cr == null || cr.isFinished() )
|
if (cr == null || cr.isFinished()) {
|
||||||
{
|
if (cr != null) {
|
||||||
if ( cr != null )
|
if (cr.getErrorMessage() != null) {
|
||||||
{
|
|
||||||
if ( cr.getErrorMessage() != null )
|
|
||||||
{
|
|
||||||
((BRouterActivity) getContext()).showErrorMessage(cr.getErrorMessage());
|
((BRouterActivity) getContext()).showErrorMessage(cr.getErrorMessage());
|
||||||
cr = null;
|
cr = null;
|
||||||
waitingForSelection = true;
|
waitingForSelection = true;
|
||||||
return;
|
return;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
String memstat = memoryClass + "mb pathPeak " + ((cr.getPathPeak() + 500) / 1000) + "k";
|
String memstat = memoryClass + "mb pathPeak " + ((cr.getPathPeak() + 500) / 1000) + "k";
|
||||||
String result = "version = BRouter-" + getContext().getString(R.string.app_version) + "\n" + "mem = " + memstat + "\ndistance = " + cr.getDistance() / 1000. + " km\n" + "filtered ascend = " + cr.getAscend()
|
String result = "version = BRouter-" + getContext().getString(R.string.app_version) + "\n" + "mem = " + memstat + "\ndistance = " + cr.getDistance() / 1000. + " km\n" + "filtered ascend = " + cr.getAscend()
|
||||||
+ " m\n" + "plain ascend = " + cr.getPlainAscend() + " m\n" + "estimated time = " + cr.getTime();
|
+ " m\n" + "plain ascend = " + cr.getPlainAscend() + " m\n" + "estimated time = " + cr.getTime();
|
||||||
|
@ -921,8 +793,7 @@ public class BRouterView extends View
|
||||||
rawTrack = cr.getFoundRawTrack();
|
rawTrack = cr.getFoundRawTrack();
|
||||||
|
|
||||||
// for profile "remote", always persist referencetrack
|
// for profile "remote", always persist referencetrack
|
||||||
if ( cr.getAlternativeIndex() == 0 && rawTrackPath != null )
|
if (cr.getAlternativeIndex() == 0 && rawTrackPath != null) {
|
||||||
{
|
|
||||||
writeRawTrackToPath(rawTrackPath);
|
writeRawTrackToPath(rawTrackPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -935,33 +806,26 @@ public class BRouterView extends View
|
||||||
waitingForSelection = true;
|
waitingForSelection = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
} else if (System.currentTimeMillis() > lastDataTime) {
|
||||||
else if ( System.currentTimeMillis() > lastDataTime )
|
|
||||||
{
|
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
lastDataTime = System.currentTimeMillis();
|
lastDataTime = System.currentTimeMillis();
|
||||||
imgPixels = new int[imgw * imgh];
|
imgPixels = new int[imgw * imgh];
|
||||||
|
|
||||||
int[] openSet = cr.getOpenSet();
|
int[] openSet = cr.getOpenSet();
|
||||||
for ( int si = 0; si < openSet.length; si += 2 )
|
for (int si = 0; si < openSet.length; si += 2) {
|
||||||
{
|
|
||||||
paintPosition(openSet[si], openSet[si + 1], 0xffffff, 1);
|
paintPosition(openSet[si], openSet[si + 1], 0xffffff, 1);
|
||||||
}
|
}
|
||||||
// paint nogos on top (red)
|
// paint nogos on top (red)
|
||||||
for ( int ngi = 0; ngi < nogoList.size(); ngi++ )
|
for (int ngi = 0; ngi < nogoList.size(); ngi++) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = nogoList.get(ngi);
|
OsmNodeNamed n = nogoList.get(ngi);
|
||||||
int color = 0xff0000;
|
int color = 0xff0000;
|
||||||
paintPosition(n.ilon, n.ilat, color, 4);
|
paintPosition(n.ilon, n.ilat, color, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
// paint start/end/vias on top (yellow/green/blue)
|
// paint start/end/vias on top (yellow/green/blue)
|
||||||
for ( int wpi = 0; wpi < wpList.size(); wpi++ )
|
for (int wpi = 0; wpi < wpList.size(); wpi++) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = wpList.get(wpi);
|
OsmNodeNamed n = wpList.get(wpi);
|
||||||
int color = wpi == 0 ? 0xffff00 : wpi < wpList.size() - 1 ? 0xff : 0xff00;
|
int color = wpi == 0 ? 0xffff00 : wpi < wpList.size() - 1 ? 0xff : 0xff00;
|
||||||
paintPosition(n.ilon, n.ilat, color, 4);
|
paintPosition(n.ilon, n.ilat, color, 4);
|
||||||
|
@ -970,15 +834,11 @@ public class BRouterView extends View
|
||||||
canvas.drawBitmap(imgPixels, 0, imgw, (float) 0., (float) 0., imgw, imgh, false, null);
|
canvas.drawBitmap(imgPixels, 0, imgw, (float) 0., (float) 0., imgw, imgh, false, null);
|
||||||
|
|
||||||
// nogo circles if any
|
// nogo circles if any
|
||||||
for ( int ngi = 0; ngi < nogoList.size(); ngi++ )
|
for (int ngi = 0; ngi < nogoList.size(); ngi++) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = nogoList.get(ngi);
|
OsmNodeNamed n = nogoList.get(ngi);
|
||||||
if (n instanceof OsmNogoPolygon)
|
if (n instanceof OsmNogoPolygon) {
|
||||||
{
|
|
||||||
paintPolygon(canvas, (OsmNogoPolygon) n, 4);
|
paintPolygon(canvas, (OsmNogoPolygon) n, 4);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
int color = 0xff0000;
|
int color = 0xff0000;
|
||||||
paintCircle(canvas, n, color, 4);
|
paintCircle(canvas, n, color, 4);
|
||||||
}
|
}
|
||||||
|
@ -999,76 +859,58 @@ public class BRouterView extends View
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String guessBaseDir()
|
private String guessBaseDir() {
|
||||||
{
|
|
||||||
File basedir = Environment.getExternalStorageDirectory();
|
File basedir = Environment.getExternalStorageDirectory();
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
File bd2 = new File(basedir, "external_sd");
|
File bd2 = new File(basedir, "external_sd");
|
||||||
ArrayList<String> basedirGuesses = new ArrayList<String>();
|
ArrayList<String> basedirGuesses = new ArrayList<String>();
|
||||||
basedirGuesses.add(basedir.getAbsolutePath());
|
basedirGuesses.add(basedir.getAbsolutePath());
|
||||||
|
|
||||||
if ( bd2.exists() )
|
if (bd2.exists()) {
|
||||||
{
|
|
||||||
basedir = bd2;
|
basedir = bd2;
|
||||||
basedirGuesses.add(basedir.getAbsolutePath());
|
basedirGuesses.add(basedir.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<CoordinateReader> rl = new ArrayList<CoordinateReader>();
|
ArrayList<CoordinateReader> rl = new ArrayList<CoordinateReader>();
|
||||||
for ( String bdg : basedirGuesses )
|
for (String bdg : basedirGuesses) {
|
||||||
{
|
|
||||||
rl.add(new CoordinateReaderOsmAnd(bdg));
|
rl.add(new CoordinateReaderOsmAnd(bdg));
|
||||||
rl.add(new CoordinateReaderLocus(bdg));
|
rl.add(new CoordinateReaderLocus(bdg));
|
||||||
rl.add(new CoordinateReaderOrux(bdg));
|
rl.add(new CoordinateReaderOrux(bdg));
|
||||||
}
|
}
|
||||||
long tmax = 0;
|
long tmax = 0;
|
||||||
CoordinateReader cor = null;
|
CoordinateReader cor = null;
|
||||||
for ( CoordinateReader r : rl )
|
for (CoordinateReader r : rl) {
|
||||||
{
|
|
||||||
long t = r.getTimeStamp();
|
long t = r.getTimeStamp();
|
||||||
if ( t > tmax )
|
if (t > tmax) {
|
||||||
{
|
|
||||||
tmax = t;
|
tmax = t;
|
||||||
cor = r;
|
cor = r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( cor != null )
|
if (cor != null) {
|
||||||
{
|
|
||||||
return cor.basedir;
|
return cor.basedir;
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
System.out.println("guessBaseDir:" + e);
|
System.out.println("guessBaseDir:" + e);
|
||||||
}
|
}
|
||||||
return basedir.getAbsolutePath();
|
return basedir.getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeRawTrackToMode( String mode )
|
private void writeRawTrackToMode(String mode) {
|
||||||
{
|
|
||||||
writeRawTrackToPath(modesDir + "/" + mode + "_rawtrack.dat");
|
writeRawTrackToPath(modesDir + "/" + mode + "_rawtrack.dat");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeRawTrackToPath( String rawTrackPath )
|
private void writeRawTrackToPath(String rawTrackPath) {
|
||||||
{
|
if (rawTrack != null) {
|
||||||
if ( rawTrack != null )
|
try {
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rawTrack.writeBinary(rawTrackPath);
|
rawTrack.writeBinary(rawTrackPath);
|
||||||
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
} else {
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
new File(rawTrackPath).delete();
|
new File(rawTrackPath).delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startConfigureService()
|
public void startConfigureService() {
|
||||||
{
|
|
||||||
String[] modes = new String[]
|
String[] modes = new String[]
|
||||||
{"foot_short", "foot_fast", "bicycle_short", "bicycle_fast", "motorcar_short", "motorcar_fast"};
|
{"foot_short", "foot_fast", "bicycle_short", "bicycle_fast", "motorcar_short", "motorcar_fast"};
|
||||||
boolean[] modesChecked = new boolean[6];
|
boolean[] modesChecked = new boolean[6];
|
||||||
|
@ -1078,48 +920,35 @@ public class BRouterView extends View
|
||||||
((BRouterActivity) getContext()).selectRoutingModes(modes, modesChecked, msg);
|
((BRouterActivity) getContext()).selectRoutingModes(modes, modesChecked, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void configureService( String[] routingModes, boolean[] checkedModes )
|
public void configureService(String[] routingModes, boolean[] checkedModes) {
|
||||||
{
|
|
||||||
// read in current config
|
// read in current config
|
||||||
TreeMap<String, ServiceModeConfig> map = new TreeMap<String, ServiceModeConfig>();
|
TreeMap<String, ServiceModeConfig> map = new TreeMap<String, ServiceModeConfig>();
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
String modesFile = modesDir + "/serviceconfig.dat";
|
String modesFile = modesDir + "/serviceconfig.dat";
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
br = new BufferedReader(new FileReader(modesFile));
|
br = new BufferedReader(new FileReader(modesFile));
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null)
|
if (line == null)
|
||||||
break;
|
break;
|
||||||
ServiceModeConfig smc = new ServiceModeConfig(line);
|
ServiceModeConfig smc = new ServiceModeConfig(line);
|
||||||
map.put(smc.mode, smc);
|
map.put(smc.mode, smc);
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
} finally {
|
||||||
{
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (br != null)
|
if (br != null)
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
br.close();
|
br.close();
|
||||||
}
|
} catch (Exception ee) {
|
||||||
catch (Exception ee)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// replace selected modes
|
// replace selected modes
|
||||||
for ( int i = 0; i < 6; i++ )
|
for (int i = 0; i < 6; i++) {
|
||||||
{
|
if (checkedModes[i]) {
|
||||||
if ( checkedModes[i] )
|
|
||||||
{
|
|
||||||
writeRawTrackToMode(routingModes[i]);
|
writeRawTrackToMode(routingModes[i]);
|
||||||
ServiceModeConfig smc = new ServiceModeConfig(routingModes[i], profileName);
|
ServiceModeConfig smc = new ServiceModeConfig(routingModes[i], profileName);
|
||||||
for ( OsmNodeNamed nogo : nogoVetoList )
|
for (OsmNodeNamed nogo : nogoVetoList) {
|
||||||
{
|
|
||||||
smc.nogoVetos.add(nogo.ilon + "," + nogo.ilat);
|
smc.nogoVetos.add(nogo.ilon + "," + nogo.ilat);
|
||||||
}
|
}
|
||||||
map.put(smc.mode, smc);
|
map.put(smc.mode, smc);
|
||||||
|
@ -1131,42 +960,30 @@ public class BRouterView extends View
|
||||||
StringBuilder msg = new StringBuilder("Mode mapping is now:\n");
|
StringBuilder msg = new StringBuilder("Mode mapping is now:\n");
|
||||||
msg.append("( [");
|
msg.append("( [");
|
||||||
msg.append(nogoVetoList.size() > 0 ? nogoVetoList.size() : "..").append("] counts nogo-vetos)\n");
|
msg.append(nogoVetoList.size() > 0 ? nogoVetoList.size() : "..").append("] counts nogo-vetos)\n");
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
bw = new BufferedWriter(new FileWriter(modesFile));
|
bw = new BufferedWriter(new FileWriter(modesFile));
|
||||||
for ( ServiceModeConfig smc : map.values() )
|
for (ServiceModeConfig smc : map.values()) {
|
||||||
{
|
|
||||||
bw.write(smc.toLine());
|
bw.write(smc.toLine());
|
||||||
bw.write('\n');
|
bw.write('\n');
|
||||||
msg.append(smc.toString()).append('\n');
|
msg.append(smc.toString()).append('\n');
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
} finally {
|
||||||
{
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (bw != null)
|
if (bw != null)
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
bw.close();
|
bw.close();
|
||||||
}
|
} catch (Exception ee) {
|
||||||
catch (Exception ee)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
((BRouterActivity) getContext()).showModeConfigOverview(msg.toString());
|
((BRouterActivity) getContext()).showModeConfigOverview(msg.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private String readSingleLineFile( File f )
|
private String readSingleLineFile(File f) {
|
||||||
{
|
|
||||||
try (FileInputStream fis = new FileInputStream(f);
|
try (FileInputStream fis = new FileInputStream(f);
|
||||||
InputStreamReader isr = new InputStreamReader(fis);
|
InputStreamReader isr = new InputStreamReader(fis);
|
||||||
BufferedReader br = new BufferedReader(isr)) {
|
BufferedReader br = new BufferedReader(isr)) {
|
||||||
return br.readLine();
|
return br.readLine();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,7 @@ import btools.router.OsmTrack;
|
||||||
import btools.router.RoutingContext;
|
import btools.router.RoutingContext;
|
||||||
import btools.router.RoutingEngine;
|
import btools.router.RoutingEngine;
|
||||||
|
|
||||||
public class BRouterWorker
|
public class BRouterWorker {
|
||||||
{
|
|
||||||
private static final int OUTPUT_FORMAT_GPX = 0;
|
private static final int OUTPUT_FORMAT_GPX = 0;
|
||||||
private static final int OUTPUT_FORMAT_KML = 1;
|
private static final int OUTPUT_FORMAT_KML = 1;
|
||||||
private static final int OUTPUT_FORMAT_JSON = 2;
|
private static final int OUTPUT_FORMAT_JSON = 2;
|
||||||
|
@ -66,8 +65,7 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ( params.containsKey( "direction" ) )
|
if (params.containsKey("direction")) {
|
||||||
{
|
|
||||||
rc.startDirection = params.getInt("direction");
|
rc.startDirection = params.getInt("direction");
|
||||||
}
|
}
|
||||||
if (params.containsKey("alternativeidx")) {
|
if (params.containsKey("alternativeidx")) {
|
||||||
|
@ -118,11 +116,10 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
writeTimeoutData(rc);
|
writeTimeoutData(rc);
|
||||||
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
catch( Exception e ) {}
|
|
||||||
|
|
||||||
RoutingEngine cr = new RoutingEngine(null, null, segmentDir, waypoints, rc);
|
RoutingEngine cr = new RoutingEngine(null, null, segmentDir, waypoints, rc);
|
||||||
cr.quite = true;
|
cr.quite = true;
|
||||||
|
@ -130,17 +127,14 @@ public class BRouterWorker
|
||||||
|
|
||||||
// store new reference track if any
|
// store new reference track if any
|
||||||
// (can exist for timed-out search)
|
// (can exist for timed-out search)
|
||||||
if ( cr.getFoundRawTrack() != null )
|
if (cr.getFoundRawTrack() != null) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
cr.getFoundRawTrack().writeBinary(rawTrackPath);
|
cr.getFoundRawTrack().writeBinary(rawTrackPath);
|
||||||
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
catch( Exception e ) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cr.getErrorMessage() != null )
|
if (cr.getErrorMessage() != null) {
|
||||||
{
|
|
||||||
return cr.getErrorMessage();
|
return cr.getErrorMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,52 +146,56 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
|
|
||||||
OsmTrack track = cr.getFoundTrack();
|
OsmTrack track = cr.getFoundTrack();
|
||||||
if ( track != null )
|
if (track != null) {
|
||||||
{
|
|
||||||
if (params.containsKey("exportWaypoints")) {
|
if (params.containsKey("exportWaypoints")) {
|
||||||
track.exportWaypoints = (params.getInt("exportWaypoints", 0) == 1);
|
track.exportWaypoints = (params.getInt("exportWaypoints", 0) == 1);
|
||||||
}
|
}
|
||||||
if ( pathToFileResult == null )
|
if (pathToFileResult == null) {
|
||||||
{
|
|
||||||
switch (writeFromat) {
|
switch (writeFromat) {
|
||||||
case OUTPUT_FORMAT_GPX: return track.formatAsGpx();
|
case OUTPUT_FORMAT_GPX:
|
||||||
case OUTPUT_FORMAT_KML: return track.formatAsKml();
|
return track.formatAsGpx();
|
||||||
case OUTPUT_FORMAT_JSON: return track.formatAsGeoJson();
|
case OUTPUT_FORMAT_KML:
|
||||||
default: return track.formatAsGpx();
|
return track.formatAsKml();
|
||||||
|
case OUTPUT_FORMAT_JSON:
|
||||||
|
return track.formatAsGeoJson();
|
||||||
|
default:
|
||||||
|
return track.formatAsGpx();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
switch (writeFromat) {
|
switch (writeFromat) {
|
||||||
case OUTPUT_FORMAT_GPX: track.writeGpx(pathToFileResult); break;
|
case OUTPUT_FORMAT_GPX:
|
||||||
case OUTPUT_FORMAT_KML: track.writeKml(pathToFileResult); break;
|
track.writeGpx(pathToFileResult);
|
||||||
case OUTPUT_FORMAT_JSON: track.writeJson(pathToFileResult); break;
|
break;
|
||||||
default: track.writeGpx(pathToFileResult); break;
|
case OUTPUT_FORMAT_KML:
|
||||||
|
track.writeKml(pathToFileResult);
|
||||||
|
break;
|
||||||
|
case OUTPUT_FORMAT_JSON:
|
||||||
|
track.writeJson(pathToFileResult);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
track.writeGpx(pathToFileResult);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
return "error writing file: " + e;
|
return "error writing file: " + e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OsmNodeNamed> readPositions( Bundle params )
|
private List<OsmNodeNamed> readPositions(Bundle params) {
|
||||||
{
|
|
||||||
List<OsmNodeNamed> wplist = new ArrayList<OsmNodeNamed>();
|
List<OsmNodeNamed> wplist = new ArrayList<OsmNodeNamed>();
|
||||||
|
|
||||||
double[] lats = params.getDoubleArray("lats");
|
double[] lats = params.getDoubleArray("lats");
|
||||||
double[] lons = params.getDoubleArray("lons");
|
double[] lons = params.getDoubleArray("lons");
|
||||||
|
|
||||||
if (lats == null || lats.length < 2 || lons == null || lons.length < 2)
|
if (lats == null || lats.length < 2 || lons == null || lons.length < 2) {
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("we need two lat/lon points at least!");
|
throw new IllegalArgumentException("we need two lat/lon points at least!");
|
||||||
}
|
}
|
||||||
|
|
||||||
for( int i=0; i<lats.length && i<lons.length; i++ )
|
for (int i = 0; i < lats.length && i < lons.length; i++) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = new OsmNodeNamed();
|
OsmNodeNamed n = new OsmNodeNamed();
|
||||||
n.name = "via" + i;
|
n.name = "via" + i;
|
||||||
n.ilon = (int) ((lons[i] + 180.) * 1000000. + 0.5);
|
n.ilon = (int) ((lons[i] + 180.) * 1000000. + 0.5);
|
||||||
|
@ -210,8 +208,7 @@ public class BRouterWorker
|
||||||
return wplist;
|
return wplist;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OsmNodeNamed> readLonlats(Bundle params )
|
private List<OsmNodeNamed> readLonlats(Bundle params) {
|
||||||
{
|
|
||||||
List<OsmNodeNamed> wplist = new ArrayList<OsmNodeNamed>();
|
List<OsmNodeNamed> wplist = new ArrayList<OsmNodeNamed>();
|
||||||
|
|
||||||
String lonLats = params.getString("lonlats");
|
String lonLats = params.getString("lonlats");
|
||||||
|
@ -221,8 +218,7 @@ public class BRouterWorker
|
||||||
if (coords.length < 2)
|
if (coords.length < 2)
|
||||||
throw new IllegalArgumentException("we need two lat/lon points at least!");
|
throw new IllegalArgumentException("we need two lat/lon points at least!");
|
||||||
|
|
||||||
for (int i = 0; i < coords.length; i++)
|
for (int i = 0; i < coords.length; i++) {
|
||||||
{
|
|
||||||
String[] lonLat = coords[i].split(",");
|
String[] lonLat = coords[i].split(",");
|
||||||
if (lonLat.length < 2)
|
if (lonLat.length < 2)
|
||||||
throw new IllegalArgumentException("we need two lat/lon points at least!");
|
throw new IllegalArgumentException("we need two lat/lon points at least!");
|
||||||
|
@ -235,16 +231,14 @@ public class BRouterWorker
|
||||||
return wplist;
|
return wplist;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static OsmNodeNamed readPosition( String vlon, String vlat, String name )
|
private static OsmNodeNamed readPosition(String vlon, String vlat, String name) {
|
||||||
{
|
|
||||||
if (vlon == null) throw new IllegalArgumentException("lon " + name + " not found in input");
|
if (vlon == null) throw new IllegalArgumentException("lon " + name + " not found in input");
|
||||||
if (vlat == null) throw new IllegalArgumentException("lat " + name + " not found in input");
|
if (vlat == null) throw new IllegalArgumentException("lat " + name + " not found in input");
|
||||||
|
|
||||||
return readPosition(Double.parseDouble(vlon), Double.parseDouble(vlat), name);
|
return readPosition(Double.parseDouble(vlon), Double.parseDouble(vlat), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static OsmNodeNamed readPosition( double lon, double lat, String name )
|
private static OsmNodeNamed readPosition(double lon, double lat, String name) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = new OsmNodeNamed();
|
OsmNodeNamed n = new OsmNodeNamed();
|
||||||
n.name = name;
|
n.name = name;
|
||||||
n.ilon = (int) ((lon + 180.) * 1000000. + 0.5);
|
n.ilon = (int) ((lon + 180.) * 1000000. + 0.5);
|
||||||
|
@ -253,8 +247,7 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void readNogos( Bundle params )
|
private void readNogos(Bundle params) {
|
||||||
{
|
|
||||||
if (params.containsKey("nogoLats")) {
|
if (params.containsKey("nogoLats")) {
|
||||||
double[] lats = params.getDoubleArray("nogoLats");
|
double[] lats = params.getDoubleArray("nogoLats");
|
||||||
double[] lons = params.getDoubleArray("nogoLons");
|
double[] lons = params.getDoubleArray("nogoLons");
|
||||||
|
@ -282,8 +275,7 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OsmNodeNamed> readNogoList(Bundle params)
|
private List<OsmNodeNamed> readNogoList(Bundle params) {
|
||||||
{
|
|
||||||
// lon,lat,radius|...
|
// lon,lat,radius|...
|
||||||
String nogos = params.getString("nogos");
|
String nogos = params.getString("nogos");
|
||||||
if (nogos == null) return null;
|
if (nogos == null) return null;
|
||||||
|
@ -291,8 +283,7 @@ public class BRouterWorker
|
||||||
String[] lonLatRadList = nogos.split("\\|");
|
String[] lonLatRadList = nogos.split("\\|");
|
||||||
|
|
||||||
List<OsmNodeNamed> nogoList = new ArrayList<OsmNodeNamed>();
|
List<OsmNodeNamed> nogoList = new ArrayList<OsmNodeNamed>();
|
||||||
for (int i = 0; i < lonLatRadList.length; i++)
|
for (int i = 0; i < lonLatRadList.length; i++) {
|
||||||
{
|
|
||||||
String[] lonLatRad = lonLatRadList[i].split(",");
|
String[] lonLatRad = lonLatRadList[i].split(",");
|
||||||
String nogoWeight = "NaN";
|
String nogoWeight = "NaN";
|
||||||
if (lonLatRad.length > 3) {
|
if (lonLatRad.length > 3) {
|
||||||
|
@ -304,14 +295,12 @@ public class BRouterWorker
|
||||||
return nogoList;
|
return nogoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static OsmNodeNamed readNogo( String lon, String lat, String radius, String nogoWeight )
|
private static OsmNodeNamed readNogo(String lon, String lat, String radius, String nogoWeight) {
|
||||||
{
|
|
||||||
double weight = "undefined".equals(nogoWeight) ? Double.NaN : Double.parseDouble(nogoWeight);
|
double weight = "undefined".equals(nogoWeight) ? Double.NaN : Double.parseDouble(nogoWeight);
|
||||||
return readNogo(Double.parseDouble(lon), Double.parseDouble(lat), Integer.parseInt(radius), weight);
|
return readNogo(Double.parseDouble(lon), Double.parseDouble(lat), Integer.parseInt(radius), weight);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static OsmNodeNamed readNogo( double lon, double lat, int radius, double nogoWeight )
|
private static OsmNodeNamed readNogo(double lon, double lat, int radius, double nogoWeight) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = new OsmNodeNamed();
|
OsmNodeNamed n = new OsmNodeNamed();
|
||||||
n.name = "nogo" + radius;
|
n.name = "nogo" + radius;
|
||||||
n.ilon = (int) ((lon + 180.) * 1000000. + 0.5);
|
n.ilon = (int) ((lon + 180.) * 1000000. + 0.5);
|
||||||
|
@ -321,30 +310,24 @@ public class BRouterWorker
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OsmNodeNamed> readNogoPolygons(Bundle params)
|
private List<OsmNodeNamed> readNogoPolygons(Bundle params) {
|
||||||
{
|
|
||||||
List<OsmNodeNamed> result = new ArrayList<OsmNodeNamed>();
|
List<OsmNodeNamed> result = new ArrayList<OsmNodeNamed>();
|
||||||
parseNogoPolygons(params.getString("polylines"), result, false);
|
parseNogoPolygons(params.getString("polylines"), result, false);
|
||||||
parseNogoPolygons(params.getString("polygons"), result, true);
|
parseNogoPolygons(params.getString("polygons"), result, true);
|
||||||
return result.size() > 0 ? result : null;
|
return result.size() > 0 ? result : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseNogoPolygons(String polygons, List<OsmNodeNamed> result, boolean closed )
|
private static void parseNogoPolygons(String polygons, List<OsmNodeNamed> result, boolean closed) {
|
||||||
{
|
if (polygons != null) {
|
||||||
if ( polygons != null )
|
|
||||||
{
|
|
||||||
OsmNogoPolygon polygon = new OsmNogoPolygon(closed);
|
OsmNogoPolygon polygon = new OsmNogoPolygon(closed);
|
||||||
polygon.name = "nogopoly";
|
polygon.name = "nogopoly";
|
||||||
String nogoWeight = "NaN";
|
String nogoWeight = "NaN";
|
||||||
String[] polygonList = polygons.split("\\|");
|
String[] polygonList = polygons.split("\\|");
|
||||||
for (int i = 0; i < polygonList.length; i++)
|
for (int i = 0; i < polygonList.length; i++) {
|
||||||
{
|
|
||||||
String[] lonLatList = polygonList[i].split(",");
|
String[] lonLatList = polygonList[i].split(",");
|
||||||
if ( lonLatList.length > 1 )
|
if (lonLatList.length > 1) {
|
||||||
{
|
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < 2 * (lonLatList.length / 2) - 1;)
|
for (j = 0; j < 2 * (lonLatList.length / 2) - 1; ) {
|
||||||
{
|
|
||||||
String slon = lonLatList[j++];
|
String slon = lonLatList[j++];
|
||||||
String slat = lonLatList[j++];
|
String slat = lonLatList[j++];
|
||||||
int lon = (int) ((Double.parseDouble(slon) + 180.) * 1000000. + 0.5);
|
int lon = (int) ((Double.parseDouble(slon) + 180.) * 1000000. + 0.5);
|
||||||
|
@ -360,29 +343,23 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
polygon.nogoWeight = Double.parseDouble(nogoWeight);
|
polygon.nogoWeight = Double.parseDouble(nogoWeight);
|
||||||
|
|
||||||
if ( polygon.points.size() > 0 )
|
if (polygon.points.size() > 0) {
|
||||||
{
|
|
||||||
polygon.calcBoundingCircle();
|
polygon.calcBoundingCircle();
|
||||||
result.add(polygon);
|
result.add(polygon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseNogoPolygons_alt(String polygons, List<OsmNodeNamed> result, boolean closed )
|
private static void parseNogoPolygons_alt(String polygons, List<OsmNodeNamed> result, boolean closed) {
|
||||||
{
|
if (polygons != null) {
|
||||||
if ( polygons != null )
|
|
||||||
{
|
|
||||||
String[] polygonList = polygons.split("\\|");
|
String[] polygonList = polygons.split("\\|");
|
||||||
for (int i = 0; i < polygonList.length; i++)
|
for (int i = 0; i < polygonList.length; i++) {
|
||||||
{
|
|
||||||
String[] lonLatList = polygonList[i].split(",");
|
String[] lonLatList = polygonList[i].split(",");
|
||||||
if ( lonLatList.length > 1 )
|
if (lonLatList.length > 1) {
|
||||||
{
|
|
||||||
OsmNogoPolygon polygon = new OsmNogoPolygon(closed);
|
OsmNogoPolygon polygon = new OsmNogoPolygon(closed);
|
||||||
polygon.name = "nogo" + i;
|
polygon.name = "nogo" + i;
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < 2 * (lonLatList.length / 2) - 1;)
|
for (j = 0; j < 2 * (lonLatList.length / 2) - 1; ) {
|
||||||
{
|
|
||||||
String slon = lonLatList[j++];
|
String slon = lonLatList[j++];
|
||||||
String slat = lonLatList[j++];
|
String slat = lonLatList[j++];
|
||||||
int lon = (int) ((Double.parseDouble(slon) + 180.) * 1000000. + 0.5);
|
int lon = (int) ((Double.parseDouble(slon) + 180.) * 1000000. + 0.5);
|
||||||
|
@ -396,8 +373,7 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
polygon.nogoWeight = Double.parseDouble(nogoWeight);
|
polygon.nogoWeight = Double.parseDouble(nogoWeight);
|
||||||
|
|
||||||
if ( polygon.points.size() > 0 )
|
if (polygon.points.size() > 0) {
|
||||||
{
|
|
||||||
polygon.calcBoundingCircle();
|
polygon.calcBoundingCircle();
|
||||||
result.add(polygon);
|
result.add(polygon);
|
||||||
}
|
}
|
||||||
|
@ -406,8 +382,7 @@ public class BRouterWorker
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OsmNodeNamed> readPoisList(Bundle params )
|
private List<OsmNodeNamed> readPoisList(Bundle params) {
|
||||||
{
|
|
||||||
// lon,lat,name|...
|
// lon,lat,name|...
|
||||||
String pois = params.getString("pois");
|
String pois = params.getString("pois");
|
||||||
if (pois == null) return null;
|
if (pois == null) return null;
|
||||||
|
@ -415,8 +390,7 @@ public class BRouterWorker
|
||||||
String[] lonLatNameList = pois.split("\\|");
|
String[] lonLatNameList = pois.split("\\|");
|
||||||
|
|
||||||
List<OsmNodeNamed> poisList = new ArrayList<OsmNodeNamed>();
|
List<OsmNodeNamed> poisList = new ArrayList<OsmNodeNamed>();
|
||||||
for (int i = 0; i < lonLatNameList.length; i++)
|
for (int i = 0; i < lonLatNameList.length; i++) {
|
||||||
{
|
|
||||||
String[] lonLatName = lonLatNameList[i].split(",");
|
String[] lonLatName = lonLatNameList[i].split(",");
|
||||||
|
|
||||||
OsmNodeNamed n = new OsmNodeNamed();
|
OsmNodeNamed n = new OsmNodeNamed();
|
||||||
|
@ -429,8 +403,7 @@ public class BRouterWorker
|
||||||
return poisList;
|
return poisList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeTimeoutData( RoutingContext rc ) throws Exception
|
private void writeTimeoutData(RoutingContext rc) throws Exception {
|
||||||
{
|
|
||||||
String timeoutFile = baseDir + "/brouter/modes/timeoutdata.txt";
|
String timeoutFile = baseDir + "/brouter/modes/timeoutdata.txt";
|
||||||
|
|
||||||
BufferedWriter bw = new BufferedWriter(new FileWriter(timeoutFile));
|
BufferedWriter bw = new BufferedWriter(new FileWriter(timeoutFile));
|
||||||
|
@ -443,11 +416,9 @@ public class BRouterWorker
|
||||||
bw.close();
|
bw.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeWPList( BufferedWriter bw, List<OsmNodeNamed> wps ) throws Exception
|
private void writeWPList(BufferedWriter bw, List<OsmNodeNamed> wps) throws Exception {
|
||||||
{
|
|
||||||
bw.write(wps.size() + "\n");
|
bw.write(wps.size() + "\n");
|
||||||
for( OsmNodeNamed wp : wps )
|
for (OsmNodeNamed wp : wps) {
|
||||||
{
|
|
||||||
bw.write(wp.toString());
|
bw.write(wp.toString());
|
||||||
bw.write("\n");
|
bw.write("\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,31 +10,25 @@ import java.io.File;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
public class ConfigHelper
|
public class ConfigHelper {
|
||||||
{
|
public static File getBaseDir(Context ctx) {
|
||||||
public static File getBaseDir( Context ctx )
|
|
||||||
{
|
|
||||||
// get base dir from private file
|
// get base dir from private file
|
||||||
|
|
||||||
try (InputStream configInput = ctx.openFileInput("config15.dat");
|
try (InputStream configInput = ctx.openFileInput("config15.dat");
|
||||||
InputStreamReader isr = new InputStreamReader(configInput);
|
InputStreamReader isr = new InputStreamReader(configInput);
|
||||||
BufferedReader br = new BufferedReader(isr)) {
|
BufferedReader br = new BufferedReader(isr)) {
|
||||||
return new File(br.readLine());
|
return new File(br.readLine());
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeBaseDir( Context ctx, File baseDir )
|
public static void writeBaseDir(Context ctx, File baseDir) {
|
||||||
{
|
|
||||||
try (OutputStream configOutput = ctx.openFileOutput("config15.dat", Context.MODE_PRIVATE);
|
try (OutputStream configOutput = ctx.openFileOutput("config15.dat", Context.MODE_PRIVATE);
|
||||||
OutputStreamWriter osw = new OutputStreamWriter(configOutput);
|
OutputStreamWriter osw = new OutputStreamWriter(configOutput);
|
||||||
BufferedWriter bw = new BufferedWriter(osw)) {
|
BufferedWriter bw = new BufferedWriter(osw)) {
|
||||||
bw.write(baseDir.getAbsolutePath());
|
bw.write(baseDir.getAbsolutePath());
|
||||||
bw.write('\n');
|
bw.write('\n');
|
||||||
}
|
} catch (Exception e) { /* ignore */ }
|
||||||
catch (Exception e){ /* ignore */ }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,8 @@ import java.io.FileWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ConfigMigration
|
public class ConfigMigration {
|
||||||
{
|
public static void tryMigrateStorageConfig(File srcFile, File dstFile) {
|
||||||
public static void tryMigrateStorageConfig( File srcFile, File dstFile )
|
|
||||||
{
|
|
||||||
if (!srcFile.exists()) return;
|
if (!srcFile.exists()) return;
|
||||||
|
|
||||||
String ssd = null;
|
String ssd = null;
|
||||||
|
@ -19,22 +17,17 @@ public class ConfigMigration
|
||||||
|
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
BufferedWriter bw = null;
|
BufferedWriter bw = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
br = new BufferedReader(new FileReader(srcFile));
|
br = new BufferedReader(new FileReader(srcFile));
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null) break;
|
if (line == null) break;
|
||||||
if ( line.trim().startsWith( "secondary_segment_dir=" ) )
|
if (line.trim().startsWith("secondary_segment_dir=")) {
|
||||||
{
|
if (!"secondary_segment_dir=../segments2".equals(line)) {
|
||||||
if ( !"secondary_segment_dir=../segments2".equals( line ) )
|
|
||||||
{
|
|
||||||
ssd = line;
|
ssd = line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( line.trim().startsWith( "additional_maptool_dir=" ) )
|
if (line.trim().startsWith("additional_maptool_dir=")) {
|
||||||
{
|
|
||||||
amd = line;
|
amd = line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,16 +35,13 @@ public class ConfigMigration
|
||||||
|
|
||||||
List<String> lines = new ArrayList<String>();
|
List<String> lines = new ArrayList<String>();
|
||||||
br = new BufferedReader(new FileReader(dstFile));
|
br = new BufferedReader(new FileReader(dstFile));
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null) break;
|
if (line == null) break;
|
||||||
if ( ssd != null && line.trim().startsWith( "secondary_segment_dir=" ) )
|
if (ssd != null && line.trim().startsWith("secondary_segment_dir=")) {
|
||||||
{
|
|
||||||
line = ssd;
|
line = ssd;
|
||||||
}
|
}
|
||||||
if ( amd != null && line.trim().startsWith( "#additional_maptool_dir=" ) )
|
if (amd != null && line.trim().startsWith("#additional_maptool_dir=")) {
|
||||||
{
|
|
||||||
line = amd;
|
line = amd;
|
||||||
}
|
}
|
||||||
lines.add(line);
|
lines.add(line);
|
||||||
|
@ -60,54 +50,39 @@ public class ConfigMigration
|
||||||
br = null;
|
br = null;
|
||||||
|
|
||||||
bw = new BufferedWriter(new FileWriter(dstFile));
|
bw = new BufferedWriter(new FileWriter(dstFile));
|
||||||
for( String line: lines )
|
for (String line : lines) {
|
||||||
{
|
|
||||||
bw.write(line + "\n");
|
bw.write(line + "\n");
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) { /* ignore */ } finally {
|
||||||
catch (Exception e) { /* ignore */ }
|
if (br != null) {
|
||||||
finally
|
try {
|
||||||
{
|
|
||||||
if ( br != null )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
br.close();
|
br.close();
|
||||||
|
} catch (Exception ee) { /* ignore */ }
|
||||||
}
|
}
|
||||||
catch (Exception ee) { /* ignore */ }
|
if (bw != null) {
|
||||||
}
|
try {
|
||||||
if ( bw != null )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
bw.close();
|
bw.close();
|
||||||
}
|
} catch (Exception ee) { /* ignore */ }
|
||||||
catch (Exception ee) { /* ignore */ }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static File saveAdditionalMaptoolDir( File segmentDir, String value )
|
public static File saveAdditionalMaptoolDir(File segmentDir, String value) {
|
||||||
{
|
|
||||||
return saveStorageLocation(segmentDir, "additional_maptool_dir=", value);
|
return saveStorageLocation(segmentDir, "additional_maptool_dir=", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static File saveStorageLocation( File segmentDir, String tag, String value )
|
private static File saveStorageLocation(File segmentDir, String tag, String value) {
|
||||||
{
|
|
||||||
File res = null;
|
File res = null;
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
BufferedWriter bw = null;
|
BufferedWriter bw = null;
|
||||||
File configFile = new File(segmentDir, "storageconfig.txt");
|
File configFile = new File(segmentDir, "storageconfig.txt");
|
||||||
List<String> lines = new ArrayList<String>();
|
List<String> lines = new ArrayList<String>();
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
br = new BufferedReader(new FileReader(configFile));
|
br = new BufferedReader(new FileReader(configFile));
|
||||||
for ( ;; )
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null) break;
|
if (line == null) break;
|
||||||
if ( !line.trim().startsWith( tag ) )
|
if (!line.trim().startsWith(tag)) {
|
||||||
{
|
|
||||||
lines.add(line);
|
lines.add(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,29 +90,19 @@ public class ConfigMigration
|
||||||
br.close();
|
br.close();
|
||||||
br = null;
|
br = null;
|
||||||
bw = new BufferedWriter(new FileWriter(configFile));
|
bw = new BufferedWriter(new FileWriter(configFile));
|
||||||
for( String line : lines )
|
for (String line : lines) {
|
||||||
{
|
|
||||||
bw.write(line + "\r\n");
|
bw.write(line + "\r\n");
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) { /* ignore */ } finally {
|
||||||
catch (Exception e) { /* ignore */ }
|
if (br != null) {
|
||||||
finally
|
try {
|
||||||
{
|
|
||||||
if ( br != null )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
br.close();
|
br.close();
|
||||||
|
} catch (Exception ee) { /* ignore */ }
|
||||||
}
|
}
|
||||||
catch (Exception ee) { /* ignore */ }
|
if (bw != null) {
|
||||||
}
|
try {
|
||||||
if ( bw != null )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
bw.close();
|
bw.close();
|
||||||
}
|
} catch (Exception ee) { /* ignore */ }
|
||||||
catch (Exception ee) { /* ignore */ }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -11,14 +11,14 @@ import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
|
||||||
import btools.router.OsmNodeNamed;
|
import btools.router.OsmNodeNamed;
|
||||||
import btools.router.RoutingHelper;
|
import btools.router.RoutingHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read coordinates from a gpx-file
|
* Read coordinates from a gpx-file
|
||||||
*/
|
*/
|
||||||
public abstract class CoordinateReader
|
public abstract class CoordinateReader {
|
||||||
{
|
|
||||||
public List<OsmNodeNamed> waypoints;
|
public List<OsmNodeNamed> waypoints;
|
||||||
public List<OsmNodeNamed> nogopoints;
|
public List<OsmNodeNamed> nogopoints;
|
||||||
public String basedir;
|
public String basedir;
|
||||||
|
@ -35,8 +35,7 @@ public abstract class CoordinateReader
|
||||||
protected static String[] posnames
|
protected static String[] posnames
|
||||||
= new String[]{"from", "via1", "via2", "via3", "via4", "via5", "via6", "via7", "via8", "via9", "to"};
|
= new String[]{"from", "via1", "via2", "via3", "via4", "via5", "via6", "via7", "via8", "via9", "to"};
|
||||||
|
|
||||||
public CoordinateReader( String basedir )
|
public CoordinateReader(String basedir) {
|
||||||
{
|
|
||||||
this.basedir = basedir;
|
this.basedir = basedir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,27 +43,20 @@ public abstract class CoordinateReader
|
||||||
|
|
||||||
public abstract int getTurnInstructionMode();
|
public abstract int getTurnInstructionMode();
|
||||||
|
|
||||||
public void readAllPoints() throws Exception
|
public void readAllPoints() throws Exception {
|
||||||
{
|
|
||||||
allpointsMap = new TreeMap<String, Map<String, OsmNodeNamed>>();
|
allpointsMap = new TreeMap<String, Map<String, OsmNodeNamed>>();
|
||||||
readFromTo();
|
readFromTo();
|
||||||
allpoints = new ArrayList<OsmNodeNamed>();
|
allpoints = new ArrayList<OsmNodeNamed>();
|
||||||
Set<String> names = new HashSet<String>();
|
Set<String> names = new HashSet<String>();
|
||||||
for( String category : allpointsMap.keySet() )
|
for (String category : allpointsMap.keySet()) {
|
||||||
{
|
|
||||||
Map<String, OsmNodeNamed> cat = allpointsMap.get(category);
|
Map<String, OsmNodeNamed> cat = allpointsMap.get(category);
|
||||||
if ( cat.size() < 101 )
|
if (cat.size() < 101) {
|
||||||
{
|
for (OsmNodeNamed wp : cat.values()) {
|
||||||
for ( OsmNodeNamed wp : cat.values() )
|
if (names.add(wp.name)) {
|
||||||
{
|
|
||||||
if ( names.add( wp.name ) )
|
|
||||||
{
|
|
||||||
allpoints.add(wp);
|
allpoints.add(wp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
OsmNodeNamed nocatHint = new OsmNodeNamed();
|
OsmNodeNamed nocatHint = new OsmNodeNamed();
|
||||||
nocatHint.name = "<big category " + category + " supressed>";
|
nocatHint.name = "<big category " + category + " supressed>";
|
||||||
allpoints.add(nocatHint);
|
allpoints.add(nocatHint);
|
||||||
|
@ -75,23 +67,18 @@ public abstract class CoordinateReader
|
||||||
/*
|
/*
|
||||||
* read the from, to and via-positions from a gpx-file
|
* read the from, to and via-positions from a gpx-file
|
||||||
*/
|
*/
|
||||||
public void readFromTo() throws Exception
|
public void readFromTo() throws Exception {
|
||||||
{
|
|
||||||
pointmap = new HashMap<String, OsmNodeNamed>();
|
pointmap = new HashMap<String, OsmNodeNamed>();
|
||||||
waypoints = new ArrayList<OsmNodeNamed>();
|
waypoints = new ArrayList<OsmNodeNamed>();
|
||||||
nogopoints = new ArrayList<OsmNodeNamed>();
|
nogopoints = new ArrayList<OsmNodeNamed>();
|
||||||
readPointmap();
|
readPointmap();
|
||||||
boolean fromToMissing = false;
|
boolean fromToMissing = false;
|
||||||
for( int i=0; i<posnames.length; i++ )
|
for (int i = 0; i < posnames.length; i++) {
|
||||||
{
|
|
||||||
String name = posnames[i];
|
String name = posnames[i];
|
||||||
OsmNodeNamed n = pointmap.get(name);
|
OsmNodeNamed n = pointmap.get(name);
|
||||||
if ( n != null )
|
if (n != null) {
|
||||||
{
|
|
||||||
waypoints.add(n);
|
waypoints.add(n);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
if ("from".equals(name)) fromToMissing = true;
|
if ("from".equals(name)) fromToMissing = true;
|
||||||
if ("to".equals(name)) fromToMissing = true;
|
if ("to".equals(name)) fromToMissing = true;
|
||||||
}
|
}
|
||||||
|
@ -99,46 +86,35 @@ public abstract class CoordinateReader
|
||||||
if (fromToMissing) waypoints.clear();
|
if (fromToMissing) waypoints.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void checkAddPoint( String category, OsmNodeNamed n )
|
protected void checkAddPoint(String category, OsmNodeNamed n) {
|
||||||
{
|
if (allpointsMap != null) {
|
||||||
if ( allpointsMap != null )
|
|
||||||
{
|
|
||||||
if (category == null) category = "";
|
if (category == null) category = "";
|
||||||
Map<String, OsmNodeNamed> cat = allpointsMap.get(category);
|
Map<String, OsmNodeNamed> cat = allpointsMap.get(category);
|
||||||
if ( cat == null )
|
if (cat == null) {
|
||||||
{
|
|
||||||
cat = new TreeMap<String, OsmNodeNamed>();
|
cat = new TreeMap<String, OsmNodeNamed>();
|
||||||
allpointsMap.put(category, cat);
|
allpointsMap.put(category, cat);
|
||||||
}
|
}
|
||||||
if ( cat.size() < 101 )
|
if (cat.size() < 101) {
|
||||||
{
|
|
||||||
cat.put(n.name, n);
|
cat.put(n.name, n);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isKnown = false;
|
boolean isKnown = false;
|
||||||
for( int i=0; i<posnames.length; i++ )
|
for (int i = 0; i < posnames.length; i++) {
|
||||||
{
|
if (posnames[i].equals(n.name)) {
|
||||||
if ( posnames[i].equals( n.name ) )
|
|
||||||
{
|
|
||||||
isKnown = true;
|
isKnown = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isKnown )
|
if (isKnown) {
|
||||||
{
|
if (pointmap.put(n.name, n) != null) {
|
||||||
if ( pointmap.put( n.name, n ) != null )
|
if (!nogosOnly) {
|
||||||
{
|
|
||||||
if ( !nogosOnly )
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("multiple " + n.name + "-positions!");
|
throw new IllegalArgumentException("multiple " + n.name + "-positions!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if (n.name != null && n.name.startsWith("nogo")) {
|
||||||
else if ( n.name != null && n.name.startsWith( "nogo" ) )
|
|
||||||
{
|
|
||||||
n.isNogo = true;
|
n.isNogo = true;
|
||||||
n.nogoWeight = Double.NaN;
|
n.nogoWeight = Double.NaN;
|
||||||
nogopoints.add(n);
|
nogopoints.add(n);
|
||||||
|
@ -149,13 +125,11 @@ public abstract class CoordinateReader
|
||||||
protected abstract void readPointmap() throws Exception;
|
protected abstract void readPointmap() throws Exception;
|
||||||
|
|
||||||
|
|
||||||
public static CoordinateReader obtainValidReader( String basedir, File segmentDir, boolean canAccessSdCard ) throws Exception
|
public static CoordinateReader obtainValidReader(String basedir, File segmentDir, boolean canAccessSdCard) throws Exception {
|
||||||
{
|
|
||||||
return obtainValidReader(basedir, segmentDir, canAccessSdCard, false);
|
return obtainValidReader(basedir, segmentDir, canAccessSdCard, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CoordinateReader obtainValidReader( String basedir, File segmentDir, boolean canAccessSdCard, boolean nogosOnly ) throws Exception
|
public static CoordinateReader obtainValidReader(String basedir, File segmentDir, boolean canAccessSdCard, boolean nogosOnly) throws Exception {
|
||||||
{
|
|
||||||
CoordinateReader cor = null;
|
CoordinateReader cor = null;
|
||||||
ArrayList<CoordinateReader> rl = new ArrayList<CoordinateReader>();
|
ArrayList<CoordinateReader> rl = new ArrayList<CoordinateReader>();
|
||||||
|
|
||||||
|
@ -210,8 +184,7 @@ public abstract class CoordinateReader
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( cor == null )
|
if (cor == null) {
|
||||||
{
|
|
||||||
cor = new CoordinateReaderInternal(basedir);
|
cor = new CoordinateReaderInternal(basedir);
|
||||||
}
|
}
|
||||||
cor.nogosOnly = nogosOnly;
|
cor.nogosOnly = nogosOnly;
|
||||||
|
|
|
@ -21,26 +21,20 @@ import btools.router.OsmNogoPolygon;
|
||||||
/**
|
/**
|
||||||
* Read coordinates from a gpx-file
|
* Read coordinates from a gpx-file
|
||||||
*/
|
*/
|
||||||
public class CoordinateReaderInternal extends CoordinateReader
|
public class CoordinateReaderInternal extends CoordinateReader {
|
||||||
{
|
|
||||||
private String internalDir;
|
private String internalDir;
|
||||||
|
|
||||||
public CoordinateReaderInternal(String basedir )
|
public CoordinateReaderInternal(String basedir) {
|
||||||
{
|
|
||||||
this(basedir, false);
|
this(basedir, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CoordinateReaderInternal(String basedir, boolean shortPath )
|
public CoordinateReaderInternal(String basedir, boolean shortPath) {
|
||||||
{
|
|
||||||
super(basedir);
|
super(basedir);
|
||||||
if ( shortPath )
|
if (shortPath) {
|
||||||
{
|
|
||||||
internalDir = basedir;
|
internalDir = basedir;
|
||||||
tracksdir = "/tracks";
|
tracksdir = "/tracks";
|
||||||
rootdir = "";
|
rootdir = "";
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
internalDir = basedir + "/brouter/import";
|
internalDir = basedir + "/brouter/import";
|
||||||
tracksdir = "/brouter/import/tracks";
|
tracksdir = "/brouter/import/tracks";
|
||||||
rootdir = "/brouter/import";
|
rootdir = "/brouter/import";
|
||||||
|
@ -48,16 +42,14 @@ public class CoordinateReaderInternal extends CoordinateReader
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getTimeStamp() throws Exception
|
public long getTimeStamp() throws Exception {
|
||||||
{
|
|
||||||
long t1 = new File(internalDir + "/favourites_bak.gpx").lastModified();
|
long t1 = new File(internalDir + "/favourites_bak.gpx").lastModified();
|
||||||
long t2 = new File(internalDir + "/favourites.gpx").lastModified();
|
long t2 = new File(internalDir + "/favourites.gpx").lastModified();
|
||||||
return t1 > t2 ? t1 : t2;
|
return t1 > t2 ? t1 : t2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTurnInstructionMode()
|
public int getTurnInstructionMode() {
|
||||||
{
|
|
||||||
return 4; // comment style
|
return 4; // comment style
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,23 +58,18 @@ public class CoordinateReaderInternal extends CoordinateReader
|
||||||
* (with hardcoded name for now)
|
* (with hardcoded name for now)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void readPointmap() throws Exception
|
public void readPointmap() throws Exception {
|
||||||
{
|
|
||||||
if (!_readPointmap(internalDir + "/favourites_bak.gpx")) {
|
if (!_readPointmap(internalDir + "/favourites_bak.gpx")) {
|
||||||
_readPointmap(internalDir + "/favourites.gpx");
|
_readPointmap(internalDir + "/favourites.gpx");
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
_readNogoLines(basedir + tracksdir);
|
_readNogoLines(basedir + tracksdir);
|
||||||
}
|
} catch (IOException ioe) {
|
||||||
catch( IOException ioe )
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean _readPointmap( String filename ) throws Exception
|
private boolean _readPointmap(String filename) throws Exception {
|
||||||
{
|
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
try {
|
try {
|
||||||
br = new BufferedReader(
|
br = new BufferedReader(
|
||||||
|
@ -94,15 +81,13 @@ public class CoordinateReaderInternal extends CoordinateReader
|
||||||
}
|
}
|
||||||
OsmNodeNamed n = null;
|
OsmNodeNamed n = null;
|
||||||
|
|
||||||
for(;;)
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null) break;
|
if (line == null) break;
|
||||||
|
|
||||||
int idx0 = line.indexOf(" lat=\"");
|
int idx0 = line.indexOf(" lat=\"");
|
||||||
int idx10 = line.indexOf("<name>");
|
int idx10 = line.indexOf("<name>");
|
||||||
if ( idx0 >= 0 )
|
if (idx0 >= 0) {
|
||||||
{
|
|
||||||
n = new OsmNodeNamed();
|
n = new OsmNodeNamed();
|
||||||
idx0 += 6;
|
idx0 += 6;
|
||||||
int idx1 = line.indexOf('"', idx0);
|
int idx1 = line.indexOf('"', idx0);
|
||||||
|
@ -114,12 +99,10 @@ public class CoordinateReaderInternal extends CoordinateReader
|
||||||
n.ilon = (int) ((Double.parseDouble(line.substring(idx2, idx3)) + 180.) * 1000000. + 0.5);
|
n.ilon = (int) ((Double.parseDouble(line.substring(idx2, idx3)) + 180.) * 1000000. + 0.5);
|
||||||
if (idx3 < 0) continue;
|
if (idx3 < 0) continue;
|
||||||
}
|
}
|
||||||
if ( n != null && idx10 >= 0 )
|
if (n != null && idx10 >= 0) {
|
||||||
{
|
|
||||||
idx10 += 6;
|
idx10 += 6;
|
||||||
int idx11 = line.indexOf("</name>", idx10);
|
int idx11 = line.indexOf("</name>", idx10);
|
||||||
if ( idx11 >= 0 )
|
if (idx11 >= 0) {
|
||||||
{
|
|
||||||
n.name = line.substring(idx10, idx11).trim();
|
n.name = line.substring(idx10, idx11).trim();
|
||||||
checkAddPoint("(one-for-all)", n);
|
checkAddPoint("(one-for-all)", n);
|
||||||
}
|
}
|
||||||
|
@ -129,32 +112,24 @@ public class CoordinateReaderInternal extends CoordinateReader
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readNogoLines( String dirname ) throws IOException
|
private void _readNogoLines(String dirname) throws IOException {
|
||||||
{
|
|
||||||
|
|
||||||
File dir = new File(dirname);
|
File dir = new File(dirname);
|
||||||
|
|
||||||
if (dir.exists() && dir.isDirectory())
|
if (dir.exists() && dir.isDirectory()) {
|
||||||
{
|
for (final File file : dir.listFiles()) {
|
||||||
for (final File file : dir.listFiles())
|
|
||||||
{
|
|
||||||
final String name = file.getName();
|
final String name = file.getName();
|
||||||
if (name.startsWith("nogo") && name.endsWith(".gpx"))
|
if (name.startsWith("nogo") && name.endsWith(".gpx")) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
_readNogoLine(file);
|
_readNogoLine(file);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readNogoLine( File file ) throws Exception
|
private void _readNogoLine(File file) throws Exception {
|
||||||
{
|
|
||||||
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
||||||
factory.setNamespaceAware(false);
|
factory.setNamespaceAware(false);
|
||||||
XmlPullParser xpp = factory.newPullParser();
|
XmlPullParser xpp = factory.newPullParser();
|
||||||
|
|
|
@ -4,23 +4,21 @@ import java.io.File;
|
||||||
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
import btools.router.OsmNodeNamed;
|
import btools.router.OsmNodeNamed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read coordinates from a gpx-file
|
* Read coordinates from a gpx-file
|
||||||
*/
|
*/
|
||||||
public class CoordinateReaderLocus extends CoordinateReader
|
public class CoordinateReaderLocus extends CoordinateReader {
|
||||||
{
|
public CoordinateReaderLocus(String basedir) {
|
||||||
public CoordinateReaderLocus( String basedir )
|
|
||||||
{
|
|
||||||
super(basedir);
|
super(basedir);
|
||||||
tracksdir = "/Locus/mapItems";
|
tracksdir = "/Locus/mapItems";
|
||||||
rootdir = "/Locus";
|
rootdir = "/Locus";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getTimeStamp() throws Exception
|
public long getTimeStamp() throws Exception {
|
||||||
{
|
|
||||||
File f = new File(basedir + "/Locus/data/database/waypoints.db");
|
File f = new File(basedir + "/Locus/data/database/waypoints.db");
|
||||||
long t1 = f.lastModified();
|
long t1 = f.lastModified();
|
||||||
// Android 10 delivers file size but can't read it
|
// Android 10 delivers file size but can't read it
|
||||||
|
@ -29,8 +27,7 @@ public class CoordinateReaderLocus extends CoordinateReader
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTurnInstructionMode()
|
public int getTurnInstructionMode() {
|
||||||
{
|
|
||||||
return 2; // locus style
|
return 2; // locus style
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,13 +36,11 @@ public class CoordinateReaderLocus extends CoordinateReader
|
||||||
* (with hardcoded name for now)
|
* (with hardcoded name for now)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void readPointmap() throws Exception
|
public void readPointmap() throws Exception {
|
||||||
{
|
|
||||||
_readPointmap(basedir + "/Locus/data/database/waypoints.db");
|
_readPointmap(basedir + "/Locus/data/database/waypoints.db");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readPointmap( String filename ) throws Exception
|
private void _readPointmap(String filename) throws Exception {
|
||||||
{
|
|
||||||
SQLiteDatabase myDataBase = null;
|
SQLiteDatabase myDataBase = null;
|
||||||
try {
|
try {
|
||||||
myDataBase = SQLiteDatabase.openDatabase(filename, null, SQLiteDatabase.OPEN_READONLY);
|
myDataBase = SQLiteDatabase.openDatabase(filename, null, SQLiteDatabase.OPEN_READONLY);
|
||||||
|
@ -59,8 +54,7 @@ public class CoordinateReaderLocus extends CoordinateReader
|
||||||
c.close();
|
c.close();
|
||||||
c = myDataBase.rawQuery("SELECT c.name, w.name, w.longitude, w.latitude FROM waypoints w, groups c where w.parent_id = c._id;", null);
|
c = myDataBase.rawQuery("SELECT c.name, w.name, w.longitude, w.latitude FROM waypoints w, groups c where w.parent_id = c._id;", null);
|
||||||
}
|
}
|
||||||
while (c.moveToNext())
|
while (c.moveToNext()) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = new OsmNodeNamed();
|
OsmNodeNamed n = new OsmNodeNamed();
|
||||||
String category = c.getString(0);
|
String category = c.getString(0);
|
||||||
n.name = c.getString(1);
|
n.name = c.getString(1);
|
||||||
|
|
|
@ -4,23 +4,21 @@ import java.io.File;
|
||||||
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
import btools.router.OsmNodeNamed;
|
import btools.router.OsmNodeNamed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read coordinates from a gpx-file
|
* Read coordinates from a gpx-file
|
||||||
*/
|
*/
|
||||||
public class CoordinateReaderOrux extends CoordinateReader
|
public class CoordinateReaderOrux extends CoordinateReader {
|
||||||
{
|
public CoordinateReaderOrux(String basedir) {
|
||||||
public CoordinateReaderOrux( String basedir )
|
|
||||||
{
|
|
||||||
super(basedir);
|
super(basedir);
|
||||||
tracksdir = "/oruxmaps/tracklogs";
|
tracksdir = "/oruxmaps/tracklogs";
|
||||||
rootdir = "/oruxmaps";
|
rootdir = "/oruxmaps";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getTimeStamp() throws Exception
|
public long getTimeStamp() throws Exception {
|
||||||
{
|
|
||||||
File f = new File(basedir + "/oruxmaps/tracklogs/oruxmapstracks.db");
|
File f = new File(basedir + "/oruxmaps/tracklogs/oruxmapstracks.db");
|
||||||
long t1 = f.lastModified();
|
long t1 = f.lastModified();
|
||||||
// Android 10 delivers file size but can't read it
|
// Android 10 delivers file size but can't read it
|
||||||
|
@ -29,8 +27,7 @@ public class CoordinateReaderOrux extends CoordinateReader
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTurnInstructionMode()
|
public int getTurnInstructionMode() {
|
||||||
{
|
|
||||||
return 0; // none
|
return 0; // none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,13 +36,11 @@ public class CoordinateReaderOrux extends CoordinateReader
|
||||||
* (with hardcoded name for now)
|
* (with hardcoded name for now)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void readPointmap() throws Exception
|
public void readPointmap() throws Exception {
|
||||||
{
|
|
||||||
_readPointmap(basedir + "/oruxmaps/tracklogs/oruxmapstracks.db");
|
_readPointmap(basedir + "/oruxmaps/tracklogs/oruxmapstracks.db");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readPointmap( String filename ) throws Exception
|
private void _readPointmap(String filename) throws Exception {
|
||||||
{
|
|
||||||
SQLiteDatabase myDataBase = null;
|
SQLiteDatabase myDataBase = null;
|
||||||
try {
|
try {
|
||||||
myDataBase = SQLiteDatabase.openDatabase(filename, null, SQLiteDatabase.OPEN_READONLY);
|
myDataBase = SQLiteDatabase.openDatabase(filename, null, SQLiteDatabase.OPEN_READONLY);
|
||||||
|
@ -54,8 +49,7 @@ public class CoordinateReaderOrux extends CoordinateReader
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Cursor c = myDataBase.rawQuery("SELECT poiname, poilon, poilat, poifolder FROM pois", null);
|
Cursor c = myDataBase.rawQuery("SELECT poiname, poilon, poilat, poifolder FROM pois", null);
|
||||||
while (c.moveToNext())
|
while (c.moveToNext()) {
|
||||||
{
|
|
||||||
OsmNodeNamed n = new OsmNodeNamed();
|
OsmNodeNamed n = new OsmNodeNamed();
|
||||||
n.name = c.getString(0);
|
n.name = c.getString(0);
|
||||||
n.ilon = (int) ((c.getDouble(1) + 180.) * 1000000. + 0.5);
|
n.ilon = (int) ((c.getDouble(1) + 180.) * 1000000. + 0.5);
|
||||||
|
|
|
@ -16,26 +16,20 @@ import btools.router.OsmNogoPolygon;
|
||||||
/**
|
/**
|
||||||
* Read coordinates from a gpx-file
|
* Read coordinates from a gpx-file
|
||||||
*/
|
*/
|
||||||
public class CoordinateReaderOsmAnd extends CoordinateReader
|
public class CoordinateReaderOsmAnd extends CoordinateReader {
|
||||||
{
|
|
||||||
private String osmandDir;
|
private String osmandDir;
|
||||||
|
|
||||||
public CoordinateReaderOsmAnd( String basedir )
|
public CoordinateReaderOsmAnd(String basedir) {
|
||||||
{
|
|
||||||
this(basedir, false);
|
this(basedir, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CoordinateReaderOsmAnd( String basedir, boolean shortPath )
|
public CoordinateReaderOsmAnd(String basedir, boolean shortPath) {
|
||||||
{
|
|
||||||
super(basedir);
|
super(basedir);
|
||||||
if ( shortPath )
|
if (shortPath) {
|
||||||
{
|
|
||||||
osmandDir = basedir;
|
osmandDir = basedir;
|
||||||
tracksdir = "/tracks";
|
tracksdir = "/tracks";
|
||||||
rootdir = "";
|
rootdir = "";
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
osmandDir = basedir + "/osmand";
|
osmandDir = basedir + "/osmand";
|
||||||
tracksdir = "/osmand/tracks";
|
tracksdir = "/osmand/tracks";
|
||||||
rootdir = "/osmand";
|
rootdir = "/osmand";
|
||||||
|
@ -43,8 +37,7 @@ public class CoordinateReaderOsmAnd extends CoordinateReader
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getTimeStamp() throws Exception
|
public long getTimeStamp() throws Exception {
|
||||||
{
|
|
||||||
File f1 = new File(osmandDir + "/favourites_bak.gpx");
|
File f1 = new File(osmandDir + "/favourites_bak.gpx");
|
||||||
File f2 = new File(osmandDir + "/favourites.gpx");
|
File f2 = new File(osmandDir + "/favourites.gpx");
|
||||||
long t1 = f1.canRead() ? f1.lastModified() : 0L;
|
long t1 = f1.canRead() ? f1.lastModified() : 0L;
|
||||||
|
@ -53,8 +46,7 @@ public class CoordinateReaderOsmAnd extends CoordinateReader
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTurnInstructionMode()
|
public int getTurnInstructionMode() {
|
||||||
{
|
|
||||||
return 3; // osmand style
|
return 3; // osmand style
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,41 +55,31 @@ public class CoordinateReaderOsmAnd extends CoordinateReader
|
||||||
* (with hardcoded name for now)
|
* (with hardcoded name for now)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void readPointmap() throws Exception
|
public void readPointmap() throws Exception {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
_readPointmap(osmandDir + "/favourites_bak.gpx");
|
_readPointmap(osmandDir + "/favourites_bak.gpx");
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
_readPointmap(osmandDir + "/favourites.gpx");
|
_readPointmap(osmandDir + "/favourites.gpx");
|
||||||
}
|
}
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
_readNogoLines(basedir + tracksdir);
|
_readNogoLines(basedir + tracksdir);
|
||||||
}
|
} catch (IOException ioe) {
|
||||||
catch( IOException ioe )
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readPointmap( String filename ) throws Exception
|
private void _readPointmap(String filename) throws Exception {
|
||||||
{
|
|
||||||
BufferedReader br = new BufferedReader(
|
BufferedReader br = new BufferedReader(
|
||||||
new InputStreamReader(
|
new InputStreamReader(
|
||||||
new FileInputStream(filename)));
|
new FileInputStream(filename)));
|
||||||
OsmNodeNamed n = null;
|
OsmNodeNamed n = null;
|
||||||
|
|
||||||
for(;;)
|
for (; ; ) {
|
||||||
{
|
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line == null) break;
|
if (line == null) break;
|
||||||
|
|
||||||
int idx0 = line.indexOf("<wpt lat=\"");
|
int idx0 = line.indexOf("<wpt lat=\"");
|
||||||
int idx10 = line.indexOf("<name>");
|
int idx10 = line.indexOf("<name>");
|
||||||
if ( idx0 >= 0 )
|
if (idx0 >= 0) {
|
||||||
{
|
|
||||||
n = new OsmNodeNamed();
|
n = new OsmNodeNamed();
|
||||||
idx0 += 10;
|
idx0 += 10;
|
||||||
int idx1 = line.indexOf('"', idx0);
|
int idx1 = line.indexOf('"', idx0);
|
||||||
|
@ -109,12 +91,10 @@ public class CoordinateReaderOsmAnd extends CoordinateReader
|
||||||
n.ilon = (int) ((Double.parseDouble(line.substring(idx2, idx3)) + 180.) * 1000000. + 0.5);
|
n.ilon = (int) ((Double.parseDouble(line.substring(idx2, idx3)) + 180.) * 1000000. + 0.5);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ( n != null && idx10 >= 0 )
|
if (n != null && idx10 >= 0) {
|
||||||
{
|
|
||||||
idx10 += 6;
|
idx10 += 6;
|
||||||
int idx11 = line.indexOf("</name>", idx10);
|
int idx11 = line.indexOf("</name>", idx10);
|
||||||
if ( idx11 >= 0 )
|
if (idx11 >= 0) {
|
||||||
{
|
|
||||||
n.name = line.substring(idx10, idx11).trim();
|
n.name = line.substring(idx10, idx11).trim();
|
||||||
checkAddPoint("(one-for-all)", n);
|
checkAddPoint("(one-for-all)", n);
|
||||||
}
|
}
|
||||||
|
@ -123,32 +103,24 @@ public class CoordinateReaderOsmAnd extends CoordinateReader
|
||||||
br.close();
|
br.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readNogoLines( String dirname ) throws IOException
|
private void _readNogoLines(String dirname) throws IOException {
|
||||||
{
|
|
||||||
|
|
||||||
File dir = new File(dirname);
|
File dir = new File(dirname);
|
||||||
|
|
||||||
if (dir.exists() && dir.isDirectory())
|
if (dir.exists() && dir.isDirectory()) {
|
||||||
{
|
for (final File file : dir.listFiles()) {
|
||||||
for (final File file : dir.listFiles())
|
|
||||||
{
|
|
||||||
final String name = file.getName();
|
final String name = file.getName();
|
||||||
if (name.startsWith("nogo") && name.endsWith(".gpx"))
|
if (name.startsWith("nogo") && name.endsWith(".gpx")) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
_readNogoLine(file);
|
_readNogoLine(file);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _readNogoLine( File file ) throws Exception
|
private void _readNogoLine(File file) throws Exception {
|
||||||
{
|
|
||||||
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
||||||
factory.setNamespaceAware(false);
|
factory.setNamespaceAware(false);
|
||||||
XmlPullParser xpp = factory.newPullParser();
|
XmlPullParser xpp = factory.newPullParser();
|
||||||
|
@ -176,8 +148,7 @@ public class CoordinateReaderOsmAnd extends CoordinateReader
|
||||||
nogo.calcBoundingCircle();
|
nogo.calcBoundingCircle();
|
||||||
final String name = file.getName();
|
final String name = file.getName();
|
||||||
nogo.name = name.substring(0, name.length() - 4);
|
nogo.name = name.substring(0, name.length() - 4);
|
||||||
if (numSeg > 0)
|
if (numSeg > 0) {
|
||||||
{
|
|
||||||
nogo.name += Integer.toString(numSeg + 1);
|
nogo.name += Integer.toString(numSeg + 1);
|
||||||
}
|
}
|
||||||
numSeg++;
|
numSeg++;
|
||||||
|
|
|
@ -81,13 +81,11 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
mServiceHandler = new ServiceHandler(mServiceLooper);
|
mServiceHandler = new ServiceHandler(mServiceLooper);
|
||||||
|
|
||||||
availableSize = -1;
|
availableSize = -1;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
availableSize = BInstallerActivity.getAvailableSpace(baseDir);
|
availableSize = BInstallerActivity.getAvailableSpace(baseDir);
|
||||||
//StatFs stat = new StatFs(baseDir);
|
//StatFs stat = new StatFs(baseDir);
|
||||||
//availableSize = (long)stat.getAvailableBlocksLong()*stat.getBlockSizeLong();
|
//availableSize = (long)stat.getAvailableBlocksLong()*stat.getBlockSizeLong();
|
||||||
}
|
} catch (Exception e) { /* ignore */ }
|
||||||
catch (Exception e) { /* ignore */ }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,32 +164,28 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void updateProgress( String progress )
|
public void updateProgress(String progress) {
|
||||||
{
|
if (!newDownloadAction.equals(progress)) {
|
||||||
if ( !newDownloadAction.equals( progress ) )
|
|
||||||
{
|
|
||||||
if (DEBUG) Log.d("BR", "up " + progress);
|
if (DEBUG) Log.d("BR", "up " + progress);
|
||||||
Intent intent = new Intent(BInstallerActivity.DOWNLOAD_ACTION);
|
Intent intent = new Intent(BInstallerActivity.DOWNLOAD_ACTION);
|
||||||
intent.putExtra("txt", progress);
|
intent.putExtra("txt", progress);
|
||||||
intent.putExtra("ready", bIsDownloading);
|
intent.putExtra("ready", bIsDownloading);
|
||||||
sendBroadcast(intent);;
|
sendBroadcast(intent);
|
||||||
|
;
|
||||||
newDownloadAction = progress;
|
newDownloadAction = progress;
|
||||||
mNotificationHelper.progressUpdate(newDownloadAction);
|
mNotificationHelper.progressUpdate(newDownloadAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String download(int counter, int size, String surl)
|
private String download(int counter, int size, String surl) {
|
||||||
{
|
|
||||||
InputStream input = null;
|
InputStream input = null;
|
||||||
OutputStream output = null;
|
OutputStream output = null;
|
||||||
HttpURLConnection connection = null;
|
HttpURLConnection connection = null;
|
||||||
File fname = null;
|
File fname = null;
|
||||||
File tmp_file = null;
|
File tmp_file = null;
|
||||||
try
|
try {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
TrafficStats.setThreadStatsTag(1);
|
TrafficStats.setThreadStatsTag(1);
|
||||||
|
|
||||||
int slidx = surl.lastIndexOf("segments4/");
|
int slidx = surl.lastIndexOf("segments4/");
|
||||||
|
@ -202,8 +196,7 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
boolean delta = true;
|
boolean delta = true;
|
||||||
|
|
||||||
// if (!targetFile.getParentFile().exists()) targetFile.getParentFile().mkdirs();
|
// if (!targetFile.getParentFile().exists()) targetFile.getParentFile().mkdirs();
|
||||||
if ( fname.exists() )
|
if (fname.exists()) {
|
||||||
{
|
|
||||||
updateProgress("Calculating local checksum..");
|
updateProgress("Calculating local checksum..");
|
||||||
|
|
||||||
// first check for a delta file
|
// first check for a delta file
|
||||||
|
@ -217,16 +210,14 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
connection.connect();
|
connection.connect();
|
||||||
|
|
||||||
// 404 kind of expected here, means there's no delta file
|
// 404 kind of expected here, means there's no delta file
|
||||||
if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND )
|
if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
|
||||||
{
|
|
||||||
connection = null;
|
connection = null;
|
||||||
} else {
|
} else {
|
||||||
updateProgress("Connecting.." + surlDelta);
|
updateProgress("Connecting.." + surlDelta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( connection == null )
|
if (connection == null) {
|
||||||
{
|
|
||||||
updateProgress("Connecting.." + name);
|
updateProgress("Connecting.." + name);
|
||||||
|
|
||||||
delta = false;
|
delta = false;
|
||||||
|
@ -274,9 +265,7 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
{
|
{
|
||||||
int pct = (int) (total * 100 / fileLength);
|
int pct = (int) (total * 100 / fileLength);
|
||||||
updateProgress("Progress " + counter + "/" + size + " .. " + pct + "%");
|
updateProgress("Progress " + counter + "/" + size + " .. " + pct + "%");
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
updateProgress("Progress (unnown size)");
|
updateProgress("Progress (unnown size)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,28 +273,27 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
|
|
||||||
// enforce < 2 Mbit/s
|
// enforce < 2 Mbit/s
|
||||||
long dt = t0 + total / 524 - System.currentTimeMillis();
|
long dt = t0 + total / 524 - System.currentTimeMillis();
|
||||||
if ( dt > 0 )
|
if (dt > 0) {
|
||||||
{
|
try {
|
||||||
try { Thread.sleep( dt ); } catch( InterruptedException ie ) {}
|
Thread.sleep(dt);
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
output.close();
|
output.close();
|
||||||
output = null;
|
output = null;
|
||||||
|
|
||||||
if ( delta )
|
if (delta) {
|
||||||
{
|
|
||||||
updateProgress("Applying delta..");
|
updateProgress("Applying delta..");
|
||||||
File diffFile = tmp_file;
|
File diffFile = tmp_file;
|
||||||
tmp_file = new File(fname + "_tmp");
|
tmp_file = new File(fname + "_tmp");
|
||||||
Rd5DiffTool.recoverFromDelta(fname, diffFile, tmp_file, this);
|
Rd5DiffTool.recoverFromDelta(fname, diffFile, tmp_file, this);
|
||||||
diffFile.delete();
|
diffFile.delete();
|
||||||
}
|
}
|
||||||
if (isCanceled())
|
if (isCanceled()) {
|
||||||
{
|
|
||||||
return "Canceled!";
|
return "Canceled!";
|
||||||
}
|
}
|
||||||
if ( tmp_file != null )
|
if (tmp_file != null) {
|
||||||
{
|
|
||||||
updateProgress("Verifying integrity..");
|
updateProgress("Verifying integrity..");
|
||||||
String check_result = PhysicalFile.checkFileIntegrity(tmp_file);
|
String check_result = PhysicalFile.checkFileIntegrity(tmp_file);
|
||||||
if (check_result != null) {
|
if (check_result != null) {
|
||||||
|
@ -315,8 +303,7 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
return check_result;
|
return check_result;
|
||||||
}
|
}
|
||||||
if (fname.exists()) fname.delete();
|
if (fname.exists()) fname.delete();
|
||||||
if ( !tmp_file.renameTo( fname ) )
|
if (!tmp_file.renameTo(fname)) {
|
||||||
{
|
|
||||||
return "Could not rename to " + fname.getAbsolutePath();
|
return "Could not rename to " + fname.getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,9 +324,7 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
if (connection != null)
|
if (connection != null)
|
||||||
connection.disconnect();
|
connection.disconnect();
|
||||||
}
|
}
|
||||||
}
|
} finally {
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (tmp_file != null) tmp_file.delete(); // just to be sure
|
if (tmp_file != null) tmp_file.delete(); // just to be sure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -391,10 +376,8 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
File tmp_file = null;
|
File tmp_file = null;
|
||||||
File targetFile = f;
|
File targetFile = f;
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
TrafficStats.setThreadStatsTag(1);
|
TrafficStats.setThreadStatsTag(1);
|
||||||
|
|
||||||
URL url = new URL(surl);
|
URL url = new URL(surl);
|
||||||
|
@ -463,16 +446,13 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
output = null;
|
output = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isCanceled())
|
if (isCanceled()) {
|
||||||
{
|
|
||||||
return "Canceled!";
|
return "Canceled!";
|
||||||
}
|
}
|
||||||
if ( tmp_file != null )
|
if (tmp_file != null) {
|
||||||
{
|
|
||||||
f.delete();
|
f.delete();
|
||||||
|
|
||||||
if ( !tmp_file.renameTo( f ) )
|
if (!tmp_file.renameTo(f)) {
|
||||||
{
|
|
||||||
return "Could not rename to " + f.getName();
|
return "Could not rename to " + f.getName();
|
||||||
}
|
}
|
||||||
if (DEBUG) Log.d("BR", "update " + f.getName());
|
if (DEBUG) Log.d("BR", "update " + f.getName());
|
||||||
|
@ -493,9 +473,7 @@ public class DownloadService extends Service implements ProgressListener {
|
||||||
connection.disconnect();
|
connection.disconnect();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
} finally {
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (tmp_file != null) tmp_file.delete(); // just to be sure
|
if (tmp_file != null) tmp_file.delete(); // just to be sure
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,7 @@ public class NotificationHelper {
|
||||||
private PendingIntent mContentIntent;
|
private PendingIntent mContentIntent;
|
||||||
private CharSequence mContentTitle;
|
private CharSequence mContentTitle;
|
||||||
|
|
||||||
public NotificationHelper(Context context)
|
public NotificationHelper(Context context) {
|
||||||
{
|
|
||||||
if (DEBUG) Log.d("NH", "init ");
|
if (DEBUG) Log.d("NH", "init ");
|
||||||
mContext = context;
|
mContext = context;
|
||||||
createNotificationChannels();
|
createNotificationChannels();
|
||||||
|
|
|
@ -7,41 +7,35 @@ import java.util.TreeSet;
|
||||||
/**
|
/**
|
||||||
* Decsription of a service config
|
* Decsription of a service config
|
||||||
*/
|
*/
|
||||||
public class ServiceModeConfig
|
public class ServiceModeConfig {
|
||||||
{
|
|
||||||
public String mode;
|
public String mode;
|
||||||
public String profile;
|
public String profile;
|
||||||
public TreeSet<String> nogoVetos;
|
public TreeSet<String> nogoVetos;
|
||||||
|
|
||||||
public ServiceModeConfig( String line )
|
public ServiceModeConfig(String line) {
|
||||||
{
|
|
||||||
StringTokenizer tk = new StringTokenizer(line);
|
StringTokenizer tk = new StringTokenizer(line);
|
||||||
mode = tk.nextToken();
|
mode = tk.nextToken();
|
||||||
profile = tk.nextToken();
|
profile = tk.nextToken();
|
||||||
nogoVetos = new TreeSet<String>();
|
nogoVetos = new TreeSet<String>();
|
||||||
while( tk.hasMoreTokens() )
|
while (tk.hasMoreTokens()) {
|
||||||
{
|
|
||||||
nogoVetos.add(tk.nextToken());
|
nogoVetos.add(tk.nextToken());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServiceModeConfig( String mode, String profile )
|
public ServiceModeConfig(String mode, String profile) {
|
||||||
{
|
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
this.profile = profile;
|
this.profile = profile;
|
||||||
nogoVetos = new TreeSet<String>();
|
nogoVetos = new TreeSet<String>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toLine()
|
public String toLine() {
|
||||||
{
|
|
||||||
StringBuilder sb = new StringBuilder(100);
|
StringBuilder sb = new StringBuilder(100);
|
||||||
sb.append(mode).append(' ').append(profile);
|
sb.append(mode).append(' ').append(profile);
|
||||||
for (String veto : nogoVetos) sb.append(' ').append(veto);
|
for (String veto : nogoVetos) sb.append(' ').append(veto);
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
|
||||||
StringBuilder sb = new StringBuilder(100);
|
StringBuilder sb = new StringBuilder(100);
|
||||||
sb.append(mode).append("->").append(profile);
|
sb.append(mode).append("->").append(profile);
|
||||||
sb.append(" [" + nogoVetos.size() + "]");
|
sb.append(" [" + nogoVetos.size() + "]");
|
||||||
|
|
|
@ -2,8 +2,7 @@ package btools.routingapp;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class WpDatabaseScanner extends Thread
|
public class WpDatabaseScanner extends Thread {
|
||||||
{
|
|
||||||
private String currentDir = "";
|
private String currentDir = "";
|
||||||
private String bestGuess = "";
|
private String bestGuess = "";
|
||||||
private String lastError = "";
|
private String lastError = "";
|
||||||
|
@ -12,66 +11,49 @@ public class WpDatabaseScanner extends Thread
|
||||||
|
|
||||||
private long maxtimestamp = 0;
|
private long maxtimestamp = 0;
|
||||||
|
|
||||||
public String getCurrentDir()
|
public String getCurrentDir() {
|
||||||
{
|
synchronized (currentDirSync) {
|
||||||
synchronized (currentDirSync)
|
|
||||||
{
|
|
||||||
return currentDir;
|
return currentDir;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCurrentDir( String dir )
|
private void setCurrentDir(String dir) {
|
||||||
{
|
synchronized (currentDirSync) {
|
||||||
synchronized (currentDirSync)
|
|
||||||
{
|
|
||||||
currentDir = dir;
|
currentDir = dir;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBestGuess()
|
public String getBestGuess() {
|
||||||
{
|
synchronized (currentDirSync) {
|
||||||
synchronized (currentDirSync)
|
|
||||||
{
|
|
||||||
return bestGuess;
|
return bestGuess;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLastError()
|
public String getLastError() {
|
||||||
{
|
synchronized (currentDirSync) {
|
||||||
synchronized (currentDirSync)
|
|
||||||
{
|
|
||||||
return lastError;
|
return lastError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLastError( String msg )
|
private void setLastError(String msg) {
|
||||||
{
|
synchronized (currentDirSync) {
|
||||||
synchronized (currentDirSync)
|
|
||||||
{
|
|
||||||
lastError = msg;
|
lastError = msg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String[] vetos = new String[]{"dev", "sys", "system", "proc", "etc", "init", "d", "cache", "acct", "data"};
|
private static String[] vetos = new String[]{"dev", "sys", "system", "proc", "etc", "init", "d", "cache", "acct", "data"};
|
||||||
|
|
||||||
private void scan( File dir, int level )
|
private void scan(File dir, int level) {
|
||||||
{
|
if (level > 8) {
|
||||||
if ( level > 8 )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
if (dir.isDirectory()) {
|
||||||
if ( dir.isDirectory() )
|
if (level == 1) {
|
||||||
{
|
|
||||||
if ( level == 1 )
|
|
||||||
{
|
|
||||||
String name = dir.getName();
|
String name = dir.getName();
|
||||||
for( String veto: vetos )
|
for (String veto : vetos) {
|
||||||
{
|
if (veto.equals(name)) {
|
||||||
if ( veto.equals( name ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,24 +61,19 @@ public class WpDatabaseScanner extends Thread
|
||||||
|
|
||||||
testPath(dir.getPath());
|
testPath(dir.getPath());
|
||||||
File[] childs = dir.listFiles();
|
File[] childs = dir.listFiles();
|
||||||
if ( childs == null )
|
if (childs == null) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for ( File child : childs )
|
for (File child : childs) {
|
||||||
{
|
|
||||||
scan(child, level + 1);
|
scan(child, level + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
setLastError(e.toString());
|
setLastError(e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testPath( String path ) throws Exception
|
private void testPath(String path) throws Exception {
|
||||||
{
|
|
||||||
setCurrentDir(path);
|
setCurrentDir(path);
|
||||||
|
|
||||||
testReader(new CoordinateReaderOsmAnd(path));
|
testReader(new CoordinateReaderOsmAnd(path));
|
||||||
|
@ -105,23 +82,16 @@ public class WpDatabaseScanner extends Thread
|
||||||
testReader(new CoordinateReaderOrux(path));
|
testReader(new CoordinateReaderOrux(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testReader( CoordinateReader cor ) throws Exception
|
private void testReader(CoordinateReader cor) throws Exception {
|
||||||
{
|
|
||||||
long ts = cor.getTimeStamp();
|
long ts = cor.getTimeStamp();
|
||||||
if ( ts > maxtimestamp )
|
if (ts > maxtimestamp) {
|
||||||
{
|
|
||||||
maxtimestamp = ts;
|
maxtimestamp = ts;
|
||||||
synchronized (currentDirSync)
|
synchronized (currentDirSync) {
|
||||||
{
|
|
||||||
bestGuess = cor.basedir;
|
bestGuess = cor.basedir;
|
||||||
}
|
}
|
||||||
}
|
} else if (ts > 0 && ts == maxtimestamp) {
|
||||||
else if ( ts > 0 && ts == maxtimestamp )
|
synchronized (currentDirSync) {
|
||||||
{
|
if (cor.basedir.length() < bestGuess.length()) {
|
||||||
synchronized (currentDirSync)
|
|
||||||
{
|
|
||||||
if ( cor.basedir.length() < bestGuess.length() )
|
|
||||||
{
|
|
||||||
bestGuess = cor.basedir;
|
bestGuess = cor.basedir;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,8 +99,7 @@ public class WpDatabaseScanner extends Thread
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
scan(new File("/"), 0);
|
scan(new File("/"), 0);
|
||||||
setCurrentDir(null);
|
setCurrentDir(null);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue