From a0b318c3834161d4746a263940c343ca32c45a22 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 26 Mar 2019 12:07:46 +0100 Subject: [PATCH] rename Apk.getUrl() to getCanonicalUrl() to highlight it is also an ID This method returns the URL that points to the canonical download source for this package. This is also used as the unique ID for tracking downloading, progress, and notifications throughout the whole install process. It is guaranteed to uniquely represent this file since it points to a file on the file system of the canonical webserver. --- .../org/fdroid/fdroid/views/swap/SwapAppsView.java | 2 +- .../fdroid/views/swap/SwapWorkflowActivity.java | 2 +- .../org/fdroid/fdroid/AppUpdateStatusManager.java | 8 ++++---- app/src/main/java/org/fdroid/fdroid/data/Apk.java | 13 +++++++++++-- .../fdroid/installer/InstallManagerService.java | 4 ++-- .../fdroid/views/apps/AppListItemController.java | 4 ++-- .../items/KnownVulnAppListItemController.java | 2 +- 7 files changed, 22 insertions(+), 13 deletions(-) diff --git a/app/src/full/java/org/fdroid/fdroid/views/swap/SwapAppsView.java b/app/src/full/java/org/fdroid/fdroid/views/swap/SwapAppsView.java index 839cf8c5b..7ad2f38eb 100644 --- a/app/src/full/java/org/fdroid/fdroid/views/swap/SwapAppsView.java +++ b/app/src/full/java/org/fdroid/fdroid/views/swap/SwapAppsView.java @@ -314,7 +314,7 @@ public class SwapAppsView extends ListView implements } if (apk != null) { - String urlString = apk.getUrl(); + String urlString = apk.getCanonicalUrl(); // TODO unregister receivers? or will they just die with this instance IntentFilter downloadFilter = DownloaderService.getIntentFilter(urlString); diff --git a/app/src/full/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java b/app/src/full/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java index e3b1cb276..a8a426db9 100644 --- a/app/src/full/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/views/swap/SwapWorkflowActivity.java @@ -836,7 +836,7 @@ public class SwapWorkflowActivity extends AppCompatActivity { } public void install(@NonNull final App app, @NonNull final Apk apk) { - Uri downloadUri = Uri.parse(apk.getUrl()); + Uri downloadUri = Uri.parse(apk.getCanonicalUrl()); localBroadcastManager.registerReceiver(installReceiver, Installer.getInstallIntentFilter(downloadUri)); InstallManagerService.queue(this, app, apk); diff --git a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java index 020a817dd..14c7bda14 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java +++ b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java @@ -133,7 +133,7 @@ public final class AppUpdateStatusManager { * @see org.fdroid.fdroid.installer.InstallManagerService */ public String getUniqueKey() { - return apk.getUrl(); + return apk.getCanonicalUrl(); } /** @@ -321,7 +321,7 @@ public final class AppUpdateStatusManager { ContentResolver resolver = context.getContentResolver(); App app = AppProvider.Helper.findSpecificApp(resolver, apk.packageName, apk.repoId); AppUpdateStatus ret = new AppUpdateStatus(app, apk, status, intent); - appMapping.put(apk.getUrl(), ret); + appMapping.put(apk.getCanonicalUrl(), ret); return ret; } } @@ -347,7 +347,7 @@ public final class AppUpdateStatusManager { } synchronized (appMapping) { - AppUpdateStatus entry = appMapping.get(apk.getUrl()); + AppUpdateStatus entry = appMapping.get(apk.getCanonicalUrl()); if (entry != null) { updateApkInternal(entry, status, pendingIntent); } else { @@ -435,7 +435,7 @@ public final class AppUpdateStatusManager { public void setApkError(Apk apk, String errorText) { synchronized (appMapping) { - AppUpdateStatus entry = appMapping.get(apk.getUrl()); + AppUpdateStatus entry = appMapping.get(apk.getCanonicalUrl()); if (entry == null) { entry = createAppEntry(apk, Status.InstallError, null); } 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 0cdae110c..b70506203 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Apk.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Apk.java @@ -263,8 +263,17 @@ public class Apk extends ValueObject implements Comparable, Parcelable { } } + /** + * Get the URL that points to the canonical download source for this + * package. This is also used as the unique ID for tracking downloading, + * progress, and notifications throughout the whole install process. It + * is guaranteed to uniquely represent this file since it points to a file + * on the file system of the canonical webserver. + * + * @see org.fdroid.fdroid.installer.InstallManagerService + */ @JsonIgnore // prevent tests from failing due to nulls in checkRepoAddress() - public String getUrl() { + public String getCanonicalUrl() { checkRepoAddress(); return repoAddress + "/" + apkName.replace(" ", "%20"); } @@ -527,7 +536,7 @@ public class Apk extends ValueObject implements Comparable, Parcelable { public File getMediaInstallPath(Context context) { File path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOWNLOADS); // Default for all other non-apk/media files - String fileExtension = MimeTypeMap.getFileExtensionFromUrl(this.getUrl()); + String fileExtension = MimeTypeMap.getFileExtensionFromUrl(this.getCanonicalUrl()); if (TextUtils.isEmpty(fileExtension)) return path; MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); String[] mimeType = mimeTypeMap.getMimeTypeFromExtension(fileExtension).split("/"); diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java index 3ba2a632a..74cd5eda0 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java @@ -209,7 +209,7 @@ public class InstallManagerService extends Service { getObb(urlString, apk.getMainObbUrl(), apk.getMainObbFile(), apk.obbMainFileSha256); getObb(urlString, apk.getPatchObbUrl(), apk.getPatchObbFile(), apk.obbPatchFileSha256); - File apkFilePath = ApkCache.getApkDownloadPath(this, apk.getUrl()); + File apkFilePath = ApkCache.getApkDownloadPath(this, apk.getCanonicalUrl()); long apkFileSize = apkFilePath.length(); if (!apkFilePath.exists() || apkFileSize < apk.size) { Utils.debugLog(TAG, "download " + urlString + " " + apkFilePath); @@ -464,7 +464,7 @@ public class InstallManagerService extends Service { * @param context this app's {@link Context} */ public static void queue(Context context, App app, @NonNull Apk apk) { - String urlString = apk.getUrl(); + String urlString = apk.getCanonicalUrl(); AppUpdateStatusManager.getInstance(context).addApk(apk, AppUpdateStatusManager.Status.PendingInstall, null); putPendingInstall(context, urlString, apk.packageName); Utils.debugLog(TAG, "queue " + app.packageName + " " + apk.versionCode + " from " + urlString); diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java index 9427c5f45..520311045 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java @@ -483,9 +483,9 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { } if (currentStatus != null && currentStatus.status == AppUpdateStatusManager.Status.ReadyToInstall) { - String urlString = currentStatus.apk.getUrl(); + String urlString = currentStatus.apk.getCanonicalUrl(); File apkFilePath = ApkCache.getApkDownloadPath(activity, urlString); - Utils.debugLog(TAG, "skip download, we have already downloaded " + currentStatus.apk.getUrl() + + Utils.debugLog(TAG, "skip download, we have already downloaded " + currentStatus.apk.getCanonicalUrl() + " to " + apkFilePath); final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(activity); diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java index 6d3631940..a4d89fa7f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java @@ -73,7 +73,7 @@ public class KnownVulnAppListItemController extends AppListItemController { Apk suggestedApk = ApkProvider.Helper.findSuggestedApk(activity, app); if (shouldUpgradeInsteadOfUninstall(app, suggestedApk)) { LocalBroadcastManager manager = LocalBroadcastManager.getInstance(activity); - Uri uri = Uri.parse(suggestedApk.getUrl()); + Uri uri = Uri.parse(suggestedApk.getCanonicalUrl()); manager.registerReceiver(installReceiver, Installer.getInstallIntentFilter(uri)); InstallManagerService.queue(activity, app, suggestedApk); } else {