summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorJonas Kalderstam <jonas@cowboyprogrammer.org>2019-09-12 00:50:07 +0200
committerJonas Kalderstam <jonas@cowboyprogrammer.org>2019-09-12 00:50:07 +0200
commit4054c330acce74976a3e42e7ccc1f0d1dcb69c14 (patch)
tree5a04d66cbb52b26889f5d893f022845b2604eaf6 /core/src
parentada0101b0754cf4b34a1719f90f0b20571dab8db (diff)
downloadAntennaPod-4054c330acce74976a3e42e7ccc1f0d1dcb69c14.zip
Added per-feed playback speed setting
Fixes #375
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java13
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java12
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java38
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java10
6 files changed, 74 insertions, 6 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
index 3495164a6..3b70e4a4d 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
@@ -15,6 +15,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.core.asynctask.ImageResource;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.ShownotesProvider;
@@ -482,4 +483,16 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, ImageR
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
+
+ /**
+ *
+ * @return playback speed for this feed, or the global setting if no feed-specific setting
+ */
+ public float getFeedPlaybackSpeed() {
+ Feed feed = getFeed();
+ if (feed != null) {
+ return feed.getPreferences().getCurrentPlaybackSpeed();
+ }
+ return UserPreferences.getPlaybackSpeed();
+ }
}
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 218570632..192fa0c2d 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
@@ -623,4 +623,16 @@ public class FeedMedia extends FeedFile implements Playable {
}
return super.equals(o);
}
+
+ /**
+ *
+ * @return playback speed for this feed, or the global setting if no feed-specific setting
+ */
+ public float getFeedPlaybackSpeed() {
+ FeedItem item = getItem();
+ if (item != null) {
+ return item.getFeedPlaybackSpeed();
+ }
+ return UserPreferences.getPlaybackSpeed();
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java
index 3285ad7cb..7864f51bd 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java
@@ -28,12 +28,13 @@ public class FeedPreferences {
private AutoDeleteAction auto_delete_action;
private String username;
private String password;
+ private String feedPlaybackSpeed;
public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction auto_delete_action, String username, String password) {
- this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter());
+ this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter(), "global");
}
- private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter) {
+ private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter, String feedPlaybackSpeed) {
this.feedID = feedID;
this.autoDownload = autoDownload;
this.keepUpdated = keepUpdated;
@@ -41,6 +42,7 @@ public class FeedPreferences {
this.username = username;
this.password = password;
this.filter = filter;
+ this.feedPlaybackSpeed = feedPlaybackSpeed;
}
public static FeedPreferences fromCursor(Cursor cursor) {
@@ -52,6 +54,7 @@ public class FeedPreferences {
int indexPassword = cursor.getColumnIndex(PodDBAdapter.KEY_PASSWORD);
int indexIncludeFilter = cursor.getColumnIndex(PodDBAdapter.KEY_INCLUDE_FILTER);
int indexExcludeFilter = cursor.getColumnIndex(PodDBAdapter.KEY_EXCLUDE_FILTER);
+ int indexFeedPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_PLAYBACK_SPEED);
long feedId = cursor.getLong(indexId);
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
@@ -62,7 +65,8 @@ public class FeedPreferences {
String password = cursor.getString(indexPassword);
String includeFilter = cursor.getString(indexIncludeFilter);
String excludeFilter = cursor.getString(indexExcludeFilter);
- return new FeedPreferences(feedId, autoDownload, autoRefresh, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter));
+ String feedPlaybackSpeed = cursor.getString(indexFeedPlaybackSpeed);
+ return new FeedPreferences(feedId, autoDownload, autoRefresh, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter), feedPlaybackSpeed);
}
/**
@@ -175,4 +179,32 @@ public class FeedPreferences {
public void setPassword(String password) {
this.password = password;
}
+
+ public float getCurrentPlaybackSpeed() {
+ float speed = 0.0f;
+
+ if (!"global".equals(feedPlaybackSpeed)) {
+ try {
+ speed = Float.parseFloat(getFeedPlaybackSpeed());
+ } catch (NumberFormatException e) {
+ Log.e(TAG, Log.getStackTraceString(e));
+ setFeedPlaybackSpeed("global");
+ }
+ }
+
+ // Either global or error happened
+ if (speed == 0.0f) {
+ speed = UserPreferences.getPlaybackSpeed();
+ }
+
+ return speed;
+ }
+
+ public String getFeedPlaybackSpeed() {
+ return feedPlaybackSpeed;
+ }
+
+ public void setFeedPlaybackSpeed(String playbackSpeed) {
+ feedPlaybackSpeed = playbackSpeed;
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
index 5177fa6be..c2c503abe 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
@@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.ReentrantLock;
+import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.feed.MediaType;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.RewindAfterPauseUtils;
@@ -306,6 +307,8 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
acquireWifiLockIfNecessary();
if (media.getMediaType() == MediaType.VIDEO) {
setPlaybackParams(UserPreferences.getVideoPlaybackSpeed(), UserPreferences.isSkipSilence());
+ } else if (media instanceof FeedMedia) {
+ setPlaybackParams(((FeedMedia) media).getFeedPlaybackSpeed(), UserPreferences.isSkipSilence());
} else {
setPlaybackParams(UserPreferences.getPlaybackSpeed(), UserPreferences.isSkipSilence());
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java
index 306f8d104..ddc8e770a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java
@@ -288,6 +288,10 @@ class DBUpgrader {
db.execSQL("DROP TABLE " + PodDBAdapter.TABLE_NAME_FEED_IMAGES);
}
+ if (oldVersion < 1070306) {
+ db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
+ + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " TEXT");
+ }
}
}
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 13ea9daf0..63c036b6e 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
@@ -114,6 +114,7 @@ public class PodDBAdapter {
public static final String KEY_LAST_PLAYED_TIME = "last_played_time";
public static final String KEY_INCLUDE_FILTER = "include_filter";
public static final String KEY_EXCLUDE_FILTER = "exclude_filter";
+ public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed";
// Table names
static final String TABLE_NAME_FEEDS = "Feeds";
@@ -146,7 +147,8 @@ public class PodDBAdapter {
+ KEY_NEXT_PAGE_LINK + " TEXT,"
+ KEY_HIDE + " TEXT,"
+ KEY_LAST_UPDATE_FAILED + " INTEGER DEFAULT 0,"
- + KEY_AUTO_DELETE_ACTION + " INTEGER DEFAULT 0)";
+ + KEY_AUTO_DELETE_ACTION + " INTEGER DEFAULT 0,"
+ + KEY_FEED_PLAYBACK_SPEED + " TEXT)";
private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE "
+ TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE
@@ -243,7 +245,8 @@ public class PodDBAdapter {
TABLE_NAME_FEEDS + "." + KEY_LAST_UPDATE_FAILED,
TABLE_NAME_FEEDS + "." + KEY_AUTO_DELETE_ACTION,
TABLE_NAME_FEEDS + "." + KEY_INCLUDE_FILTER,
- TABLE_NAME_FEEDS + "." + KEY_EXCLUDE_FILTER
+ TABLE_NAME_FEEDS + "." + KEY_EXCLUDE_FILTER,
+ TABLE_NAME_FEEDS + "." + KEY_FEED_PLAYBACK_SPEED
};
/**
@@ -408,6 +411,7 @@ public class PodDBAdapter {
values.put(KEY_PASSWORD, prefs.getPassword());
values.put(KEY_INCLUDE_FILTER, prefs.getFilter().getIncludeFilter());
values.put(KEY_EXCLUDE_FILTER, prefs.getFilter().getExcludeFilter());
+ values.put(KEY_FEED_PLAYBACK_SPEED, prefs.getFeedPlaybackSpeed());
db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(prefs.getFeedID())});
}
@@ -1452,7 +1456,7 @@ public class PodDBAdapter {
*/
private static class PodDBHelper extends SQLiteOpenHelper {
- private static final int VERSION = 1060596;
+ private static final int VERSION = 1070306;
private final Context context;