summaryrefslogtreecommitdiff
path: root/app/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 /app/src
parentada0101b0754cf4b34a1719f90f0b20571dab8db (diff)
downloadAntennaPod-4054c330acce74976a3e42e7ccc1f0d1dcb69c14.zip
Added per-feed playback speed setting
Fixes #375
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java19
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java13
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java18
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java43
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java2
-rw-r--r--app/src/main/res/xml/feed_settings.xml4
6 files changed, 93 insertions, 6 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
index 2321a3602..222923448 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
@@ -24,6 +24,9 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
private final AtomicBoolean isSetup = new AtomicBoolean(false);
+ // Used to work around race condition in updating the controller speed and receiving the callback that it has changed
+ private float playbackSpeed = -1;
+
@Override
protected void onResume() {
super.onResume();
@@ -78,7 +81,10 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
}
float speed = 1.0f;
if(controller.canSetPlaybackSpeed()) {
- speed = UserPreferences.getPlaybackSpeed();
+ speed = playbackSpeed;
+ if (speed == -1) {
+ speed = getPlaybackSpeedForMedia();
+ }
}
String speedStr = new DecimalFormat("0.00x").format(speed);
butPlaybackSpeed.setText(speedStr);
@@ -102,7 +108,13 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
String[] availableSpeeds = UserPreferences.getPlaybackSpeedArray();
DecimalFormatSymbols format = new DecimalFormatSymbols(Locale.US);
format.setDecimalSeparator('.');
- String currentSpeed = new DecimalFormat("0.00", format).format(UserPreferences.getPlaybackSpeed());
+
+ float currentSpeedValue = controller.getCurrentPlaybackSpeedMultiplier();
+ if (currentSpeedValue == -1) {
+ currentSpeedValue = getPlaybackSpeedForMedia();
+ }
+
+ String currentSpeed = new DecimalFormat("0.00", format).format(currentSpeedValue);
// Provide initial value in case the speed list has changed
// out from under us
@@ -124,8 +136,9 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
break;
}
}
+ playbackSpeed = Float.parseFloat(newSpeed);
UserPreferences.setPlaybackSpeed(newSpeed);
- controller.setPlaybackSpeed(Float.parseFloat(newSpeed));
+ controller.setPlaybackSpeed(playbackSpeed);
onPositionObserverUpdate();
} else {
VariableSpeedDialog.showGetPluginDialog(this);
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
index 52497a27f..9f364fec1 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
@@ -872,4 +872,17 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
}
}
}
+
+ protected float getPlaybackSpeedForMedia() {
+ if (controller != null) {
+ Playable media = controller.getMedia();
+ boolean isFeedMedia = media instanceof FeedMedia;
+
+ if (isFeedMedia) {
+ return ((FeedMedia) media).getFeedPlaybackSpeed();
+ }
+ }
+
+ return UserPreferences.getPlaybackSpeed();
+ }
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java
index e8c7520b7..4c52e7c75 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java
@@ -8,14 +8,18 @@ import android.widget.Button;
import android.widget.CheckBox;
import android.widget.SeekBar;
import android.widget.TextView;
+
import com.afollestad.materialdialogs.MaterialDialog;
+
+import java.util.Locale;
+
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.Converter;
+import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
-import java.util.Locale;
-
public class PlaybackControlsDialog extends DialogFragment {
private static final float PLAYBACK_SPEED_STEP = 0.05f;
private static final float DEFAULT_MIN_PLAYBACK_SPEED = 0.5f;
@@ -209,6 +213,16 @@ public class PlaybackControlsDialog extends DialogFragment {
if (isPlayingVideo) {
return UserPreferences.getVideoPlaybackSpeed();
}
+
+ if (controller != null) {
+ Playable media = controller.getMedia();
+ boolean isFeedMedia = media instanceof FeedMedia;
+
+ if (isFeedMedia) {
+ return ((FeedMedia) media).getFeedPlaybackSpeed();
+ }
+ }
+
return UserPreferences.getPlaybackSpeed();
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
index 4fb3d90f5..56d58d1db 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
@@ -22,6 +22,7 @@ import static de.danoeh.antennapod.activity.FeedSettingsActivity.EXTRA_FEED_ID;
public class FeedSettingsFragment extends PreferenceFragmentCompat {
private static final CharSequence PREF_EPISODE_FILTER = "episodeFilter";
+ private static final String PREF_FEED_PLAYBACK_SPEED = "feedPlaybackSpeed";
private Feed feed;
private FeedPreferences feedPreferences;
@@ -40,12 +41,41 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
setupAutoDeletePreference();
setupAuthentificationPreference();
setupEpisodeFilterPreference();
+ setupPlaybackSpeedPreference();
updateAutoDeleteSummary();
updateAutoDownloadEnabled();
+ updatePlaybackSpeedPreference();
}).dispose();
}
+ private void setupPlaybackSpeedPreference() {
+ ListPreference feedPlaybackSpeedPreference = (ListPreference) findPreference(PREF_FEED_PLAYBACK_SPEED);
+
+ String[] speeds = UserPreferences.getPlaybackSpeedArray();
+
+ String[] values = new String[speeds.length + 1];
+ values[0] = "global";
+
+ String[] entries = new String[speeds.length + 1];
+ entries[0] = getString(R.string.feed_auto_download_global);
+
+ for (int i = 0; i < speeds.length; i++) {
+ values[i + 1] = speeds[i];
+ entries[i + 1] = speeds[i];
+ }
+
+ feedPlaybackSpeedPreference.setEntryValues(values);
+ feedPlaybackSpeedPreference.setEntries(entries);
+
+ feedPlaybackSpeedPreference.setOnPreferenceChangeListener((preference, newValue) -> {
+ feedPreferences.setFeedPlaybackSpeed((String) newValue);
+ feed.savePreferences();
+ updatePlaybackSpeedPreference();
+ return false;
+ });
+ }
+
private void setupEpisodeFilterPreference() {
findPreference(PREF_EPISODE_FILTER).setOnPreferenceClickListener(preference -> {
new EpisodeFilterDialog(getContext(), feedPreferences.getFilter()) {
@@ -95,6 +125,19 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
});
}
+ private void updatePlaybackSpeedPreference() {
+ ListPreference feedPlaybackSpeedPreference = (ListPreference) findPreference(PREF_FEED_PLAYBACK_SPEED);
+
+ String summary = feedPreferences.getFeedPlaybackSpeed();
+
+ feedPlaybackSpeedPreference.setValue(summary);
+ if (summary.equals("global")) {
+ summary = getString(R.string.feed_auto_download_global);
+ }
+
+ feedPlaybackSpeedPreference.setSummary(summary);
+ }
+
private void updateAutoDeleteSummary() {
ListPreference autoDeletePreference = (ListPreference) findPreference("autoDelete");
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index 9763f8f2d..902708e9a 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -598,8 +598,8 @@ public class QueueFragment extends Fragment {
String info = queue.size() + getString(R.string.episodes_suffix);
if(queue.size() > 0) {
long timeLeft = 0;
- float playbackSpeed = UserPreferences.getPlaybackSpeed();
for(FeedItem item : queue) {
+ float playbackSpeed = item.getFeedPlaybackSpeed();
if(item.getMedia() != null) {
timeLeft +=
(long) ((item.getMedia().getDuration() - item.getMedia().getPosition())
diff --git a/app/src/main/res/xml/feed_settings.xml b/app/src/main/res/xml/feed_settings.xml
index 5fd6b2038..16e008e0d 100644
--- a/app/src/main/res/xml/feed_settings.xml
+++ b/app/src/main/res/xml/feed_settings.xml
@@ -7,6 +7,10 @@
android:title="@string/keep_updated"
android:summary="@string/keep_updated_summary"/>
+ <ListPreference
+ android:title="@string/playback_speed"
+ android:key="feedPlaybackSpeed"/>
+
<Preference
android:key="authentication"
android:title="@string/authentication_label"