summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2021-08-07 07:40:45 +0200
committerGitHub <noreply@github.com>2021-08-07 07:40:45 +0200
commit99fea4e07f6d12b77634c8686744e93ecc1421e1 (patch)
treeb3deeb682cce5949cfbdbacf4c8bd0dda7a20d6b /core
parent1bb921409524e786b58f8bed1b6763c7e4197006 (diff)
parentb6fcc8bc5a64549e7d2bef545934a9fa0beb42aa (diff)
downloadAntennaPod-99fea4e07f6d12b77634c8686744e93ecc1421e1.zip
Merge pull request #5330 from ByteHamster/load-next-media
When continuous playback is disabled, show next episode in notification
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java8
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java38
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java12
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java8
4 files changed, 29 insertions, 37 deletions
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 3016b96d5..f74e3b9ad 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
@@ -947,14 +947,10 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
// is an episode in the queue left.
// Start playback immediately if continuous playback is enabled
nextMedia = callback.getNextInQueue(currentMedia);
-
- boolean playNextEpisode = isPlaying &&
- nextMedia != null &&
- UserPreferences.isFollowQueue();
-
+ boolean playNextEpisode = isPlaying && nextMedia != null;
if (playNextEpisode) {
Log.d(TAG, "Playback of next episode will start immediately.");
- } else if (nextMedia == null){
+ } else if (nextMedia == null) {
Log.d(TAG, "No more episodes available to play");
} else {
Log.d(TAG, "Loading next episode, but not playing automatically.");
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 2da06e226..c38d28380 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
@@ -736,7 +736,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
mediaPlayer.playMediaObject(playable, PlaybackPreferences.getCurrentEpisodeIsStream(),
true, true);
stateManager.validStartCommandWasReceived();
- PlaybackService.this.updateMediaSessionMetadata(playable);
+ updateNotificationAndMediaSession(playable);
addPlayableToQueue(playable);
}, error -> {
Log.d(TAG, "Playable was not loaded from preferences. Stopping service.");
@@ -757,7 +757,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
public void notifyVideoSurfaceAbandoned() {
mediaPlayer.pause(true, false);
mediaPlayer.resetVideoSurface();
- setupNotification(getPlayable());
+ updateNotificationAndMediaSession(getPlayable());
stateManager.stopForeground(!UserPreferences.isPersistNotify());
}
@@ -813,7 +813,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
case INITIALIZED:
PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable,
mediaPlayer.getPSMPInfo().playerStatus, mediaPlayer.isStreaming());
- setupNotification(newInfo);
+ updateNotificationAndMediaSession(newInfo.playable);
break;
case PREPARED:
@@ -825,7 +825,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
// do not remove notification on pause based on user pref and whether android version supports expanded notifications
// Change [Play] button to [Pause]
- setupNotification(newInfo);
+ updateNotificationAndMediaSession(newInfo.playable);
} else if (!UserPreferences.isPersistNotify() && !isCasting) {
// remove notification on pause
stateManager.stopForeground(true);
@@ -841,7 +841,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
case PLAYING:
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
- setupNotification(newInfo);
+ updateNotificationAndMediaSession(newInfo.playable);
setupPositionObserver();
stateManager.validStartCommandWasReceived();
// set sleep timer if auto-enabled
@@ -868,7 +868,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
@Override
public void shouldStop() {
- setupNotification(getPlayable()); // Stops foreground if not playing
+ updateNotificationAndMediaSession(getPlayable()); // Stops foreground if not playing
}
@Override
@@ -887,7 +887,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (reloadUI) {
sendNotificationBroadcast(NOTIFICATION_TYPE_RELOAD, 0);
}
- PlaybackService.this.updateMediaSessionMetadata(getPlayable());
+ updateNotificationAndMediaSession(getPlayable());
}
@Override
@@ -905,8 +905,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
// Playable is being streamed and does not have a duration specified in the feed
playable.setDuration(mediaPlayer.getDuration());
DBWriter.setFeedMedia((FeedMedia) playable);
- updateMediaSessionMetadata(playable);
- setupNotification(playable);
+ updateNotificationAndMediaSession(playable);
}
return true;
@@ -1000,6 +999,12 @@ public class PlaybackService extends MediaBrowserServiceCompat {
return null;
}
+ if (!UserPreferences.isFollowQueue()) {
+ Log.d(TAG, "getNextInQueue(), but follow queue is not enabled.");
+ updateNotificationAndMediaSession(nextItem.getMedia());
+ return null;
+ }
+
if (!nextItem.getMedia().localFileAvailable() && !NetworkUtils.isStreamingAllowed()
&& UserPreferences.isFollowQueue() && !nextItem.getFeed().isLocalFeed()) {
displayStreamingNotAllowedNotification(
@@ -1273,6 +1278,11 @@ public class PlaybackService extends MediaBrowserServiceCompat {
(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP));
}
+ private void updateNotificationAndMediaSession(final Playable p) {
+ updateMediaSessionMetadata(p);
+ setupNotification(p);
+ }
+
private void updateMediaSessionMetadata(final Playable p) {
if (p == null || mediaSession == null) {
return;
@@ -1314,10 +1324,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
/**
* Prepares notification and starts the service in the foreground.
*/
- private void setupNotification(final PlaybackServiceMediaPlayer.PSMPInfo info) {
- setupNotification(info.playable);
- }
-
private synchronized void setupNotification(final Playable playable) {
Log.d(TAG, "setupNotification");
if (playableIconLoaderThread != null) {
@@ -1898,7 +1904,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
private final SharedPreferences.OnSharedPreferenceChangeListener prefListener =
(sharedPreferences, key) -> {
if (UserPreferences.PREF_LOCKSCREEN_BACKGROUND.equals(key)) {
- updateMediaSessionMetadata(getPlayable());
+ updateNotificationAndMediaSession(getPlayable());
} else {
flavorHelper.onSharedPreference(key);
}
@@ -1961,7 +1967,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
@Override
public void setupNotification(boolean connected, PlaybackServiceMediaPlayer.PSMPInfo info) {
if (connected) {
- PlaybackService.this.setupNotification(info);
+ PlaybackService.this.updateNotificationAndMediaSession(info.playable);
} else {
PlayerStatus status = info.playerStatus;
if ((status == PlayerStatus.PLAYING ||
@@ -1969,7 +1975,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
status == PlayerStatus.PREPARING ||
UserPreferences.isPersistNotify()) &&
android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- PlaybackService.this.setupNotification(info);
+ PlaybackService.this.updateNotificationAndMediaSession(info.playable);
} else if (!UserPreferences.isPersistNotify()) {
stateManager.stopForeground(true);
}
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 cd69147a6..7f4c1ceaf 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
@@ -274,13 +274,13 @@ public abstract class PlaybackController {
*/
private void handleStatus() {
Log.d(TAG, "status: " + status.toString());
+ checkMediaInfoLoaded();
switch (status) {
case ERROR:
EventBus.getDefault().post(new MessageEvent(activity.getString(R.string.player_error_msg)));
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
break;
case PAUSED:
- checkMediaInfoLoaded();
onPositionObserverUpdate();
updatePlayButtonShowsPlay(true);
if (!PlaybackService.isCasting() && PlaybackService.getCurrentMediaType() == MediaType.VIDEO) {
@@ -288,7 +288,6 @@ public abstract class PlaybackController {
}
break;
case PLAYING:
- checkMediaInfoLoaded();
if (!PlaybackService.isCasting() && PlaybackService.getCurrentMediaType() == MediaType.VIDEO) {
onAwaitingVideoSurface();
setScreenOn(true);
@@ -296,26 +295,23 @@ public abstract class PlaybackController {
updatePlayButtonShowsPlay(false);
break;
case PREPARING:
- checkMediaInfoLoaded();
if (playbackService != null) {
updatePlayButtonShowsPlay(!playbackService.isStartWhenPrepared());
}
break;
- case STOPPED:
- updatePlayButtonShowsPlay(true);
- break;
case PREPARED:
- checkMediaInfoLoaded();
updatePlayButtonShowsPlay(true);
onPositionObserverUpdate();
break;
case SEEKING:
onPositionObserverUpdate();
break;
+ case STOPPED: // Fall-through
case INITIALIZED:
- checkMediaInfoLoaded();
updatePlayButtonShowsPlay(true);
break;
+ default:
+ break;
}
}
diff --git a/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java b/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java
index 9fd99f236..38b469e8e 100644
--- a/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java
+++ b/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java
@@ -32,7 +32,6 @@ import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.model.playback.RemoteMedia;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.playback.MediaType;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.RewindAfterPauseUtils;
import de.danoeh.antennapod.model.playback.Playable;
@@ -367,8 +366,6 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
@Override
public void resume() {
try {
- // TODO see comment on prepare()
- // setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
int newPosition = RewindAfterPauseUtils.calculatePositionWithRewind(
media.getPosition(),
@@ -405,9 +402,6 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
position,
media.getLastPlayedTime());
}
- // TODO We're not supporting user set stream volume yet, as we need to make a UI
- // that doesn't allow changing playback speed or have different values for left/right
- //setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
castMgr.loadMedia(remoteMedia, startWhenPrepared.get(), position);
} catch (TransientNetworkDisconnectionException | NoConnectionException e) {
Log.e(TAG, "Error loading media", e);
@@ -629,7 +623,7 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
if (shouldContinue) {
nextMedia = callback.getNextInQueue(currentMedia);
- boolean playNextEpisode = isPlaying && nextMedia != null && UserPreferences.isFollowQueue();
+ boolean playNextEpisode = isPlaying && nextMedia != null;
if (playNextEpisode) {
Log.d(TAG, "Playback of next episode will start immediately.");
} else if (nextMedia == null){