summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorDomingos Lopes <domingos86lopes+github@gmail.com>2016-05-11 15:02:55 -0400
committerDomingos Lopes <domingos86lopes+github@gmail.com>2016-07-25 23:16:28 -0400
commit385079d168f1645dcc40a2349441c194d5acdf2a (patch)
tree9ecaaeb99b0d6a1c65849ca4d80d58fc678e4da5 /core/src
parent8edb2629889232243a67818ee5011642df3af1ff (diff)
downloadAntennaPod-385079d168f1645dcc40a2349441c194d5acdf2a.zip
integrate onPlaybackStart/Pause callbacks into setPlayerStatus()
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java16
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java17
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java26
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java37
4 files changed, 50 insertions, 46 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);
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 8982e85f3..ee6cb653c 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
@@ -197,37 +197,34 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
remoteState = state;
}
+ if (mediaChanged && stateChanged && oldState == MediaStatus.PLAYER_STATE_PLAYING &&
+ state != MediaStatus.PLAYER_STATE_IDLE) {
+ callback.onPlaybackPause(null, INVALID_TIME);
+ // We don't want setPlayerStatus to handle the onPlaybackPause callback
+ setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
+ }
+
setBuffering(state == MediaStatus.PLAYER_STATE_BUFFERING);
switch (state) {
case MediaStatus.PLAYER_STATE_PLAYING:
if (!stateChanged) {
+ //These steps are necessary because they won't be performed by setPlayerStatus()
if (position >= 0) {
currentMedia.setPosition(position);
}
currentMedia.onPlaybackStart();
- } else {
- callback.onPlaybackStart(currentMedia, position);
}
- setPlayerStatus(PlayerStatus.PLAYING, currentMedia);
+ setPlayerStatus(PlayerStatus.PLAYING, currentMedia, position);
break;
case MediaStatus.PLAYER_STATE_PAUSED:
- if (!mediaChanged &&
- oldState == MediaStatus.PLAYER_STATE_PLAYING) {
- callback.onPlaybackPause(currentMedia, position);
- }
- setPlayerStatus(PlayerStatus.PAUSED, currentMedia);
+ setPlayerStatus(PlayerStatus.PAUSED, currentMedia, position);
break;
case MediaStatus.PLAYER_STATE_BUFFERING:
- if (!mediaChanged && currentMedia != null &&
- oldState == MediaStatus.PLAYER_STATE_PLAYING) {
- // position could already refer to the new position after seeking
- // so our best guess is the last one reported
- callback.onPlaybackPause(currentMedia, position);
- }
setPlayerStatus((mediaChanged || playerStatus == PlayerStatus.PREPARING) ?
PlayerStatus.PREPARING : PlayerStatus.SEEKING,
- currentMedia);
+ currentMedia,
+ currentMedia != null ? currentMedia.getPosition() : INVALID_TIME);
break;
case MediaStatus.PLAYER_STATE_IDLE:
int reason = status.getIdleReason();
@@ -247,8 +244,9 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
case MediaStatus.IDLE_REASON_INTERRUPTED:
// Means that a request to load a different media was sent
// Not sure if currentMedia already reflects the to be loaded one
- if (oldState == MediaStatus.PLAYER_STATE_PLAYING && oldMedia != null) {
- callback.onPlaybackPause(oldMedia, oldMedia.getPosition());
+ if (mediaChanged && oldState == MediaStatus.PLAYER_STATE_PLAYING) {
+ callback.onPlaybackPause(null, INVALID_TIME);
+ setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
}
setPlayerStatus(PlayerStatus.PREPARING, currentMedia);
break;
@@ -272,10 +270,9 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
}
break;
case MediaStatus.PLAYER_STATE_UNKNOWN:
- if (oldState == MediaStatus.PLAYER_STATE_PLAYING && oldMedia != null) {
- callback.onPlaybackPause(oldMedia, position);
+ if (playerStatus != PlayerStatus.INDETERMINATE || media != currentMedia) {
+ setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
}
- setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
break;
default:
Log.wtf(TAG, "Remote media state undetermined!");