From f29413f3b3c24270553fd560860228d7983d1083 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Wed, 17 Jun 2015 21:27:31 -0400 Subject: fix for NullPointerException in bitmap configs. Fixes AntennaPod/AntennaPod#887 --- .../danoeh/antennapod/core/asynctask/PicassoProvider.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'core') 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 4f2d5b204..e454cec7d 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 @@ -266,6 +266,11 @@ public class PicassoProvider { @Override public Bitmap transform(Bitmap source) { Bitmap result = fastblur(source, BLUR_RADIUS); + if (result == null) { + // just return the original + // for some reason we couldn't transform it. + return source; + } source.recycle(); return result; } @@ -305,8 +310,14 @@ public class PicassoProvider { // the following line: // // Stack Blur Algorithm by Mario Klingemann + Bitmap.Config config = sentBitmap.getConfig(); + if (config == null) { + // Sometimes the config can be null, in those cases + // we don't do a transform. + return null; + } - Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); + Bitmap bitmap = sentBitmap.copy(config, true); if (radius < 1) { return (null); -- cgit v1.2.3 From 3945fb2fd967254518ede49aa879a091e0ab9141 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Thu, 18 Jun 2015 18:29:58 -0400 Subject: Fallback for picasso even if we think it's impossible. Fixes AntennaPod/AntennaPod#891 --- .../java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'core') 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..246adb4c1 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,6 +162,14 @@ public class PicassoProvider { } if (bitmap == null) { + // 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); + } + Log.wtf(TAG, "THIS SHOULD NEVER EVER HAPPEN!!"); } return new Result(bitmap, Picasso.LoadedFrom.DISK); -- cgit v1.2.3 From f8fb13e955f33f5f0fc268e1ecba08975890b2a9 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 19 Jun 2015 00:20:24 +0200 Subject: Fixes slow loading times. --- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'core') 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..067095c32 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,7 +411,7 @@ 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()); return builder.build(); @@ -432,7 +434,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 +442,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; } } } -- cgit v1.2.3 From 9e71e76edab6390b58c05bb731e396adf23e57ea Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Fri, 19 Jun 2015 16:33:06 -0400 Subject: Attempt to fix AntennaPod/AntennaPod#884 by removing StringUtils.join --- .../antennapod/core/storage/PodDBAdapter.java | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 4780098e0..6fabf9005 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -9,9 +9,9 @@ import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; +import android.text.TextUtils; import android.util.Log; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import java.util.Arrays; @@ -435,7 +435,7 @@ public class PodDBAdapter { values.put(KEY_IS_PAGED, feed.isPaged()); values.put(KEY_NEXT_PAGE_LINK, feed.getNextPageLink()); if(feed.getItemFilter() != null && feed.getItemFilter().getValues().length > 0) { - values.put(KEY_HIDE, StringUtils.join(feed.getItemFilter().getValues(), ",")); + values.put(KEY_HIDE, TextUtils.join( ",", feed.getItemFilter().getValues())); } else { values.put(KEY_HIDE, ""); } @@ -465,8 +465,8 @@ public class PodDBAdapter { public void setFeedItemFilter(long feedId, List filterValues) { ContentValues values = new ContentValues(); - values.put(KEY_HIDE, StringUtils.join(filterValues, ",")); - Log.d(TAG, StringUtils.join(filterValues, ",")); + values.put(KEY_HIDE, TextUtils.join(",", filterValues)); + Log.d(TAG, TextUtils.join(",", filterValues)); db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(feedId)}); } @@ -843,7 +843,7 @@ public class PodDBAdapter { ContentValues values = new ContentValues(); values.put(KEY_AUTO_DOWNLOAD, autoDownload); db.update(TABLE_NAME_FEED_ITEMS, values, KEY_ID + "=?", - new String[] { String.valueOf(feedItem.getId()) } ); + new String[]{String.valueOf(feedItem.getId())}); } public long getDownloadLogSize() { @@ -1294,9 +1294,21 @@ public class PodDBAdapter { } public final LongIntMap getNumberOfUnreadFeedItems(long... feedIds) { + // work around TextUtils.join wanting only boxed items + // and StringUtils.join() causing NoSuchMethodErrors on MIUI + StringBuilder builder = new StringBuilder(); + for (long id : feedIds) { + builder.append(id); + builder.append(','); + } + if (feedIds.length > 0) { + // there's an extra ',', get rid of it + builder.deleteCharAt(builder.length() - 1); + } + final String query = "SELECT " + KEY_FEED + ", COUNT(" + KEY_ID + ") AS count " + " FROM " + TABLE_NAME_FEED_ITEMS - + " WHERE " + KEY_FEED + " IN (" + StringUtils.join(feedIds, ',') + ") " + + " WHERE " + KEY_FEED + " IN (" + builder.toString() + ") " + " AND " + KEY_READ + " = 0" + " GROUP BY " + KEY_FEED; Cursor c = db.rawQuery(query, null); -- cgit v1.2.3 From aa789fa51dde0887f8f4785fdcf431ab91bcbf8f Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Fri, 19 Jun 2015 17:24:07 -0400 Subject: Have to set the fallback URL --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'core') 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 067095c32..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 @@ -414,6 +414,14 @@ public class FeedMedia extends FeedFile implements Playable { 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(); -- cgit v1.2.3 From 3d411388e6a2ba98f84bbf74d9e34baf7cd195c1 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Fri, 19 Jun 2015 23:28:33 -0400 Subject: remove log message --- .../main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java | 2 -- 1 file changed, 2 deletions(-) (limited to 'core') 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 246adb4c1..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 @@ -169,8 +169,6 @@ public class PicassoProvider { Uri fallback = Uri.parse(fallbackParam); bitmap = decodeStreamFromFile(data, fallback); } - - Log.wtf(TAG, "THIS SHOULD NEVER EVER HAPPEN!!"); } return new Result(bitmap, Picasso.LoadedFrom.DISK); -- cgit v1.2.3 From 1684358dadb72ea493993e72bc2414deb5f231c5 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 20 Jun 2015 15:57:54 +0200 Subject: Disable embedded images --- .../main/java/de/danoeh/antennapod/core/feed/FeedMedia.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'core') 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 999340900..ee05020cc 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 @@ -229,10 +229,12 @@ public class FeedMedia extends FeedFile implements Playable { } public boolean hasEmbeddedPicture() { - if(hasEmbeddedPicture == null) { - checkEmbeddedPicture(); - } - return hasEmbeddedPicture; + return false; + // TODO: reenable! + //if(hasEmbeddedPicture == null) { + // checkEmbeddedPicture(); + //} + //return hasEmbeddedPicture; } @Override @@ -421,7 +423,6 @@ public class FeedMedia extends FeedFile implements Playable { builder.appendQueryParameter(PARAM_FALLBACK, feedImgUri.toString()); } } - return builder.build(); } else { return item.getImageUri(); @@ -431,13 +432,11 @@ public class FeedMedia extends FeedFile implements Playable { @Override public void setDownloaded(boolean downloaded) { super.setDownloaded(downloaded); - checkEmbeddedPicture(); } @Override public void setFile_url(String file_url) { super.setFile_url(file_url); - checkEmbeddedPicture(); } private void checkEmbeddedPicture() { -- cgit v1.2.3