From 19a647226d3682a1a0acc88c722c6512692f4754 Mon Sep 17 00:00:00 2001 From: Domingos Lopes Date: Sat, 7 May 2016 01:28:23 -0400 Subject: [PATCH] move onPlaybackStart and onPlaybackPause tasks to separate callback methods --- .../PlaybackServiceMediaPlayerTest.java | 729 ++---------------- .../core/service/playback/LocalPSMP.java | 19 +- .../service/playback/PlaybackService.java | 58 +- .../playback/PlaybackServiceMediaPlayer.java | 6 +- .../playback/PlaybackServiceFlavorHelper.java | 4 +- 5 files changed, 137 insertions(+), 679 deletions(-) diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java index 8305eb68e..0555cd6ee 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java @@ -1,6 +1,8 @@ package de.test.antennapod.service.playback; import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.StringRes; import android.test.InstrumentationTestCase; import junit.framework.AssertionFailedError; @@ -113,7 +115,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testInit() { final Context c = getInstrumentation().getTargetContext(); - PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, defaultCallback); + PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, new DefaultPSMPCallback()); psmp.shutdown(); } @@ -139,7 +141,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectStreamNoStartNoPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -160,56 +162,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); @@ -227,7 +179,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectStreamStartNoPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -248,56 +200,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); @@ -316,7 +218,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectStreamNoStartPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(4); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -340,56 +242,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); @@ -406,7 +258,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectStreamStartPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(5); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -433,57 +285,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } - }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); @@ -499,7 +300,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectLocalNoStartNoPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -520,57 +321,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } - }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -587,7 +337,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectLocalStartNoPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -608,56 +358,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -674,7 +374,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectLocalNoStartPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(4); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -698,56 +398,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = e; } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -763,7 +413,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { public void testPlayMediaObjectLocalStartPrepare() throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final CountDownLatch countDownLatch = new CountDownLatch(5); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { try { @@ -791,56 +441,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { countDownLatch.countDown(); } } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -853,68 +453,12 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { psmp.shutdown(); } - - private final PlaybackServiceMediaPlayer.PSMPCallback defaultCallback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(LocalPSMP.PSMPInfo newInfo) { - checkPSMPInfo(newInfo); - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { return false; } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } - }; - private void pauseTestSkeleton(final PlayerStatus initialState, final boolean stream, final boolean abandonAudioFocus, final boolean reinit, long timeoutSeconds) throws InterruptedException { final Context c = getInstrumentation().getTargetContext(); final int latchCount = (stream && reinit) ? 2 : 1; final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { checkPSMPInfo(newInfo); @@ -953,52 +497,12 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = new AssertionFailedError("Unexpected call to shouldStop"); } - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - @Override public boolean onMediaPlayerError(Object inObj, int what, int extra) { if (assertionError == null) assertionError = new AssertionFailedError("Unexpected call to onMediaPlayerError"); return false; } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -1055,7 +559,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { (initialState == PlayerStatus.PREPARED) ? 1 : 0; final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { checkPSMPInfo(newInfo); @@ -1073,36 +577,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { } - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - @Override public boolean onMediaPlayerError(Object inObj, int what, int extra) { if (assertionError == null) { @@ -1110,21 +584,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { } return false; } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); if (initialState == PlayerStatus.PREPARED || initialState == PlayerStatus.PLAYING || initialState == PlayerStatus.PAUSED) { @@ -1158,7 +617,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { final Context c = getInstrumentation().getTargetContext(); final int latchCount = 1; final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { checkPSMPInfo(newInfo); @@ -1172,37 +631,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { countDownLatch.countDown(); } } - - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; } @Override @@ -1211,21 +639,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { assertionError = new AssertionFailedError("Unexpected call to onMediaPlayerError"); return false; } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -1273,7 +686,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { final Context c = getInstrumentation().getTargetContext(); final int latchCount = 2; final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { + PlaybackServiceMediaPlayer.PSMPCallback callback = new DefaultPSMPCallback() { @Override public void statusChanged(LocalPSMP.PSMPInfo newInfo) { checkPSMPInfo(newInfo); @@ -1289,57 +702,12 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { } } - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void setSpeedAbilityChanged() { - - } - - @Override - public void onMediaChanged(boolean reloadUI) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code, int resourceId) { - return false; - } - @Override public boolean onMediaPlayerError(Object inObj, int what, int extra) { if (assertionError == null) assertionError = new AssertionFailedError("Unexpected call to onMediaPlayerError"); return false; } - - @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { - - } - - @Override - public Playable getNextInQueue(Playable currentMedia) { - return null; - } - - @Override - public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { - - } }; PlaybackServiceMediaPlayer psmp = new LocalPSMP(c, callback); Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); @@ -1378,4 +746,71 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { super("Unexpected state change: " + status); } } + + private class DefaultPSMPCallback implements PlaybackServiceMediaPlayer.PSMPCallback { + @Override + public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { + + } + + @Override + public void shouldStop() { + + } + + @Override + public void playbackSpeedChanged(float s) { + + } + + @Override + public void setSpeedAbilityChanged() { + + } + + @Override + public void onBufferingUpdate(int percent) { + + } + + @Override + public void onMediaChanged(boolean reloadUI) { + + } + + @Override + public boolean onMediaPlayerInfo(int code, @StringRes int resourceId) { + return false; + } + + @Override + public boolean onMediaPlayerError(Object inObj, int what, int extra) { + return false; + } + + @Override + public void onPostPlayback(@NonNull Playable media, boolean ended, boolean playingNext) { + + } + + @Override + public void onPlaybackStart(@NonNull Playable playable, int position) { + + } + + @Override + public void onPlaybackPause(@NonNull Playable playable, int position) { + + } + + @Override + public Playable getNextInQueue(Playable currentMedia) { + return null; + } + + @Override + public void onPlaybackEnded(MediaType mediaType, boolean stopPlaying) { + + } + } } 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 4165eb84a..0336c24ab 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 @@ -140,14 +140,12 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { } // set temporarily to pause in order to update list with current position if (playerStatus == PlayerStatus.PLAYING) { - setPlayerStatus(PlayerStatus.PAUSED, media); + callback.onPlaybackPause(media, getPosition()); } if (!media.getIdentifier().equals(playable.getIdentifier())) { final Playable oldMedia = media; executor.submit(() -> callback.onPostPlayback(oldMedia, false, true)); - } else { - media.onPlaybackPause(context); } setPlayerStatus(PlayerStatus.INDETERMINATE, null); @@ -204,6 +202,8 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { + Log.d(TAG, "Audiofocus successfully requested"); + Log.d(TAG, "Resuming/Starting playback"); acquireWifiLockIfNecessary(); float speed = 1.0f; try { @@ -223,10 +223,9 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { } mediaPlayer.start(); + callback.onPlaybackStart(media, INVALID_TIME); setPlayerStatus(PlayerStatus.PLAYING, media); pausedBecauseOfTransientAudiofocusLoss = false; - media.onPlaybackStart(); - } else { Log.e(TAG, "Failed to request audio focus"); } @@ -254,8 +253,8 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { if (playerStatus == PlayerStatus.PLAYING) { Log.d(TAG, "Pausing playback."); mediaPlayer.pause(); + callback.onPlaybackPause(media, getPosition()); setPlayerStatus(PlayerStatus.PAUSED, media); - media.onPlaybackPause(context.getApplicationContext()); if (abandonFocus) { audioManager.abandonAudioFocus(audioFocusChangeListener); @@ -384,8 +383,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { } seekLatch = new CountDownLatch(1); if (statusBeforeSeeking == PlayerStatus.PLAYING) { - media.setPosition(getPosition()); - media.onPlaybackPause(context); + callback.onPlaybackPause(media, getPosition()); } mediaPlayer.seekTo(t); try { @@ -931,13 +929,12 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { seekLatch.countDown(); } playerLock.lock(); - media.setPosition(getPosition()); if (playerStatus == PlayerStatus.PLAYING) { - media.onPlaybackStart(); + callback.onPlaybackStart(media, getPosition()); } if (playerStatus == PlayerStatus.SEEKING) { if (statusBeforeSeeking == PlayerStatus.PLAYING) { - media.onPlaybackStart(); + callback.onPlaybackStart(media, getPosition()); } setPlayerStatus(statusBeforeSeeking, media); } 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 5af34fd9f..0da0ff325 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 @@ -524,7 +524,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { private final PlaybackServiceTaskManager.PSTMCallback taskManagerCallback = new PlaybackServiceTaskManager.PSTMCallback() { @Override public void positionSaverTick() { - saveCurrentPosition(); + saveCurrentPosition(true, null, PlaybackServiceMediaPlayer.INVALID_TIME); } @Override @@ -576,9 +576,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { break; case PAUSED: - taskManager.cancelPositionSaver(); - saveCurrentPosition(); - taskManager.cancelWidgetUpdater(); if ((UserPreferences.isPersistNotify() || isCasting) && 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 @@ -597,12 +594,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { break; case PLAYING: - Log.d(TAG, "Audiofocus successfully requested"); - Log.d(TAG, "Resuming/Starting playback"); - - taskManager.startPositionSaver(); - taskManager.startWidgetUpdater(); - writePlayerStatusPlaybackPreferences(); setupNotification(newInfo); started = true; break; @@ -677,10 +668,30 @@ public class PlaybackService extends MediaBrowserServiceCompat { } @Override - public void onPostPlayback(Playable media, boolean ended, boolean playingNext) { + public void onPostPlayback(@NonNull Playable media, boolean ended, boolean playingNext) { PlaybackService.this.onPostPlayback(media, ended, playingNext); } + @Override + public void onPlaybackStart(@NonNull Playable playable, int position) { + taskManager.startWidgetUpdater(); + writePlayerStatusPlaybackPreferences(); + if (position != PlaybackServiceMediaPlayer.INVALID_TIME) { + playable.setPosition(position); + } + playable.onPlaybackStart(); + taskManager.startPositionSaver(); + } + + @Override + public void onPlaybackPause(@NonNull Playable playable, int position) { + taskManager.cancelPositionSaver(); + saveCurrentPosition(position == PlaybackServiceMediaPlayer.INVALID_TIME, + playable, position); + taskManager.cancelWidgetUpdater(); + playable.onPlaybackPause(getApplicationContext()); + } + @Override public Playable getNextInQueue(Playable currentMedia) { return PlaybackService.this.getNextInQueue(currentMedia); @@ -1200,11 +1211,22 @@ public class PlaybackService extends MediaBrowserServiceCompat { /** * Persists the current position and last played time of the media file. + * + * @param fromMediaPlayer if true, the information is gathered from the current Media Player + * and {@param playable} and {@param position} become irrelevant. + * @param playable the playable for which the current position should be saved, unless + * {@param fromMediaPlayer} is true. + * @param position the position that should be saved, unless {@param fromMediaPlayer} is true. */ - private synchronized void saveCurrentPosition() { - int position = getCurrentPosition(); - int duration = getDuration(); - final Playable playable = mediaPlayer.getPlayable(); + private synchronized void saveCurrentPosition(boolean fromMediaPlayer, Playable playable, int position) { + int duration; + if (fromMediaPlayer) { + position = getCurrentPosition(); + duration = getDuration(); + playable = mediaPlayer.getPlayable(); + } else { + duration = playable.getDuration(); + } if (position != INVALID_TIME && duration != INVALID_TIME && playable != null) { Log.d(TAG, "Saving current position to " + position); playable.saveCurrentPosition( @@ -1621,7 +1643,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { PlaybackServiceMediaPlayer getMediaPlayer(); void setIsCasting(boolean isCasting); void sendNotificationBroadcast(int type, int code); - void saveCurrentPosition(); + void saveCurrentPosition(boolean fromMediaPlayer, Playable playable, int position); void setupNotification(boolean connected, PlaybackServiceMediaPlayer.PSMPInfo info); MediaSessionCompat getMediaSession(); Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter); @@ -1655,8 +1677,8 @@ public class PlaybackService extends MediaBrowserServiceCompat { } @Override - public void saveCurrentPosition() { - PlaybackService.this.saveCurrentPosition(); + public void saveCurrentPosition(boolean fromMediaPlayer, Playable playable, int position) { + PlaybackService.this.saveCurrentPosition(fromMediaPlayer, playable, position); } @Override 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 d52d3b8bc..c7127ddb7 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 @@ -301,7 +301,11 @@ public abstract class PlaybackServiceMediaPlayer { boolean onMediaPlayerError(Object inObj, int what, int extra); - void onPostPlayback(Playable media, boolean ended, boolean playingNext); + void onPostPlayback(@NonNull Playable media, boolean ended, boolean playingNext); + + void onPlaybackStart(@NonNull Playable playable, int position); + + void onPlaybackPause(@NonNull Playable playable, int position); Playable getNextInQueue(Playable currentMedia); 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 55922725f..a00e86e73 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 @@ -108,7 +108,7 @@ public class PlaybackServiceFlavorHelper { // to the latest position. PlaybackServiceMediaPlayer mediaPlayer = callback.getMediaPlayer(); if (mediaPlayer != null) { - callback.saveCurrentPosition(); + callback.saveCurrentPosition(true, null, PlaybackServiceMediaPlayer.INVALID_TIME); infoBeforeCastDisconnection = mediaPlayer.getPSMPInfo(); if (reason != BaseCastManager.DISCONNECT_REASON_EXPLICIT && infoBeforeCastDisconnection.playerStatus == PlayerStatus.PLAYING) { @@ -160,7 +160,7 @@ public class PlaybackServiceFlavorHelper { // could be pause, but this way we make sure the new player will get the correct position, // since pause runs asynchronously and we could be directing the new player to play even before // the old player gives us back the position. - callback.saveCurrentPosition(); + callback.saveCurrentPosition(true, null, PlaybackServiceMediaPlayer.INVALID_TIME); } } if (info == null) {