From 7f22c3c221d9fb09e882f7536e970cd1da558b83 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 27 Mar 2019 12:04:25 +0100 Subject: [PATCH] DownloaderService: convert String to Uri to avoid repeated parsing This parses the String into a Uri once per Intent, rather than once per broadcast. The Uri instance is also nicer to work with, since it is the native URL format for Intents. It should make the progress updates a bit more efficient also. fdroid/fdroidclient#1742 --- .../java/org/fdroid/fdroid/installer/ApkCache.java | 10 ++++++++-- .../java/org/fdroid/fdroid/net/DownloaderService.java | 10 +++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/installer/ApkCache.java b/app/src/main/java/org/fdroid/fdroid/installer/ApkCache.java index c1c15d117..747fcd7c9 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/ApkCache.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/ApkCache.java @@ -113,10 +113,16 @@ public class ApkCache { } /** - * Get the full path for where an APK URL will be downloaded into. + * Get the full path for where an package URL will be downloaded into. */ public static SanitizedFile getApkDownloadPath(Context context, String urlString) { - Uri uri = Uri.parse(urlString); + return getApkDownloadPath(context, Uri.parse(urlString)); + } + + /** + * Get the full path for where an package URL will be downloaded into. + */ + public static SanitizedFile getApkDownloadPath(Context context, Uri uri) { File dir = new File(getApkCacheDir(context), uri.getHost() + "-" + uri.getPort()); if (!dir.exists()) { dir.mkdirs(); 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 19db341cb..9d7a1a970 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java +++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java @@ -200,8 +200,8 @@ public class DownloaderService extends Service { */ private void handleIntent(Intent intent) { final Uri uri = intent.getData(); - long repoId = intent.getLongExtra(Downloader.EXTRA_REPO_ID, 0); - String canonicalUrl = intent.getStringExtra(Downloader.EXTRA_CANONICAL_URL); + final long repoId = intent.getLongExtra(Downloader.EXTRA_REPO_ID, 0); + final Uri canonicalUrl = Uri.parse(intent.getStringExtra(Downloader.EXTRA_CANONICAL_URL)); final SanitizedFile localFile = ApkCache.getApkDownloadPath(this, canonicalUrl); sendBroadcast(uri, Downloader.ACTION_STARTED, localFile, repoId, canonicalUrl); @@ -249,7 +249,7 @@ public class DownloaderService extends Service { sendBroadcast(uri, action, null, null); } - private void sendBroadcast(Uri uri, String action, File file, long repoId, String canonicalUrl) { + private void sendBroadcast(Uri uri, String action, File file, long repoId, Uri canonicalUrl) { sendBroadcast(uri, action, file, null, repoId, canonicalUrl); } @@ -258,10 +258,10 @@ public class DownloaderService extends Service { } private void sendBroadcast(Uri uri, String action, File file, String errorMessage, long repoId, - String canonicalUrl) { + Uri canonicalUrl) { Intent intent = new Intent(action); if (canonicalUrl != null) { - intent.setData(Uri.parse(canonicalUrl)); + intent.setData(canonicalUrl); } if (file != null) { intent.putExtra(Downloader.EXTRA_DOWNLOAD_PATH, file.getAbsolutePath());