From c17723816b9fd69bf3c541b177e48d195a69b28f Mon Sep 17 00:00:00 2001 From: Domingos Lopes Date: Fri, 13 May 2016 01:33:05 -0400 Subject: adapt media player switch into the new protocol --- .../playback/PlaybackServiceFlavorHelper.java | 9 +++- .../core/service/playback/RemotePSMP.java | 61 +++++++++++++--------- 2 files changed, 44 insertions(+), 26 deletions(-) (limited to 'core/src/play/java/de/danoeh') diff --git a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java index a00e86e73..c7428947b 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java +++ b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java @@ -15,6 +15,8 @@ import android.widget.Toast; import com.google.android.gms.cast.ApplicationMetadata; import com.google.android.libraries.cast.companionlibrary.cast.BaseCastManager; +import java.util.concurrent.ExecutionException; + import de.danoeh.antennapod.core.cast.CastConsumer; import de.danoeh.antennapod.core.cast.CastManager; import de.danoeh.antennapod.core.cast.DefaultCastConsumer; @@ -182,8 +184,11 @@ public class PlaybackServiceFlavorHelper { boolean wasLaunched) { PlaybackServiceMediaPlayer mediaPlayer = callback.getMediaPlayer(); if (mediaPlayer != null) { - //TODO change implementation to new protocol -// mediaPlayer.endPlayback(true, true); + try { + mediaPlayer.stopPlayback(false).get(); + } catch (InterruptedException | ExecutionException e) { + Log.e(TAG, "There was a problem stopping playback while switching media players", e); + } mediaPlayer.shutdownQuietly(); } mediaPlayer = newPlayer; 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 ee6cb653c..e594f14ec 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 @@ -15,6 +15,8 @@ import com.google.android.libraries.cast.companionlibrary.cast.exceptions.CastEx import com.google.android.libraries.cast.companionlibrary.cast.exceptions.NoConnectionException; import com.google.android.libraries.cast.companionlibrary.cast.exceptions.TransientNetworkDisconnectionException; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; import java.util.concurrent.atomic.AtomicBoolean; import de.danoeh.antennapod.core.R; @@ -121,7 +123,7 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer { } if (playbackEnded) { // This is an unconventional thing to occur... - endPlayback(true); + endPlayback(true, true, true); } } @@ -259,13 +261,13 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer { if (mediaChanged && currentMedia != null) { media = currentMedia; } - endPlayback(false); + endPlayback(false, true, true); return; case MediaStatus.IDLE_REASON_ERROR: Log.w(TAG, "Got an error status from the Chromecast. Skipping, if possible, to the next episode..."); callback.onMediaPlayerInfo(CAST_ERROR_PRIORITY_HIGH, R.string.cast_failed_media_error_skipping); - endPlayback(true); + endPlayback(true, true, true); return; } break; @@ -597,7 +599,7 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer { } @Override - protected void endPlayback(boolean wasSkipped) { + protected Future endPlayback(boolean wasSkipped, boolean shouldContinue, boolean toStoppedState) { Log.d(TAG, "endPlayback() called"); boolean isPlaying = playerStatus == PlayerStatus.PLAYING; if (playerStatus != PlayerStatus.INDETERMINATE) { @@ -611,32 +613,43 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer { } } final Playable currentMedia = media; - Playable nextMedia = callback.getNextInQueue(currentMedia); + Playable nextMedia = null; + if (shouldContinue) { + nextMedia = callback.getNextInQueue(currentMedia); + + boolean playNextEpisode = isPlaying && nextMedia != null && UserPreferences.isFollowQueue(); + if (playNextEpisode) { + Log.d(TAG, "Playback of next episode will start immediately."); + } else if (nextMedia == null){ + Log.d(TAG, "No more episodes available to play"); + } else { + Log.d(TAG, "Loading next episode, but not playing automatically."); + } - boolean playNextEpisode = isPlaying && nextMedia != null && UserPreferences.isFollowQueue(); - if (playNextEpisode) { - Log.d(TAG, "Playback of next episode will start immediately."); - } else if (nextMedia == null){ - Log.d(TAG, "No more episodes available to play"); - } else { - Log.d(TAG, "Loading next episode, but not playing automatically."); + if (nextMedia != null) { + callback.onPlaybackEnded(nextMedia.getMediaType(), !playNextEpisode); + // setting media to null signals to playMediaObject() that we're taking care of post-playback processing + media = null; + playMediaObject(nextMedia, false, true /*TODO for now we always stream*/, playNextEpisode, playNextEpisode); + } } - - if (nextMedia != null) { - callback.onPlaybackEnded(nextMedia.getMediaType(), !playNextEpisode); - // setting media to null signals to playMediaObject() that we're taking care of post-playback processing - media = null; - playMediaObject(nextMedia, false, true /*TODO for now we always stream*/, playNextEpisode, playNextEpisode); - } else { - callback.onPlaybackEnded(null, true); - stop(); + if (shouldContinue || toStoppedState) { + if (nextMedia != null) { + callback.onPlaybackEnded(null, true); + stop(); + } + callback.onPostPlayback(currentMedia, !wasSkipped, nextMedia != null); + } else if (isPlaying) { + callback.onPlaybackPause(currentMedia, + currentMedia != null ? currentMedia.getPosition() : INVALID_TIME); } - callback.onPostPlayback(currentMedia, !wasSkipped, nextMedia != null); + FutureTask future = new FutureTask<>(() -> {}, null); + future.run(); + return future; } - @Override - public void stop() { + private void stop() { if (playerStatus == PlayerStatus.INDETERMINATE) { setPlayerStatus(PlayerStatus.STOPPED, null); } else { -- cgit v1.2.3