From 7b5b9169db024c20bc054b270059886a6fc68497 Mon Sep 17 00:00:00 2001 From: albendz <12453997+albendz@users.noreply.github.com> Date: Sun, 22 Jul 2018 07:43:33 -0700 Subject: [PATCH] Fix preview crash on local files during upload (#1696) * Try to get the localized version of the wikipedia article before defaulting to the English version. Tested with Spanish on physical Android device. Other notes: Difficulties building with gradle due to dexcount plugin: https://github.com/KeepSafe/dexcount-gradle-plugin/issues/234. In testing, disabled the plugin. * Update article fetch to not include unnecessary SERVICE line * Add checks for local file, check for string length --- .../fr/free/nrw/commons/MediaWikiImageView.java | 14 ++++++++++---- app/src/main/java/fr/free/nrw/commons/Utils.java | 6 +++++- .../nrw/commons/media/MediaDetailFragment.java | 4 ++++ .../test/kotlin/fr/free/nrw/commons/UtilsTest.kt | 4 ++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java b/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java index 35d197782..5e89e19a5 100644 --- a/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java +++ b/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java @@ -51,10 +51,16 @@ public class MediaWikiImageView extends SimpleDraweeView { return; } - if (thumbnailUrlCache.get(media.getFilename()) != null) { - setImageUrl(thumbnailUrlCache.get(media.getFilename())); - } else { - setImageUrl(null); + if(media.getFilename() != null) { + if (thumbnailUrlCache.get(media.getFilename()) != null) { + setImageUrl(thumbnailUrlCache.get(media.getFilename())); + } else { + setImageUrl(null); + currentThumbnailTask = new ThumbnailFetchTask(media, mwApi); + currentThumbnailTask.execute(media.getFilename()); + } + } else { // local image + setImageUrl(media.getLocalUri().toString()); currentThumbnailTask = new ThumbnailFetchTask(media, mwApi); currentThumbnailTask.execute(media.getFilename()); } diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 9f89586c0..9447d173a 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -76,7 +76,11 @@ public class Utils { * @return string with capitalized first character */ public static String capitalize(String string) { - return string.substring(0, 1).toUpperCase(Locale.getDefault()) + string.substring(1); + if(string.length() > 0) { + return string.substring(0, 1).toUpperCase(Locale.getDefault()) + string.substring(1); + } else { + return string; + } } /** diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index d5b1cc0ce..4ae37ecfc 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -245,6 +245,10 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { @Override protected Boolean doInBackground(Void... voids) { + // Local files have no filename yet + if(media.getFilename() == null) { + return Boolean.FALSE; + } try { extractor.fetch(media.getFilename(), licenseList); return Boolean.TRUE; diff --git a/app/src/test/kotlin/fr/free/nrw/commons/UtilsTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/UtilsTest.kt index 7efb48c24..84e3ae173 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/UtilsTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/UtilsTest.kt @@ -28,4 +28,8 @@ class UtilsTest { @Test fun `capitalize - pass Japanase characters`() { Assert.assertThat(Utils.capitalize("こんにちは"), _is("こんにちは")) } + + @Test fun `capitalize does not fail on empty string`() { + Assert.assertThat(Utils.capitalize(""), _is("")) + } }