diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2021-08-07 07:40:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-07 07:40:45 +0200 |
commit | 99fea4e07f6d12b77634c8686744e93ecc1421e1 (patch) | |
tree | b3deeb682cce5949cfbdbacf4c8bd0dda7a20d6b /core | |
parent | 1bb921409524e786b58f8bed1b6763c7e4197006 (diff) | |
parent | b6fcc8bc5a64549e7d2bef545934a9fa0beb42aa (diff) | |
download | AntennaPod-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')
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){ |