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 35d1977821..5e89e19a54 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 void setMedia(Media media) { 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 9f89586c09..9447d173a0 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 static String urlEncode(String url) { * @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 d5b1cc0ce7..4ae37ecfc3 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 @@ protected void onPreExecute() { @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 7efb48c24f..84e3ae173e 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("")) + } }