From 3a1fcfd2261c61b33bb50e46310ee6bbcb988222 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 5 May 2016 15:17:22 +1000 Subject: [PATCH] Move `Utils#getApkUrl(String repoAddress, Apk apk)` to `Apk#getUrl()` Added assertions that both apkName and repoAddress need to be populated in order to call `getUrl()`. Also verified that this is the case for all usages of this method, which it should be. All `Apk` objects which currently have `getUrl()` called on them are loaded using the `ApkProvider.Helper.findById()` method without specifying which columns to load (which defaults to all). --- .../java/org/fdroid/fdroid/AppDetails.java | 21 ++++--------------- .../java/org/fdroid/fdroid/UpdateService.java | 10 ++++----- .../main/java/org/fdroid/fdroid/Utils.java | 5 ----- .../main/java/org/fdroid/fdroid/data/Apk.java | 7 +++++++ .../fdroid/views/swap/SwapAppsView.java | 2 +- .../views/swap/SwapWorkflowActivity.java | 2 +- 6 files changed, 17 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails.java b/app/src/main/java/org/fdroid/fdroid/AppDetails.java index 88d17a270..acf535c08 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppDetails.java +++ b/app/src/main/java/org/fdroid/fdroid/AppDetails.java @@ -815,9 +815,6 @@ public class AppDetails extends AppCompatActivity { return; } - final String repoaddress = getRepoAddress(apk); - if (repoaddress == null) return; - if (!apk.compatible) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.installIncompatible); @@ -826,7 +823,7 @@ public class AppDetails extends AppCompatActivity { @Override public void onClick(DialogInterface dialog, int whichButton) { - startDownload(apk, repoaddress); + startDownload(apk); } }); builder.setNegativeButton(R.string.no, @@ -855,21 +852,11 @@ public class AppDetails extends AppCompatActivity { alert.show(); return; } - startDownload(apk, repoaddress); + startDownload(apk); } - @Nullable - private String getRepoAddress(Apk apk) { - final String[] projection = {RepoProvider.DataColumns.ADDRESS}; - Repo repo = RepoProvider.Helper.findById(this, apk.repo, projection); - if (repo == null || repo.address == null) { - return null; - } - return repo.address; - } - - private void startDownload(Apk apk, String repoAddress) { - activeDownloadUrlString = Utils.getApkUrl(repoAddress, apk); + private void startDownload(Apk apk) { + activeDownloadUrlString = apk.getUrl(); registerDownloaderReceivers(); headerFragment.startProgress(); DownloaderService.queue(this, apk.packageName, activeDownloadUrlString); diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index c3cadf50b..1be4092fd 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -393,7 +393,7 @@ public class UpdateService extends IntentService implements ProgressListener { // now that downloading the index is done, start downloading updates if (changes && fdroidPrefs.isAutoDownloadEnabled()) { - autoDownloadUpdates(repo.address); + autoDownloadUpdates(); } } @@ -485,7 +485,7 @@ public class UpdateService extends IntentService implements ProgressListener { return inboxStyle; } - private void autoDownloadUpdates(String repoAddress) { + private void autoDownloadUpdates() { Cursor cursor = getContentResolver().query( AppProvider.getCanUpdateUri(), new String[]{ @@ -496,10 +496,8 @@ public class UpdateService extends IntentService implements ProgressListener { cursor.moveToFirst(); for (int i = 0; i < cursor.getCount(); i++) { App app = new App(cursor); - Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode, new String[]{ - ApkProvider.DataColumns.NAME, - }); - String urlString = Utils.getApkUrl(repoAddress, apk); + Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode); + String urlString = apk.getUrl(); DownloaderService.queue(this, app.packageName, urlString); cursor.moveToNext(); } diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java index d0dfa9b1a..e19408a77 100644 --- a/app/src/main/java/org/fdroid/fdroid/Utils.java +++ b/app/src/main/java/org/fdroid/fdroid/Utils.java @@ -39,7 +39,6 @@ import com.nostra13.universalimageloader.utils.StorageUtils; import org.apache.commons.io.FileUtils; import org.fdroid.fdroid.compat.FileCompat; -import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.SanitizedFile; import org.xml.sax.XMLReader; @@ -434,10 +433,6 @@ public final class Utils { return new Locale(languageTag); } - public static String getApkUrl(String repoAddress, Apk apk) { - return repoAddress + "/" + apk.apkName.replace(" ", "%20"); - } - public static final class CommaSeparatedList implements Iterable { private final String value; diff --git a/app/src/main/java/org/fdroid/fdroid/data/Apk.java b/app/src/main/java/org/fdroid/fdroid/data/Apk.java index 387312940..ee68ede09 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Apk.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Apk.java @@ -121,6 +121,13 @@ public class Apk extends ValueObject implements Comparable { } } + public String getUrl() { + if (repoAddress == null || apkName == null) { + throw new IllegalStateException("Apk needs to have both ApkProvider.DataColumns.REPO_ADDRESS and ApkProvider.DataColumns.NAME set in order to calculate URL."); + } + return repoAddress + "/" + apkName.replace(" ", "%20"); + } + @Override public String toString() { return packageName + " (version " + versionCode + ")"; diff --git a/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java b/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java index 009a0399b..d7b42505d 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java +++ b/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java @@ -297,7 +297,7 @@ public class SwapAppsView extends ListView implements // TODO: Unregister receivers correctly... Apk apk = getApkToInstall(); - String url = Utils.getApkUrl(apk.repoAddress, apk); + String url = apk.getUrl(); localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); localBroadcastManager.registerReceiver(appListViewResetReceiver, diff --git a/app/src/main/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java b/app/src/main/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java index a1585a512..2b063872f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java @@ -778,7 +778,7 @@ public class SwapWorkflowActivity extends AppCompatActivity { public void install(@NonNull final App app) { final Apk apk = ApkProvider.Helper.find(this, app.packageName, app.suggestedVersionCode); - String urlString = Utils.getApkUrl(apk.repoAddress, apk); + String urlString = apk.getUrl(); downloadCompleteReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) {