summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java729
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java19
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java58
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java6
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java4
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);
@@ -954,51 +498,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@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);
@@ -1074,57 +578,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 of 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);
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);
@@ -1290,56 +703,11 @@ 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,11 +668,31 @@ 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) {