Improve state handling
This commit is contained in:
parent
67bcd13739
commit
280f1a8208
|
@ -285,10 +285,14 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
case buffering:
|
case buffering:
|
||||||
case paused:
|
case paused:
|
||||||
player.setPlayWhenReady(true);
|
player.setPlayWhenReady(true);
|
||||||
transition(PlaybackState.playing);
|
if (seekResult != null) {
|
||||||
|
stateBeforeSeek = PlaybackState.playing;
|
||||||
|
} else {
|
||||||
|
transition(PlaybackState.playing);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Cannot call play from connecting or none states (" + state + ")");
|
throw new IllegalStateException("Cannot call play from connecting/none states (" + state + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,6 +304,9 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
case buffering:
|
case buffering:
|
||||||
player.setPlayWhenReady(false);
|
player.setPlayWhenReady(false);
|
||||||
transition(PlaybackState.paused);
|
transition(PlaybackState.paused);
|
||||||
|
if (seekResult != null) {
|
||||||
|
stateBeforeSeek = PlaybackState.paused;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Can call pause only from playing and buffering states (" + state + ")");
|
throw new IllegalStateException("Can call pause only from playing and buffering states (" + state + ")");
|
||||||
|
@ -312,12 +319,15 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
result.success(null);
|
result.success(null);
|
||||||
break;
|
break;
|
||||||
case connecting:
|
case connecting:
|
||||||
|
abortExistingConnection();
|
||||||
transition(PlaybackState.stopped);
|
transition(PlaybackState.stopped);
|
||||||
result.success(null);
|
result.success(null);
|
||||||
break;
|
break;
|
||||||
|
case buffering:
|
||||||
|
abortSeek();
|
||||||
|
// no break
|
||||||
case completed:
|
case completed:
|
||||||
case playing:
|
case playing:
|
||||||
case buffering:
|
|
||||||
case paused:
|
case paused:
|
||||||
player.setPlayWhenReady(false);
|
player.setPlayWhenReady(false);
|
||||||
player.seekTo(0L);
|
player.seekTo(0L);
|
||||||
|
@ -325,7 +335,7 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
result.success(null);
|
result.success(null);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Can call stop only from playing/paused/completed states (" + state + ")");
|
throw new IllegalStateException("Cannot call stop from none state");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,9 +354,7 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
if (state == PlaybackState.none || state == PlaybackState.connecting) {
|
if (state == PlaybackState.none || state == PlaybackState.connecting) {
|
||||||
throw new IllegalStateException("Cannot call seek from none none/connecting states");
|
throw new IllegalStateException("Cannot call seek from none none/connecting states");
|
||||||
}
|
}
|
||||||
if (seekResult != null) {
|
abortSeek();
|
||||||
seekResult.success(null);
|
|
||||||
}
|
|
||||||
seekPos = position;
|
seekPos = position;
|
||||||
seekResult = result;
|
seekResult = result;
|
||||||
seekProcessed = false;
|
seekProcessed = false;
|
||||||
|
@ -363,6 +371,16 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
transition(PlaybackState.none);
|
transition(PlaybackState.none);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void abortSeek() {
|
||||||
|
if (seekResult != null) {
|
||||||
|
seekResult.success(null);
|
||||||
|
seekResult = null;
|
||||||
|
seekPos = null;
|
||||||
|
stateBeforeSeek = null;
|
||||||
|
seekProcessed = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void abortExistingConnection() {
|
private void abortExistingConnection() {
|
||||||
if (prepareResult != null) {
|
if (prepareResult != null) {
|
||||||
prepareResult.success(null);
|
prepareResult.success(null);
|
||||||
|
|
Loading…
Reference in New Issue