summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java22
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java22
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java20
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java26
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java12
6 files changed, 97 insertions, 9 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java b/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java
index d0824e00b..cd98507ba 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java
@@ -4,6 +4,7 @@ import android.util.Log;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
+import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.playback.MediaType;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
@@ -50,4 +51,25 @@ public final class PlaybackSpeedUtils {
return playbackSpeed;
}
+
+ /**
+ * Returns the currently configured skip silence for the specified media.
+ */
+ public static FeedPreferences.SkipSilence getCurrentSkipSilencePreference(Playable media) {
+ FeedPreferences.SkipSilence skipSilence = FeedPreferences.SkipSilence.GLOBAL;
+ if (media != null) {
+ skipSilence = PlaybackPreferences.getCurrentlyPlayingTemporarySkipSilence();
+ if (skipSilence == FeedPreferences.SkipSilence.GLOBAL && media instanceof FeedMedia) {
+ FeedItem item = ((FeedMedia) media).getItem();
+ if (item != null && item.getFeed() != null && item.getFeed().getPreferences() != null) {
+ skipSilence = item.getFeed().getPreferences().getFeedSkipSilence();
+ }
+ }
+ }
+ if (skipSilence == FeedPreferences.SkipSilence.GLOBAL) {
+ skipSilence = UserPreferences.isSkipSilence()
+ ? FeedPreferences.SkipSilence.AGGRESSIVE : FeedPreferences.SkipSilence.OFF;
+ }
+ return skipSilence;
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
index 160b6b774..d6f6cdb43 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
@@ -10,6 +10,7 @@ import android.util.Log;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.event.PlayerStatusEvent;
import de.danoeh.antennapod.model.feed.FeedMedia;
+import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.playback.MediaType;
import de.danoeh.antennapod.model.playback.Playable;
import de.danoeh.antennapod.playback.base.PlayerStatus;
@@ -64,6 +65,12 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED
= "de.danoeh.antennapod.preferences.temporaryPlaybackSpeed";
+ /**
+ * A temporary skip silence preference which overrides the per-feed skip silence for the currently playing
+ * media. Considered unset if set to null;
+ */
+ private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE
+ = "de.danoeh.antennapod.preferences.temporarySkipSilence";
/**
* Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing.
@@ -123,6 +130,11 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
return prefs.getFloat(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED, SPEED_USE_GLOBAL);
}
+ public static FeedPreferences.SkipSilence getCurrentlyPlayingTemporarySkipSilence() {
+ return FeedPreferences.SkipSilence.fromCode(prefs.getInt(
+ PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE, FeedPreferences.SkipSilence.GLOBAL.code));
+ }
+
public static void writeNoMediaPlaying() {
SharedPreferences.Editor editor = prefs.edit();
editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING);
@@ -170,9 +182,17 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
editor.apply();
}
- public static void clearCurrentlyPlayingTemporaryPlaybackSpeed() {
+ public static void setCurrentlyPlayingTemporarySkipSilence(boolean skipSilence) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putInt(PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE, skipSilence
+ ? FeedPreferences.SkipSilence.AGGRESSIVE.code : FeedPreferences.SkipSilence.OFF.code);
+ editor.apply();
+ }
+
+ public static void clearCurrentlyPlayingTemporaryPlaybackSettings() {
SharedPreferences.Editor editor = prefs.edit();
editor.remove(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED);
+ editor.remove(PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE);
editor.apply();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java
index 4e29c9b8a..8ee47a147 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java
@@ -166,6 +166,10 @@ public class ExoPlayerWrapper {
return playbackParameters.speed;
}
+ public boolean getCurrentSkipSilence() {
+ return exoPlayer.getSkipSilenceEnabled();
+ }
+
public int getDuration() {
if (exoPlayer.getDuration() == C.TIME_UNSET) {
return Playable.INVALID_TIME;
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 69c632c4f..2ad8f2b8a 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
@@ -161,7 +161,9 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
try {
callback.ensureMediaInfoLoaded(media);
callback.onMediaChanged(false);
- setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence());
+ setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media),
+ PlaybackSpeedUtils.getCurrentSkipSilencePreference(media)
+ == FeedPreferences.SkipSilence.AGGRESSIVE);
if (stream) {
if (playable instanceof FeedMedia) {
FeedMedia feedMedia = (FeedMedia) playable;
@@ -212,7 +214,9 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
Log.d(TAG, "Resuming/Starting playback");
acquireWifiLockIfNecessary();
- setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence());
+ setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media),
+ PlaybackSpeedUtils.getCurrentSkipSilencePreference(media)
+ == FeedPreferences.SkipSilence.AGGRESSIVE);
setVolume(1.0f, 1.0f);
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
@@ -461,6 +465,18 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
return retVal;
}
+ @Override
+ public boolean getSkipSilence() {
+ boolean retVal = false;
+ if ((playerStatus == PlayerStatus.PLAYING
+ || playerStatus == PlayerStatus.PAUSED
+ || playerStatus == PlayerStatus.INITIALIZED
+ || playerStatus == PlayerStatus.PREPARED)) {
+ retVal = mediaPlayer.getCurrentSkipSilence();
+ }
+ return retVal;
+ }
+
/**
* Sets the playback volume.
* This method is executed on an internal executor service.
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index fd11dc4c5..401d09ad7 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -750,7 +750,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
if (!playable.getIdentifier().equals(PlaybackPreferences.getCurrentlyPlayingFeedMediaId())) {
- PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSpeed();
+ PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSettings();
}
mediaPlayer.playMediaObject(playable, stream, true, true);
@@ -1047,7 +1047,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
*/
private void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) {
Log.d(TAG, "Playback ended");
- PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSpeed();
+ PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSettings();
if (stopPlaying) {
taskManager.cancelPositionSaver();
cancelPositionObserver();
@@ -1604,8 +1604,15 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (((FeedMedia) getPlayable()).getItem().getFeed().getId() == event.getFeedId()) {
if (event.getSpeed() == SPEED_USE_GLOBAL) {
setSpeed(UserPreferences.getPlaybackSpeed(getPlayable().getMediaType()));
+ setSkipSilence(UserPreferences.isSkipSilence());
} else {
setSpeed(event.getSpeed());
+ FeedPreferences.SkipSilence skipSilence = event.getSkipSilence();
+ if (skipSilence == FeedPreferences.SkipSilence.GLOBAL) {
+ setSkipSilence(UserPreferences.isSkipSilence());
+ } else {
+ setSkipSilence(skipSilence == FeedPreferences.SkipSilence.AGGRESSIVE);
+ }
}
}
}
@@ -1669,20 +1676,29 @@ public class PlaybackService extends MediaBrowserServiceCompat {
UserPreferences.setPlaybackSpeed(speed);
}
- mediaPlayer.setPlaybackParams(speed, UserPreferences.isSkipSilence());
+ mediaPlayer.setPlaybackParams(speed, getCurrentSkipSilence());
}
- public void skipSilence(boolean skipSilence) {
+ public void setSkipSilence(boolean skipSilence) {
+ PlaybackPreferences.setCurrentlyPlayingTemporarySkipSilence(skipSilence);
+ UserPreferences.setSkipSilence(skipSilence);
mediaPlayer.setPlaybackParams(getCurrentPlaybackSpeed(), skipSilence);
}
public float getCurrentPlaybackSpeed() {
- if(mediaPlayer == null) {
+ if (mediaPlayer == null) {
return 1.0f;
}
return mediaPlayer.getPlaybackSpeed();
}
+ public boolean getCurrentSkipSilence() {
+ if (mediaPlayer == null) {
+ return false;
+ }
+ return mediaPlayer.getSkipSilence();
+ }
+
public boolean isStartWhenPrepared() {
return mediaPlayer.isStartWhenPrepared();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
index 2274dcf83..f17bd7e31 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
@@ -18,6 +18,7 @@ import de.danoeh.antennapod.event.playback.PlaybackPositionEvent;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
import de.danoeh.antennapod.event.playback.SpeedChangedEvent;
+import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.playback.MediaType;
import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
@@ -407,7 +408,7 @@ public abstract class PlaybackController {
public void setSkipSilence(boolean skipSilence) {
if (playbackService != null) {
- playbackService.skipSilence(skipSilence);
+ playbackService.setSkipSilence(skipSilence);
}
}
@@ -419,6 +420,15 @@ public abstract class PlaybackController {
}
}
+ public boolean getCurrentPlaybackSkipSilence() {
+ if (playbackService != null) {
+ return playbackService.getCurrentSkipSilence();
+ } else {
+ return PlaybackSpeedUtils.getCurrentSkipSilencePreference(getMedia())
+ == FeedPreferences.SkipSilence.AGGRESSIVE;
+ }
+ }
+
public List<String> getAudioTracks() {
if (playbackService == null) {
return Collections.emptyList();