summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorTom Hennen <TomHennen@users.noreply.github.com>2015-10-17 12:43:32 -0400
committerTom Hennen <TomHennen@users.noreply.github.com>2015-10-17 12:43:32 -0400
commit7c4d11a4984a4d9bc9d85baab958b1db507d7986 (patch)
treea79317afa577942c7ff07f49e68b8ecf78a726ec /core
parentcad49943d8b8021f065e37d4d14cc71a25df0a61 (diff)
parente4bb88f1f21ea9b1f1280837a27560941ca0542c (diff)
downloadAntennaPod-7c4d11a4984a4d9bc9d85baab958b1db507d7986.zip
Merge pull request #1267 from mfietz/issue/1264-seekto
Seeking: wait for completion where appropriate
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java54
1 files changed, 35 insertions, 19 deletions
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 41a9a08f8..f6c71daa7 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
@@ -25,6 +25,7 @@ import com.bumptech.glide.request.target.Target;
import org.apache.commons.lang3.Validate;
import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
@@ -78,6 +79,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
* have to wait until these operations have finished.
*/
private final ReentrantLock playerLock;
+ private CountDownLatch seekLatch;
private final PSMPCallback callback;
private final Context context;
@@ -290,11 +292,11 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
builder.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, p.getImageUri().toString());
try {
Bitmap art = Glide.with(context)
- .load(p.getImageUri())
- .asBitmap()
- .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
- .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
- .get();
+ .load(p.getImageUri())
+ .asBitmap()
+ .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
+ .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
+ .get();
builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, art);
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e));
@@ -332,11 +334,11 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
acquireWifiLockIfNecessary();
setSpeed(Float.parseFloat(UserPreferences.getPlaybackSpeed()));
- if (media.getPosition() > 0) {
+ if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
int newPosition = RewindAfterPauseUtils.calculatePositionWithRewind(
- media.getPosition(),
- media.getLastPlayedTime());
- mediaPlayer.seekTo(newPosition);
+ media.getPosition(),
+ media.getLastPlayedTime());
+ seekToSync(newPosition);
}
mediaPlayer.start();
@@ -438,7 +440,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
}
if (media.getPosition() > 0) {
- mediaPlayer.seekTo(media.getPosition());
+ seekToSync(media.getPosition());
}
if (media.getDuration() == 0) {
@@ -498,8 +500,20 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
statusBeforeSeeking = playerStatus;
setPlayerStatus(PlayerStatus.SEEKING, media);
}
+ if(seekLatch != null && seekLatch.getCount() > 0) {
+ try {
+ seekLatch.await(3, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ Log.e(TAG, Log.getStackTraceString(e));
+ }
+ }
+ seekLatch = new CountDownLatch(1);
mediaPlayer.seekTo(t);
-
+ try {
+ seekLatch.await(3, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ Log.e(TAG, Log.getStackTraceString(e));
+ }
} else if (playerStatus == PlayerStatus.INITIALIZED) {
media.setPosition(t);
startWhenPrepared.set(false);
@@ -1142,16 +1156,18 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
};
private final void genericSeekCompleteListener() {
- executor.submit(new Runnable() {
- @Override
- public void run() {
- playerLock.lock();
- if (playerStatus == PlayerStatus.SEEKING) {
- setPlayerStatus(statusBeforeSeeking, media);
- }
- playerLock.unlock();
+ Thread t = new Thread(() -> {
+ Log.d(TAG, "genericSeekCompleteListener");
+ if(seekLatch != null) {
+ seekLatch.countDown();
}
+ playerLock.lock();
+ if (playerStatus == PlayerStatus.SEEKING) {
+ setPlayerStatus(statusBeforeSeeking, media);
+ }
+ playerLock.unlock();
});
+ t.start();
}
private final MediaSessionCompat.Callback sessionCallback = new MediaSessionCompat.Callback() {