From 6b1a7a9162cb27f0b2aa3e550069945b6e0d95f3 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Thu, 12 Sep 2019 10:57:16 +0200 Subject: Fixed playback speed issues when switching to next media Fixes some issues related to the playback speed when playback was completed or playback was paused and the app went away for awhile. Now a media item which is "in progress" will remember its playback speed so that it can be restored properly. The per-feed-media speed is cleared once playback finishes, either by reaching the end or by the user starting to play something different. --- .../antennapod/activity/AudioplayerActivity.java | 22 +++++++++++++--------- .../antennapod/activity/MediaplayerActivity.java | 2 +- .../antennapod/dialog/PlaybackControlsDialog.java | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) (limited to 'app/src/main/java') 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 222923448..5e81295b1 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -11,9 +11,11 @@ import java.text.DecimalFormatSymbols; import java.util.Locale; import java.util.concurrent.atomic.AtomicBoolean; +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.service.playback.PlaybackService; +import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.dialog.VariableSpeedDialog; /** @@ -24,9 +26,6 @@ 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(); @@ -81,10 +80,7 @@ public class AudioplayerActivity extends MediaplayerInfoActivity { } float speed = 1.0f; if(controller.canSetPlaybackSpeed()) { - speed = playbackSpeed; - if (speed == -1) { - speed = getPlaybackSpeedForMedia(); - } + speed = getPlaybackSpeedForMedia(); } String speedStr = new DecimalFormat("0.00x").format(speed); butPlaybackSpeed.setText(speedStr); @@ -136,9 +132,10 @@ public class AudioplayerActivity extends MediaplayerInfoActivity { break; } } - playbackSpeed = Float.parseFloat(newSpeed); + + storeNewMediaPlaybackSpeed(newSpeed); UserPreferences.setPlaybackSpeed(newSpeed); - controller.setPlaybackSpeed(playbackSpeed); + controller.setPlaybackSpeed(Float.parseFloat(newSpeed)); onPositionObserverUpdate(); } else { VariableSpeedDialog.showGetPluginDialog(this); @@ -151,4 +148,11 @@ public class AudioplayerActivity extends MediaplayerInfoActivity { butPlaybackSpeed.setVisibility(View.VISIBLE); } } + + private void storeNewMediaPlaybackSpeed(String speed) { + Playable media = controller.getMedia(); + if (media instanceof FeedMedia) { + ((FeedMedia) media).updateLastPlaybackSpeed(speed); + } + } } 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 9f364fec1..b6697ef52 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -879,7 +879,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements boolean isFeedMedia = media instanceof FeedMedia; if (isFeedMedia) { - return ((FeedMedia) media).getFeedPlaybackSpeed(); + return ((FeedMedia) media).getMediaPlaybackSpeed(); } } 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 4c52e7c75..86720f40a 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java @@ -219,7 +219,7 @@ public class PlaybackControlsDialog extends DialogFragment { boolean isFeedMedia = media instanceof FeedMedia; if (isFeedMedia) { - return ((FeedMedia) media).getFeedPlaybackSpeed(); + return ((FeedMedia) media).getMediaPlaybackSpeed(); } } -- cgit v1.2.3