diff options
author | Domingos Lopes <domingos86lopes+github@gmail.com> | 2016-05-11 15:02:55 -0400 |
---|---|---|
committer | Domingos Lopes <domingos86lopes+github@gmail.com> | 2016-07-25 23:16:28 -0400 |
commit | 385079d168f1645dcc40a2349441c194d5acdf2a (patch) | |
tree | 9ecaaeb99b0d6a1c65849ca4d80d58fc678e4da5 /core/src/main/java/de/danoeh | |
parent | 8edb2629889232243a67818ee5011642df3af1ff (diff) | |
download | AntennaPod-385079d168f1645dcc40a2349441c194d5acdf2a.zip |
integrate onPlaybackStart/Pause callbacks into setPlayerStatus()
Diffstat (limited to 'core/src/main/java/de/danoeh')
3 files changed, 33 insertions, 26 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 97d607af6..2567cd6f5 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 @@ -223,7 +223,6 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { } mediaPlayer.start(); - callback.onPlaybackStart(media, INVALID_TIME); setPlayerStatus(PlayerStatus.PLAYING, media); pausedBecauseOfTransientAudiofocusLoss = false; } else { @@ -253,8 +252,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { if (playerStatus == PlayerStatus.PLAYING) { Log.d(TAG, "Pausing playback."); mediaPlayer.pause(); - callback.onPlaybackPause(media, getPosition()); - setPlayerStatus(PlayerStatus.PAUSED, media); + setPlayerStatus(PlayerStatus.PAUSED, media, getPosition()); if (abandonFocus) { audioManager.abandonAudioFocus(audioFocusChangeListener); @@ -373,8 +371,6 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { if (playerStatus == PlayerStatus.PLAYING || playerStatus == PlayerStatus.PAUSED || playerStatus == PlayerStatus.PREPARED) { - statusBeforeSeeking = playerStatus; - setPlayerStatus(PlayerStatus.SEEKING, media); if(seekLatch != null && seekLatch.getCount() > 0) { try { seekLatch.await(3, TimeUnit.SECONDS); @@ -383,9 +379,8 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { } } seekLatch = new CountDownLatch(1); - if (statusBeforeSeeking == PlayerStatus.PLAYING) { - callback.onPlaybackPause(media, getPosition()); - } + statusBeforeSeeking = playerStatus; + setPlayerStatus(PlayerStatus.SEEKING, media, getPosition()); mediaPlayer.seekTo(t); try { seekLatch.await(3, TimeUnit.SECONDS); @@ -934,10 +929,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { callback.onPlaybackStart(media, getPosition()); } if (playerStatus == PlayerStatus.SEEKING) { - if (statusBeforeSeeking == PlayerStatus.PLAYING) { - callback.onPlaybackStart(media, getPosition()); - } - setPlayerStatus(statusBeforeSeeking, media); + setPlayerStatus(statusBeforeSeeking, media, getPosition()); } playerLock.unlock(); }); 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 4a8907858..71d0abf07 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 @@ -594,6 +594,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { break; case PLAYING: + writePlayerStatusPlaybackPreferences(); setupNotification(newInfo); started = true; break; @@ -675,7 +676,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { @Override public void onPlaybackStart(@NonNull Playable playable, int position) { taskManager.startWidgetUpdater(); - writePlayerStatusPlaybackPreferences(); if (position != PlaybackServiceMediaPlayer.INVALID_TIME) { playable.setPosition(position); } @@ -684,12 +684,14 @@ public class PlaybackService extends MediaBrowserServiceCompat { } @Override - public void onPlaybackPause(@NonNull Playable playable, int position) { + public void onPlaybackPause(Playable playable, int position) { taskManager.cancelPositionSaver(); - saveCurrentPosition(position == PlaybackServiceMediaPlayer.INVALID_TIME, + saveCurrentPosition(position == PlaybackServiceMediaPlayer.INVALID_TIME || playable == null, playable, position); taskManager.cancelWidgetUpdater(); - playable.onPlaybackPause(getApplicationContext()); + if (playable != null) { + playable.onPlaybackPause(getApplicationContext()); + } } @Override @@ -1578,12 +1580,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { public void onPause() { Log.d(TAG, "onPause()"); if (getStatus() == PlayerStatus.PLAYING) { - pause(false, true); - } - if (UserPreferences.isPersistNotify()) { - pause(false, true); - } else { - pause(true, true); + pause(!UserPreferences.isPersistNotify(), true); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index c7127ddb7..5940a463a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -267,23 +267,41 @@ public abstract class PlaybackServiceMediaPlayer { * <p/> * This method will notify the callback about the change of the player status (even if the new status is the same * as the old one). + * <p/> + * It will also call {@link PSMPCallback#onPlaybackPause(Playable, int)} or {@link PSMPCallback#onPlaybackStart(Playable, int)} + * depending on the status change. * * @param newStatus The new PlayerStatus. This must not be null. * @param newMedia The new playable object of the PSMP object. This can be null. + * @param position The position to be set to the current Playable object in case playback started or paused. + * Will be ignored if given the value of {@link #INVALID_TIME}. */ - protected final synchronized void setPlayerStatus(@NonNull PlayerStatus newStatus, Playable newMedia) { + protected final synchronized void setPlayerStatus(@NonNull PlayerStatus newStatus, Playable newMedia, int position) { Log.d(TAG, this.getClass().getSimpleName() + ": Setting player status to " + newStatus); + PlayerStatus oldStatus = playerStatus; + this.playerStatus = newStatus; setPlayable(newMedia); - if (playerStatus != null) { - Log.d(TAG, "playerStatus: " + playerStatus.toString()); + if (newMedia != null && newStatus != PlayerStatus.INDETERMINATE) { + if (oldStatus == PlayerStatus.PLAYING && newStatus != PlayerStatus.PLAYING) { + callback.onPlaybackPause(newMedia, position); + } else if (oldStatus != PlayerStatus.PLAYING && newStatus == PlayerStatus.PLAYING) { + callback.onPlaybackStart(newMedia, position); + } } callback.statusChanged(new PSMPInfo(playerStatus, getPlayable())); } + /** + * @see #setPlayerStatus(PlayerStatus, Playable, int) + */ + protected final void setPlayerStatus(@NonNull PlayerStatus newStatus, Playable newMedia) { + setPlayerStatus(newStatus, newMedia, INVALID_TIME); + } + public interface PSMPCallback { void statusChanged(PSMPInfo newInfo); @@ -305,7 +323,7 @@ public abstract class PlaybackServiceMediaPlayer { void onPlaybackStart(@NonNull Playable playable, int position); - void onPlaybackPause(@NonNull Playable playable, int position); + void onPlaybackPause(Playable playable, int position); Playable getNextInQueue(Playable currentMedia); |