diff --git a/android/src/main/java/com/ryanheise/just_audio/AudioPlayer.java b/android/src/main/java/com/ryanheise/just_audio/AudioPlayer.java index 29f549e..862dc03 100644 --- a/android/src/main/java/com/ryanheise/just_audio/AudioPlayer.java +++ b/android/src/main/java/com/ryanheise/just_audio/AudioPlayer.java @@ -63,6 +63,7 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener { private Long seekPos; private Result prepareResult; private Result seekResult; + private boolean seekProcessed; private MediaSource mediaSource; private SimpleExoPlayer player; @@ -101,6 +102,9 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener { prepareResult = null; transition(PlaybackState.stopped); } + if (seekProcessed) { + completeSeek(); + } break; case Player.STATE_BUFFERING: // TODO: use this instead of checkForDiscontinuity. @@ -116,14 +120,22 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener { @Override public void onSeekProcessed() { if (seekResult != null) { - seekPos = null; - transition(stateBeforeSeek); - seekResult.success(null); - stateBeforeSeek = null; - seekResult = null; + seekProcessed = true; + if (player.getPlaybackState() == Player.STATE_READY) { + completeSeek(); + } } } + private void completeSeek() { + seekProcessed = false; + seekPos = null; + transition(stateBeforeSeek); + seekResult.success(null); + stateBeforeSeek = null; + seekResult = null; + } + private void checkForDiscontinuity() { final long now = System.currentTimeMillis(); final long position = getCurrentPosition(); @@ -332,8 +344,12 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener { if (state == PlaybackState.none || state == PlaybackState.connecting) { throw new IllegalStateException("Cannot call seek from none none/connecting states"); } + if (seekResult != null) { + seekResult.success(null); + } seekPos = position; seekResult = result; + seekProcessed = false; if (stateBeforeSeek == null) { stateBeforeSeek = state; }