From b4ad0c4b389e70c587b7b41b2938efa8185bfc77 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Mon, 17 Apr 2023 10:03:32 +0200 Subject: [PATCH] more checks for online problems --- .../btools/routingapp/BInstallerActivity.java | 19 +++++--- .../btools/routingapp/DownloadWorker.java | 46 +++++++++++-------- 2 files changed, 38 insertions(+), 27 deletions(-) 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 6370b02..31e597e 100644 --- a/brouter-routing-app/src/main/java/btools/routingapp/BInstallerActivity.java +++ b/brouter-routing-app/src/main/java/btools/routingapp/BInstallerActivity.java @@ -33,7 +33,6 @@ import androidx.work.NetworkType; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; -import androidx.work.WorkRequest; import com.google.android.material.progressindicator.LinearProgressIndicator; import com.google.common.util.concurrent.ListenableFuture; @@ -92,8 +91,7 @@ public class BInstallerActivity extends AppCompatActivity { if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { // nothing to do - } - if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { + } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { // } else { // You can directly ask for the permission. @@ -222,14 +220,14 @@ public class BInstallerActivity extends AppCompatActivity { .setRequiredNetworkType(NetworkType.CONNECTED) .build(); - WorkRequest downloadWorkRequest = + OneTimeWorkRequest downloadWorkRequest = new OneTimeWorkRequest.Builder(DownloadWorker.class) .setInputData(inputData) .setConstraints(constraints) .build(); WorkManager workManager = WorkManager.getInstance(getApplicationContext()); - workManager.enqueueUniqueWork(DownloadWorker.WORKER_NAME, ExistingWorkPolicy.KEEP, (OneTimeWorkRequest) downloadWorkRequest); + workManager.enqueueUniqueWork(DownloadWorker.WORKER_NAME, ExistingWorkPolicy.KEEP, downloadWorkRequest); try { WorkInfo wi = WorkManager.getInstance(getApplicationContext()).getWorkInfoById(downloadWorkRequest.getId()).get(); @@ -256,7 +254,6 @@ public class BInstallerActivity extends AppCompatActivity { private void startObserver(WorkInfo workInfo) { if (workInfo != null) { if (workInfo.getState() == WorkInfo.State.ENQUEUED || workInfo.getState() == WorkInfo.State.BLOCKED) { - Log.d("worker", "cancel " + workInfo.getState()); //WorkManager.getInstance(getApplicationContext()).cancelWorkById(downloadWorkRequest.getId()); } @@ -265,6 +262,9 @@ public class BInstallerActivity extends AppCompatActivity { mProgressIndicator.hide(); mProgressIndicator.setIndeterminate(true); mProgressIndicator.show(); + + mButtonDownload.setText(getString(R.string.action_cancel)); + mButtonDownload.setEnabled(true); } if (workInfo.getState() == WorkInfo.State.RUNNING) { @@ -310,12 +310,17 @@ public class BInstallerActivity extends AppCompatActivity { } } - if (error != null && error.startsWith("error new app")) { + if (error != null && error.startsWith("Version new app")) { showAppUpdate(); } else if (error != null && error.startsWith("Version error")) { showConfirmNextSteps(); } else if (error != null && error.startsWith("Version diffs")) { showConfirmGetDiffs(); + } else if (error != null) { + stopDownload(); + mBInstallerView.setOnSelectListener(onSelectListener); + mBInstallerView.clearAllTilesStatus(MASK_SELECTED_RD5); + scanExistingFiles(); } else { mBInstallerView.setOnSelectListener(onSelectListener); mBInstallerView.clearAllTilesStatus(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 2e239c1..d536ae6 100644 --- a/brouter-routing-app/src/main/java/btools/routingapp/DownloadWorker.java +++ b/brouter-routing-app/src/main/java/btools/routingapp/DownloadWorker.java @@ -266,7 +266,7 @@ public class DownloadWorker extends Worker { } if (newappversion != -1 && newappversion > appversion) { if (DEBUG) Log.d(LOG_TAG, "app version old " + appversion + " new " + newappversion); - errorCode = "error new app"; + errorCode = "Version new app"; return false; } if (changed && downloadAll == VALUE_SEGMENT_PARTS) { @@ -375,36 +375,42 @@ public class DownloadWorker extends Worker { connection.setConnectTimeout(5000); connection.setRequestMethod("HEAD"); connection.setDoInput(false); - connection.connect(); + try { + connection.connect(); + return connection.getResponseCode() == HttpURLConnection.HTTP_OK; + } finally { + connection.disconnect(); + } - return connection.getResponseCode() == HttpURLConnection.HTTP_OK; } private boolean downloadFile(URL downloadUrl, File outputFile, int fileSize, boolean limitDownloadSpeed, DownloadType type) throws IOException, InterruptedException { if (DEBUG) Log.d(LOG_TAG, "download " + outputFile.getAbsolutePath()); HttpURLConnection connection = (HttpURLConnection) downloadUrl.openConnection(); connection.setConnectTimeout(5000); - connection.connect(); + connection.setDefaultUseCaches(false); - if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { - throw new IOException("HTTP Request failed: " + downloadUrl + " returned " + connection.getResponseCode()); - } - int dataLength = connection.getContentLength(); - // no need of download when size equal - // file size not the best coice but easy to handle, date is not available - switch (type) { - case LOOKUP: - if (fileSize == dataLength) return false; - break; - case PROFILE: - if (fileSize == dataLength) return false; - break; - default: - break; - } InputStream input = null; OutputStream output = null; try { + connection.connect(); + + if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { + throw new IOException("HTTP Request failed: " + downloadUrl + " returned " + connection.getResponseCode()); + } + int dataLength = connection.getContentLength(); + // no need of download when size equal + // file size not the best coice but easy to handle, date is not available + switch (type) { + case LOOKUP: + if (fileSize == dataLength) return false; + break; + case PROFILE: + if (fileSize == dataLength) return false; + break; + default: + break; + } input = connection.getInputStream(); output = new FileOutputStream(outputFile);