From fa64ff919202797bc843f7cd67a72df7a37f5d9e Mon Sep 17 00:00:00 2001 From: afischerdev Date: Tue, 4 Apr 2023 11:46:50 +0200 Subject: [PATCH] add app version check to downloader --- .../expressions/BExpressionMetaData.java | 6 ++++++ .../btools/routingapp/BInstallerActivity.java | 20 ++++++++++++++++-- .../btools/routingapp/DownloadWorker.java | 21 ++++++++++++++++--- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionMetaData.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionMetaData.java index 30132dd..f08a26a 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionMetaData.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionMetaData.java @@ -18,9 +18,11 @@ public final class BExpressionMetaData { private static final String VERSION_TAG = "---lookupversion:"; private static final String MINOR_VERSION_TAG = "---minorversion:"; private static final String VARLENGTH_TAG = "---readvarlength"; + private static final String MIN_APP_VERSION_TAG = "---minappversion:"; public short lookupVersion = -1; public short lookupMinorVersion = -1; + public short minAppVersion = -1; private Map listeners = new HashMap(); @@ -51,6 +53,10 @@ public final class BExpressionMetaData { lookupMinorVersion = Short.parseShort(line.substring(MINOR_VERSION_TAG.length())); continue; } + if (line.startsWith(MIN_APP_VERSION_TAG)) { + minAppVersion = Short.parseShort(line.substring(MIN_APP_VERSION_TAG.length())); + continue; + } if (line.startsWith(VARLENGTH_TAG)) // tag removed... { continue; diff --git a/brouter-routing-app/src/main/java/btools/routingapp/BInstallerActivity.java b/brouter-routing-app/src/main/java/btools/routingapp/BInstallerActivity.java index e1848d8..6370b02 100644 --- a/brouter-routing-app/src/main/java/btools/routingapp/BInstallerActivity.java +++ b/brouter-routing-app/src/main/java/btools/routingapp/BInstallerActivity.java @@ -51,6 +51,7 @@ public class BInstallerActivity extends AppCompatActivity { private static final int DIALOG_CONFIRM_DELETE_ID = 1; private static final int DIALOG_CONFIRM_NEXTSTEPS_ID = 2; private static final int DIALOG_CONFIRM_GETDIFFS_ID = 3; + private static final int DIALOG_NEW_APP_NEEDED_ID = 4; public static final int MY_PERMISSIONS_REQUEST_NITIFICATION = 100; @@ -309,7 +310,9 @@ public class BInstallerActivity extends AppCompatActivity { } } - if (error != null && error.startsWith("Version error")) { + if (error != null && error.startsWith("error new app")) { + showAppUpdate(); + } else if (error != null && error.startsWith("Version error")) { showConfirmNextSteps(); } else if (error != null && error.startsWith("Version diffs")) { showConfirmGetDiffs(); @@ -393,7 +396,16 @@ public class BInstallerActivity extends AppCompatActivity { } }); return builder.create(); - + case DIALOG_NEW_APP_NEEDED_ID: + builder + .setTitle("App Version") + .setMessage("The new data version needs a new app. Please update BRouter first") + .setPositiveButton("Ok", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + finish(); + } + }); + return builder.create(); default: return null; } @@ -416,6 +428,10 @@ public class BInstallerActivity extends AppCompatActivity { showADialog(DIALOG_CONFIRM_GETDIFFS_ID); } + private void showAppUpdate() { + showADialog(DIALOG_NEW_APP_NEEDED_ID); + } + private void scanExistingFiles() { mBInstallerView.clearAllTilesStatus(MASK_CURRENT_RD5 | MASK_INSTALLED_RD5 | MASK_DELETED_RD5 | MASK_SELECTED_RD5); diff --git a/brouter-routing-app/src/main/java/btools/routingapp/DownloadWorker.java b/brouter-routing-app/src/main/java/btools/routingapp/DownloadWorker.java index 4d30402..2e239c1 100644 --- a/brouter-routing-app/src/main/java/btools/routingapp/DownloadWorker.java +++ b/brouter-routing-app/src/main/java/btools/routingapp/DownloadWorker.java @@ -70,6 +70,8 @@ public class DownloadWorker extends Worker { private List done = new ArrayList<>(); int version = -1; + int appversion = -1; + String errorCode = null; public DownloadWorker( @NonNull Context context, @@ -171,7 +173,7 @@ public class DownloadWorker extends Worker { try { if (DEBUG) Log.d(LOG_TAG, "Download lookup & profiles"); if (!downloadLookup()) { - output.putString(KEY_OUTPUT_ERROR, "Version error"); + output.putString(KEY_OUTPUT_ERROR, (errorCode != null ? errorCode : "Version error")); return Result.failure(output.build()); } @@ -229,11 +231,13 @@ public class DownloadWorker extends Worker { private boolean downloadLookup() throws IOException, InterruptedException { String[] lookups = mServerConfig.getLookups(); for (String fileName : lookups) { + appversion = BuildConfig.VERSION_CODE; if (fileName.length() > 0) { File lookupFile = new File(baseDir, PROFILES_DIR + fileName); BExpressionMetaData meta = new BExpressionMetaData(); meta.readMetaData(lookupFile); version = meta.lookupVersion; + int newappversion = meta.minAppVersion; int size = (int) (lookupFile.exists() ? lookupFile.length() : 0); File tmplookupFile = new File(baseDir, PROFILES_DIR + fileName + ".tmp"); @@ -244,6 +248,7 @@ public class DownloadWorker extends Worker { versionChanged = true; meta.readMetaData(lookupFile); version = meta.lookupVersion; + newappversion = meta.minAppVersion; } else { String lookupLocation = mServerConfig.getLookupUrl() + fileName; URL lookupUrl = new URL(lookupLocation); @@ -252,12 +257,22 @@ public class DownloadWorker extends Worker { downloadProgressListener.onDownloadFinished(); done.add(lookupUrl); } - if (changed && downloadAll == VALUE_SEGMENT_PARTS) { + int newversion = version; + if (changed) { meta = new BExpressionMetaData(); meta.readMetaData(tmplookupFile); - int newversion = meta.lookupVersion; + newversion = meta.lookupVersion; + newappversion = meta.minAppVersion; + } + if (newappversion != -1 && newappversion > appversion) { + if (DEBUG) Log.d(LOG_TAG, "app version old " + appversion + " new " + newappversion); + errorCode = "error new app"; + return false; + } + if (changed && downloadAll == VALUE_SEGMENT_PARTS) { if (DEBUG) Log.d(LOG_TAG, "version old " + version + " new " + newversion); if (version != newversion) { + errorCode = "Version error"; return false; } } else if (changed) {