summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java21
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java32
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java24
3 files changed, 57 insertions, 20 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 4f2d5b204..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);
@@ -266,6 +272,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 +316,14 @@ public class PicassoProvider {
// the following line:
//
// Stack Blur Algorithm by Mario Klingemann <mario@quasimondo.com>
+ 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);
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..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
@@ -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,12 @@ public class FeedMedia extends FeedFile implements Playable {
}
public boolean hasEmbeddedPicture() {
- return this.hasEmbeddedPicture;
+ return false;
+ // TODO: reenable!
+ //if(hasEmbeddedPicture == null) {
+ // checkEmbeddedPicture();
+ //}
+ //return hasEmbeddedPicture;
}
@Override
@@ -409,9 +413,16 @@ 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();
@@ -421,18 +432,16 @@ 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() {
if (!localFileAvailable()) {
- hasEmbeddedPicture = false;
+ hasEmbeddedPicture = Boolean.FALSE;
return;
}
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
@@ -440,14 +449,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;
}
}
}
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<String> 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);