From 2c7033e3673717704ecdf556bb8771930de126e2 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 5 May 2016 12:02:52 +1000 Subject: [PATCH] Ask for active downloading url in on resume. Fixes #624. The `AppDetails` activity was not correctly asking for the active download url string when being resumed. This change recalculates the value when being resumed now. --- .../java/org/fdroid/fdroid/AppDetails.java | 23 +++++++++++++------ .../fdroid/fdroid/net/DownloaderService.java | 3 +++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails.java b/app/src/main/java/org/fdroid/fdroid/AppDetails.java index acf535c08..f63ad894e 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppDetails.java +++ b/app/src/main/java/org/fdroid/fdroid/AppDetails.java @@ -426,7 +426,12 @@ public class AppDetails extends AppCompatActivity { @Override protected void onResumeFragments() { + // Must be called before super.onResumeFragments(), as the fragments depend on the active + // url being correctly set in order to know whether or not to show the download progress bar. + calcActiveDownloadUrlString(app.packageName); + super.onResumeFragments(); + headerFragment = (AppDetailsHeaderFragment) getSupportFragmentManager().findFragmentById(R.id.header); refreshApkList(); supportInvalidateOptionsMenu(); @@ -582,13 +587,7 @@ public class AppDetails extends AppCompatActivity { Utils.debugLog(TAG, "Getting application details for " + packageName); App newApp = null; - String urlString = getPreferences(MODE_PRIVATE).getString(packageName, null); - if (DownloaderService.isQueuedOrActive(urlString)) { - activeDownloadUrlString = urlString; - } else { - // this URL is no longer active, remove it - PreferencesCompat.apply(getPreferences(MODE_PRIVATE).edit().remove(packageName)); - } + calcActiveDownloadUrlString(packageName); if (!TextUtils.isEmpty(packageName)) { newApp = AppProvider.Helper.findByPackageName(getContentResolver(), packageName); @@ -599,6 +598,16 @@ public class AppDetails extends AppCompatActivity { return this.app != null; } + private void calcActiveDownloadUrlString(String packageName) { + String urlString = getPreferences(MODE_PRIVATE).getString(packageName, null); + if (DownloaderService.isQueuedOrActive(urlString)) { + activeDownloadUrlString = urlString; + } else { + // this URL is no longer active, remove it + PreferencesCompat.apply(getPreferences(MODE_PRIVATE).edit().remove(packageName)); + } + } + /** * If passed null, this will show a message to the user ("Could not find app ..." or something * like that) and then finish the activity. diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java index ce1b05c3f..46205d2e7 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java +++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java @@ -389,6 +389,9 @@ public class DownloaderService extends Service { if (TextUtils.isEmpty(urlString)) { //NOPMD - suggests unreadable format return false; } + if (serviceHandler == null) { + return false; // this service is not even running + } return serviceHandler.hasMessages(urlString.hashCode()) || isActive(urlString); }