[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Fix possible crash in Gallery.
jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/370245 ) Change subject: Fix possible crash in Gallery. .. Fix possible crash in Gallery. This fixes a long-standing TODO in the metadata of gallery items, that no longer retrieves metadata by reflection, and forces consumers to use the explicit fields provided by ExtMetadata. I've actually observed a crash that was caused by the old behavior, and this patch resolves it. java.lang.ClassCastException: java.lang.Long cannot be cast to org.wikipedia.gallery.ExtMetadata$Values at org.wikipedia.gallery.ExtMetadata.toMap(ExtMetadata.java:64) at org.wikipedia.gallery.GalleryItem.(GalleryItem.java:37) Change-Id: I8e1a44d8ec76edc9be43addf43237dc69633f155 --- M app/src/main/java/org/wikipedia/gallery/ExtMetadata.java M app/src/main/java/org/wikipedia/gallery/GalleryActivity.java M app/src/main/java/org/wikipedia/gallery/GalleryItem.java 3 files changed, 28 insertions(+), 41 deletions(-) Approvals: jenkins-bot: Verified Mholloway: Looks good to me, approved diff --git a/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java b/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java index 736c5ba..3d152b7 100644 --- a/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java +++ b/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java @@ -5,12 +5,6 @@ import com.google.gson.annotations.SerializedName; -import org.apache.commons.lang3.StringUtils; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; - public class ExtMetadata { @SuppressWarnings("unused") @SerializedName("DateTime") @Nullable private Values dateTime; @SuppressWarnings("unused") @SerializedName("ObjectName") @Nullable private Values objectName; @@ -43,6 +37,22 @@ return license; } +@Nullable public Values imageDescription() { +return imageDescription; +} + +@Nullable public Values objectName() { +return objectName; +} + +@Nullable public Values usageTerms() { +return usageTerms; +} + +@Nullable public Values artist() { +return artist; +} + public class Values { @SuppressWarnings("unused,NullableProblems") @NonNull private String value; @SuppressWarnings("unused,NullableProblems") @NonNull private String source; @@ -55,17 +65,5 @@ @NonNull public String source() { return source; } -} - -// TODO: Update consumers to use a ExtMetadata object and remove ASAP -@Deprecated @NonNull Map toMap() throws IllegalAccessException { -HashMap result = new HashMap<>(); -for (Field field : this.getClass().getDeclaredFields()) { -Values values = (Values) field.get(this); -if (values != null) { -result.put(StringUtils.capitalize(field.getName()), values.value()); -} -} -return result; } } diff --git a/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java b/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java index 2d7e224..e74d996 100644 --- a/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java +++ b/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java @@ -577,10 +577,10 @@ galleryAdapter.notifyFragments(galleryPager.getCurrentItem()); CharSequence descriptionStr = ""; -if (item.getMetadata().containsKey("ImageDescription")) { -descriptionStr = StringUtil.fromHtml(item.getMetadata().get("ImageDescription")); -} else if (item.getMetadata().containsKey("ObjectName")) { -descriptionStr = StringUtil.fromHtml(item.getMetadata().get("ObjectName")); +if (item.getMetadata() != null && item.getMetadata().imageDescription() != null) { +descriptionStr = StringUtil.fromHtml(item.getMetadata().imageDescription().value()); +} else if (item.getMetadata() != null && item.getMetadata().objectName() != null) { +descriptionStr = StringUtil.fromHtml(item.getMetadata().objectName().value()); } if (descriptionStr.length() > 0) { descriptionText.setText(strip(descriptionStr)); @@ -593,7 +593,8 @@ licenseIcon.setImageResource(getLicenseIcon(item)); // Set the icon's content description to the UsageTerms property. // (if UsageTerms is not present, then default to Fair Use) -String usageTerms = item.getMetadata().get("UsageTerms"); +String usageTerms = (item.getMetadata() == null || item.getMetadata().usageTerms() == null) +? null : item.getMetadata().usageTerms().value(); if (TextUtils.isEmpty(usageTerms)) { usageTerms = getString(R.string.gallery_fair_use_license); } @@ -602,9 +603,9 @@ licenseIcon.setTag(item.getLicenseUrl()); String creditStr = ""; -
[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Fix possible crash in Gallery.
Dbrant has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/370245 ) Change subject: Fix possible crash in Gallery. .. Fix possible crash in Gallery. This fixes a long-standing TODO in the metadata of gallery items, that no longer retrieves metadata by reflection, and forces consumers to use the explicit fields provided by ExtMetadata. I've actually observed a crash that was caused by the old behavior, and this patch resolves it. java.lang.ClassCastException: java.lang.Long cannot be cast to org.wikipedia.gallery.ExtMetadata$Values at org.wikipedia.gallery.ExtMetadata.toMap(ExtMetadata.java:64) at org.wikipedia.gallery.GalleryItem.(GalleryItem.java:37) Change-Id: I8e1a44d8ec76edc9be43addf43237dc69633f155 --- M app/src/main/java/org/wikipedia/gallery/ExtMetadata.java M app/src/main/java/org/wikipedia/gallery/GalleryActivity.java M app/src/main/java/org/wikipedia/gallery/GalleryItem.java 3 files changed, 28 insertions(+), 41 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/45/370245/1 diff --git a/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java b/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java index 736c5ba..3d152b7 100644 --- a/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java +++ b/app/src/main/java/org/wikipedia/gallery/ExtMetadata.java @@ -5,12 +5,6 @@ import com.google.gson.annotations.SerializedName; -import org.apache.commons.lang3.StringUtils; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; - public class ExtMetadata { @SuppressWarnings("unused") @SerializedName("DateTime") @Nullable private Values dateTime; @SuppressWarnings("unused") @SerializedName("ObjectName") @Nullable private Values objectName; @@ -43,6 +37,22 @@ return license; } +@Nullable public Values imageDescription() { +return imageDescription; +} + +@Nullable public Values objectName() { +return objectName; +} + +@Nullable public Values usageTerms() { +return usageTerms; +} + +@Nullable public Values artist() { +return artist; +} + public class Values { @SuppressWarnings("unused,NullableProblems") @NonNull private String value; @SuppressWarnings("unused,NullableProblems") @NonNull private String source; @@ -55,17 +65,5 @@ @NonNull public String source() { return source; } -} - -// TODO: Update consumers to use a ExtMetadata object and remove ASAP -@Deprecated @NonNull Map toMap() throws IllegalAccessException { -HashMap result = new HashMap<>(); -for (Field field : this.getClass().getDeclaredFields()) { -Values values = (Values) field.get(this); -if (values != null) { -result.put(StringUtils.capitalize(field.getName()), values.value()); -} -} -return result; } } diff --git a/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java b/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java index 2d7e224..e74d996 100644 --- a/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java +++ b/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java @@ -577,10 +577,10 @@ galleryAdapter.notifyFragments(galleryPager.getCurrentItem()); CharSequence descriptionStr = ""; -if (item.getMetadata().containsKey("ImageDescription")) { -descriptionStr = StringUtil.fromHtml(item.getMetadata().get("ImageDescription")); -} else if (item.getMetadata().containsKey("ObjectName")) { -descriptionStr = StringUtil.fromHtml(item.getMetadata().get("ObjectName")); +if (item.getMetadata() != null && item.getMetadata().imageDescription() != null) { +descriptionStr = StringUtil.fromHtml(item.getMetadata().imageDescription().value()); +} else if (item.getMetadata() != null && item.getMetadata().objectName() != null) { +descriptionStr = StringUtil.fromHtml(item.getMetadata().objectName().value()); } if (descriptionStr.length() > 0) { descriptionText.setText(strip(descriptionStr)); @@ -593,7 +593,8 @@ licenseIcon.setImageResource(getLicenseIcon(item)); // Set the icon's content description to the UsageTerms property. // (if UsageTerms is not present, then default to Fair Use) -String usageTerms = item.getMetadata().get("UsageTerms"); +String usageTerms = (item.getMetadata() == null || item.getMetadata().usageTerms() == null) +? null : item.getMetadata().usageTerms().value(); if (TextUtils.isEmpty(usageTerms)) { usageTerms = getString(R.string.gallery_fair_use_license); } @@ -602,9 +603,9 @@ licenseIcon.setTag(item.getLicenseUrl()); String creditStr = ""; -