diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java | 8 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java | 29 |
2 files changed, 26 insertions, 11 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java index e454cec7d..09fe0d654 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java @@ -162,7 +162,13 @@ public class PicassoProvider { } if (bitmap == null) { - Log.wtf(TAG, "THIS SHOULD NEVER EVER HAPPEN!!"); + // this should never, happen, but sometimes it does, so fallback + // check for fallback Uri + String fallbackParam = data.uri.getQueryParameter(PicassoImageResource.PARAM_FALLBACK); + if (fallbackParam != null) { + Uri fallback = Uri.parse(fallbackParam); + bitmap = decodeStreamFromFile(data, fallback); + } } return new Result(bitmap, Picasso.LoadedFrom.DISK); diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index f875eb812..999340900 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -35,7 +35,7 @@ public class FeedMedia extends FeedFile implements Playable { private String mime_type; private volatile FeedItem item; private Date playbackCompletionDate; - private boolean hasEmbeddedPicture; + private Boolean hasEmbeddedPicture; /* Used for loading item when restoring from parcel. */ private long itemID; @@ -52,7 +52,6 @@ public class FeedMedia extends FeedFile implements Playable { long size, String mime_type, String file_url, String download_url, boolean downloaded, Date playbackCompletionDate, int played_duration) { super(file_url, download_url, downloaded); - checkEmbeddedPicture(); this.id = id; this.item = item; this.duration = duration; @@ -230,7 +229,10 @@ public class FeedMedia extends FeedFile implements Playable { } public boolean hasEmbeddedPicture() { - return this.hasEmbeddedPicture; + if(hasEmbeddedPicture == null) { + checkEmbeddedPicture(); + } + return hasEmbeddedPicture; } @Override @@ -409,9 +411,17 @@ public class FeedMedia extends FeedFile implements Playable { @Override public Uri getImageUri() { - if (hasEmbeddedPicture) { + if (hasEmbeddedPicture()) { Uri.Builder builder = new Uri.Builder(); builder.scheme(SCHEME_MEDIA).encodedPath(getLocalMediaUrl()); + + if (item != null && item.getFeed() != null) { + final Uri feedImgUri = item.getFeed().getImageUri(); + if (feedImgUri != null) { + builder.appendQueryParameter(PARAM_FALLBACK, feedImgUri.toString()); + } + } + return builder.build(); } else { return item.getImageUri(); @@ -432,7 +442,7 @@ public class FeedMedia extends FeedFile implements Playable { private void checkEmbeddedPicture() { if (!localFileAvailable()) { - hasEmbeddedPicture = false; + hasEmbeddedPicture = Boolean.FALSE; return; } MediaMetadataRetriever mmr = new MediaMetadataRetriever(); @@ -440,14 +450,13 @@ public class FeedMedia extends FeedFile implements Playable { mmr.setDataSource(getLocalMediaUrl()); byte[] image = mmr.getEmbeddedPicture(); if(image != null) { - hasEmbeddedPicture = true; - } - else { - hasEmbeddedPicture = false; + hasEmbeddedPicture = Boolean.TRUE; + } else { + hasEmbeddedPicture = Boolean.FALSE; } } catch (Exception e) { e.printStackTrace(); - hasEmbeddedPicture = false; + hasEmbeddedPicture = Boolean.FALSE; } } } |