Return state masked Player values from SessionPlayerConnector

Before this CL, SessionPlayerConnector getters had returned
UNKNOWN_TIME in idle state. It was because
SessionPlayerConnector had followed AndroidX media2
MediaPlayer's behavior, which was the baseline code of the
SessionPlayerConnector.

With this CL, SessionPlayerConnector getters directly return
underlying Player's value, rather than considering calls
in IDLE state as an exception and fallbacks to the default
UNKNOWN_TIME.

PiperOrigin-RevId: 327420940
This commit is contained in:
jaewan 2020-08-19 14:24:06 +01:00 committed by Oliver Woodman
parent 3af82b2a8b
commit 25c26cdbb4
3 changed files with 8 additions and 18 deletions

View File

@ -274,17 +274,17 @@ public class SessionPlayerConnectorTest {
@Test @Test
@SmallTest @SmallTest
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT) @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
public void getCurrentPosition_whenIdleState_returnsUnknownTime() { public void getCurrentPosition_whenIdleState_returnsDefaultPosition() {
assertThat(sessionPlayerConnector.getPlayerState()).isEqualTo(SessionPlayer.PLAYER_STATE_IDLE); assertThat(sessionPlayerConnector.getPlayerState()).isEqualTo(SessionPlayer.PLAYER_STATE_IDLE);
assertThat(sessionPlayerConnector.getCurrentPosition()).isEqualTo(SessionPlayer.UNKNOWN_TIME); assertThat(sessionPlayerConnector.getCurrentPosition()).isEqualTo(0);
} }
@Test @Test
@SmallTest @SmallTest
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT) @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
public void getBufferedPosition_whenIdleState_returnsUnknownTime() { public void getBufferedPosition_whenIdleState_returnsDefaultPosition() {
assertThat(sessionPlayerConnector.getPlayerState()).isEqualTo(SessionPlayer.PLAYER_STATE_IDLE); assertThat(sessionPlayerConnector.getPlayerState()).isEqualTo(SessionPlayer.PLAYER_STATE_IDLE);
assertThat(sessionPlayerConnector.getBufferedPosition()).isEqualTo(SessionPlayer.UNKNOWN_TIME); assertThat(sessionPlayerConnector.getBufferedPosition()).isEqualTo(0);
} }
@Test @Test

View File

@ -336,18 +336,15 @@ import java.util.List;
} }
public long getCurrentPosition() { public long getCurrentPosition() {
Assertions.checkState(getState() != SessionPlayer.PLAYER_STATE_IDLE); return player.getCurrentPosition();
return Math.max(0, player.getCurrentPosition());
} }
public long getDuration() { public long getDuration() {
Assertions.checkState(getState() != SessionPlayer.PLAYER_STATE_IDLE);
long duration = player.getDuration(); long duration = player.getDuration();
return duration == C.TIME_UNSET ? -1 : duration; return duration == C.TIME_UNSET ? SessionPlayer.UNKNOWN_TIME : duration;
} }
public long getBufferedPosition() { public long getBufferedPosition() {
Assertions.checkState(getState() != SessionPlayer.PLAYER_STATE_IDLE);
return player.getBufferedPosition(); return player.getBufferedPosition();
} }

View File

@ -440,7 +440,7 @@ public final class SessionPlayerConnector extends SessionPlayer {
} }
reset(); reset();
this.<Void>runPlayerCallableBlockingInternal( this.<Void>runPlayerCallableBlocking(
/* callable= */ () -> { /* callable= */ () -> {
player.close(); player.close();
return null; return null;
@ -504,7 +504,7 @@ public final class SessionPlayerConnector extends SessionPlayer {
state = PLAYER_STATE_IDLE; state = PLAYER_STATE_IDLE;
mediaItemToBuffState.clear(); mediaItemToBuffState.clear();
} }
this.<Void>runPlayerCallableBlockingInternal( this.<Void>runPlayerCallableBlocking(
/* callable= */ () -> { /* callable= */ () -> {
player.reset(); player.reset();
return null; return null;
@ -596,13 +596,6 @@ public final class SessionPlayerConnector extends SessionPlayer {
} }
private <T> T runPlayerCallableBlocking(Callable<T> callable) { private <T> T runPlayerCallableBlocking(Callable<T> callable) {
synchronized (stateLock) {
Assertions.checkState(!closed);
}
return runPlayerCallableBlockingInternal(callable);
}
private <T> T runPlayerCallableBlockingInternal(Callable<T> callable) {
SettableFuture<T> future = SettableFuture.create(); SettableFuture<T> future = SettableFuture.create();
boolean success = boolean success =
taskHandler.postOrRun( taskHandler.postOrRun(