From 3f3ff5ffd70265482df3281638ef8b53d7d1f489 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 30 Mar 2018 10:54:25 +0200 Subject: [PATCH 1/6] further simplification of Downloader based on Uri missed this in df08e84e7829652d7999eee5451080a012b00a1e --- app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java | 6 ++---- .../java/org/fdroid/fdroid/net/DownloaderFactory.java | 9 ++------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java b/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java index b961f3abb..a0ac78cbb 100644 --- a/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java +++ b/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java @@ -82,8 +82,7 @@ public class IndexV1Updater extends RepoUpdater { Downloader downloader = null; try { // read file name from file - final Uri dataUri = Uri.parse(indexUrl); - downloader = DownloaderFactory.create(context, dataUri.toString()); + downloader = DownloaderFactory.create(context, indexUrl); downloader.setCacheTag(repo.lastetag); downloader.setListener(downloadListener); downloader.download(); @@ -108,8 +107,7 @@ public class IndexV1Updater extends RepoUpdater { try { mirrorUrl = FDroidApp.getMirror(prevMirrorUrl, repo); prevMirrorUrl = mirrorUrl; - Uri dataUri2 = Uri.parse(mirrorUrl); - downloader = DownloaderFactory.create(context, dataUri2.toString()); + downloader = DownloaderFactory.create(context, mirrorUrl); downloader.setCacheTag(repo.lastetag); downloader.setListener(downloadListener); downloader.setTimeout(FDroidApp.getTimeout()); diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java b/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java index 3d124eed9..4704ae279 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java +++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java @@ -20,19 +20,14 @@ public class DownloaderFactory { throws IOException { File destFile = File.createTempFile("dl-", "", context.getCacheDir()); destFile.deleteOnExit(); // this probably does nothing, but maybe... - return create(context, urlString, destFile); + Uri uri = Uri.parse(urlString); + return create(context, uri, destFile); } public static Downloader create(Context context, Uri uri, File destFile) throws IOException { - return create(context, uri.toString(), destFile); - } - - public static Downloader create(Context context, String urlString, File destFile) - throws IOException { Downloader downloader; - Uri uri = Uri.parse(urlString); String scheme = uri.getScheme(); if ("bluetooth".equals(scheme)) { downloader = new BluetoothDownloader(uri, destFile); From 06f42f864f8c94ef978cc4acdb8d5b383ea028e9 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 30 Mar 2018 13:15:41 +0200 Subject: [PATCH 2/6] don't crash in "Add Repo" if an invalid URL is given Oops, missed this in 89e04cc078bb96a6999ccc4a42f23800272e2be2 --- .../fdroid/views/ManageReposActivity.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java b/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java index bed9ec62a..9417d3b65 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java @@ -296,7 +296,7 @@ public class ManageReposActivity extends AppCompatActivity try { url = normalizeUrl(url); } catch (URISyntaxException e) { - invalidUrl(null); + invalidUrl(); return; } @@ -411,7 +411,7 @@ public class ManageReposActivity extends AppCompatActivity } if (repo == null) { - repoDoesntExist(repo); + repoDoesntExist(); } else { if (repo.isSwap) { repoIsSwap(repo); @@ -432,8 +432,8 @@ public class ManageReposActivity extends AppCompatActivity } } - private void repoDoesntExist(Repo repo) { - updateUi(repo, AddRepoState.DOESNT_EXIST, 0, false, R.string.repo_add_add, true); + private void repoDoesntExist() { + updateUi(null, AddRepoState.DOESNT_EXIST, 0, false, R.string.repo_add_add, true); } private void repoIsSwap(Repo repo) { @@ -450,8 +450,8 @@ public class ManageReposActivity extends AppCompatActivity true, R.string.overwrite, false); } - private void invalidUrl(Repo repo) { - updateUi(repo, AddRepoState.INVALID_URL, R.string.invalid_url, true, + private void invalidUrl() { + updateUi(null, AddRepoState.INVALID_URL, R.string.invalid_url, true, R.string.repo_add_add, false); } @@ -480,8 +480,15 @@ public class ManageReposActivity extends AppCompatActivity if (addRepoState != state) { addRepoState = state; + String name; + if (repo == null) { + name = '"' + getString(R.string.unknown) + '"'; + } else { + name = repo.name; + } + if (messageRes > 0) { - overwriteMessage.setText(String.format(getString(messageRes), repo.name)); + overwriteMessage.setText(String.format(getString(messageRes), name)); overwriteMessage.setVisibility(View.VISIBLE); if (redMessage) { overwriteMessage.setTextColor(getResources().getColor(R.color.red)); From c83c8301e6ccca7ee408c7b4b898e81f6c23e222 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 30 Mar 2018 13:28:13 +0200 Subject: [PATCH 3/6] improve URL normalizing in "Add Repo" and also support content:// URLs This adds some case normalization to both the scheme and the host. This was previously messing up TreeUri content:// URLs like this: content://com.android.externalstorage.documents/tree/1AFB-2402%3A/document/1AFB-2402%3Atesty.at.or.at%2Ffdroid%2Frepo Turning them into: content://com.android.externalstorage.documents/tree/1AFB-2402:/document/1AFB-2402:testy.at.or.at/fdroid/repo --- .../fdroid/views/ManageReposActivity.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java b/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java index 9417d3b65..a7ebeddbf 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java @@ -674,17 +674,24 @@ public class ManageReposActivity extends AppCompatActivity * Currently it normalizes the path so that "/./" are removed and "test/../" is collapsed. * This is done using {@link URI#normalize()}. It also removes multiple consecutive forward * slashes in the path and replaces them with one. Finally, it removes trailing slashes. + *

+ * {@code content://} URLs used for repos stored on removable storage get messed up by + * {@link URI}. */ private String normalizeUrl(String urlString) throws URISyntaxException { if (urlString == null) { return null; } - URI uri = new URI(urlString); + Uri uri = Uri.parse(urlString); if (!uri.isAbsolute()) { throw new URISyntaxException(urlString, "Must provide an absolute URI for repositories"); } - - uri = uri.normalize(); + if (!uri.isHierarchical()) { + throw new URISyntaxException(urlString, "Must provide an hierarchical URI for repositories"); + } + if ("content".equals(uri.getScheme())) { + return uri.toString(); + } String path = uri.getPath(); if (path != null) { path = path.replaceAll("//*/", "/"); // Collapse multiple forward slashes into 1. @@ -692,9 +699,13 @@ public class ManageReposActivity extends AppCompatActivity path = path.substring(0, path.length() - 1); } } - - return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), - path, uri.getQuery(), uri.getFragment()).toString(); + return new URI(uri.getScheme().toLowerCase(Locale.ENGLISH), + uri.getUserInfo(), + uri.getHost().toLowerCase(Locale.ENGLISH), + uri.getPort(), + path, + uri.getQuery(), + uri.getFragment()).normalize().toString(); } /** From 2b8bfd4aa68aafafa8323941e501c8fb68fc2253 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 30 Mar 2018 13:28:58 +0200 Subject: [PATCH 4/6] show placeholder image if screenshots fail to load --- .../main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java | 1 + .../org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java index 9d5aea335..bc88526df 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java @@ -117,6 +117,7 @@ public class ScreenShotsActivity extends AppCompatActivity { @Nullable Bundle savedInstanceState) { DisplayImageOptions displayImageOptions = Utils.getDefaultDisplayImageOptionsBuilder() + .showImageOnFail(R.drawable.screenshot_placeholder) .showImageOnLoading(R.drawable.screenshot_placeholder) .showImageForEmptyUri(R.drawable.screenshot_placeholder) .build(); diff --git a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java index a128f6d23..d6530e961 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java @@ -26,6 +26,7 @@ class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter Date: Fri, 30 Mar 2018 13:56:48 +0200 Subject: [PATCH 5/6] remove verbose logging from InstalledAppProvider stuff --- .../java/org/fdroid/fdroid/data/InstalledAppProvider.java | 4 ---- .../org/fdroid/fdroid/data/InstalledAppProviderService.java | 3 --- 2 files changed, 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProvider.java b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProvider.java index 3ecc7fa05..37a6a07d6 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProvider.java @@ -225,10 +225,8 @@ public class InstalledAppProvider extends FDroidProvider { QuerySelection query = new QuerySelection(where, whereArgs); query = query.add(queryAppSubQuery(packageName)); - Utils.debugLog(TAG, "Deleting " + packageName); int count = db().delete(getTableName(), query.getSelection(), query.getArgs()); - Utils.debugLog(TAG, "Requesting the suggested apk get recalculated for " + packageName); AppProvider.Helper.calcSuggestedApk(getContext(), packageName); return count; @@ -252,10 +250,8 @@ public class InstalledAppProvider extends FDroidProvider { verifyVersionNameNotNull(values); - Utils.debugLog(TAG, "Inserting/updating " + packageName); db().replaceOrThrow(getTableName(), null, values); - Utils.debugLog(TAG, "Requesting the suggested apk get recalculated for " + packageName); AppProvider.Helper.calcSuggestedApk(getContext(), packageName); return getAppUri(values.getAsString(Cols.Package.NAME)); diff --git a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java index 035c2ff28..819125ff8 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java +++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java @@ -10,7 +10,6 @@ import android.content.pm.Signature; import android.net.Uri; import android.os.Process; import android.support.annotation.Nullable; -import android.util.Log; import org.acra.ACRA; import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.Hasher; @@ -221,7 +220,6 @@ public class InstalledAppProviderService extends IntentService { if (ACTION_INSERT.equals(action)) { PackageInfo packageInfo = getPackageInfo(intent, packageName); if (packageInfo != null) { - Log.i(TAG, "Marking " + packageName + " as installed"); File apk = getPathToInstalledApk(packageInfo); if (apk == null) { return; @@ -255,7 +253,6 @@ public class InstalledAppProviderService extends IntentService { } } } else if (ACTION_DELETE.equals(action)) { - Log.i(TAG, "Marking " + packageName + " as no longer installed"); deleteAppFromDb(this, packageName); } packageChangeNotifier.onNext(packageName); From 258d2a41c33cb72742579719363a6cc4239e8c55 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 30 Mar 2018 14:01:42 +0200 Subject: [PATCH 6/6] do not include blank fingerprints in AddRepo fingerprintRepoMap --- .../main/java/org/fdroid/fdroid/views/ManageReposActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java b/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java index a7ebeddbf..b57b38b57 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ManageReposActivity.java @@ -241,7 +241,8 @@ public class ManageReposActivity extends AppCompatActivity for (String url : repo.getMirrorList()) { urlRepoMap.put(url, repo); } - if (TextUtils.equals(getRepoType(newAddress), getRepoType(repo.address))) { + if (!TextUtils.isEmpty(repo.fingerprint) + && TextUtils.equals(getRepoType(newAddress), getRepoType(repo.address))) { fingerprintRepoMap.put(repo.fingerprint, repo); } }