From 25c26cdbb4f1bddde6b5f7ec49393c078f9a1941 Mon Sep 17 00:00:00 2001 From: jaewan Date: Wed, 19 Aug 2020 14:24:06 +0100 Subject: [PATCH] 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 --- .../ext/media2/SessionPlayerConnectorTest.java | 8 ++++---- .../android/exoplayer2/ext/media2/PlayerWrapper.java | 7 ++----- .../exoplayer2/ext/media2/SessionPlayerConnector.java | 11 ++--------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java b/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java index f9f65c8701..45a0c59645 100644 --- a/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java +++ b/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java @@ -274,17 +274,17 @@ public class SessionPlayerConnectorTest { @Test @SmallTest @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.getCurrentPosition()).isEqualTo(SessionPlayer.UNKNOWN_TIME); + assertThat(sessionPlayerConnector.getCurrentPosition()).isEqualTo(0); } @Test @SmallTest @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.getBufferedPosition()).isEqualTo(SessionPlayer.UNKNOWN_TIME); + assertThat(sessionPlayerConnector.getBufferedPosition()).isEqualTo(0); } @Test diff --git a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java index dee10056d7..888eccbe94 100644 --- a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java +++ b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java @@ -336,18 +336,15 @@ import java.util.List; } public long getCurrentPosition() { - Assertions.checkState(getState() != SessionPlayer.PLAYER_STATE_IDLE); - return Math.max(0, player.getCurrentPosition()); + return player.getCurrentPosition(); } public long getDuration() { - Assertions.checkState(getState() != SessionPlayer.PLAYER_STATE_IDLE); long duration = player.getDuration(); - return duration == C.TIME_UNSET ? -1 : duration; + return duration == C.TIME_UNSET ? SessionPlayer.UNKNOWN_TIME : duration; } public long getBufferedPosition() { - Assertions.checkState(getState() != SessionPlayer.PLAYER_STATE_IDLE); return player.getBufferedPosition(); } diff --git a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java index ae85dc4511..d4aa888a1a 100644 --- a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java +++ b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java @@ -440,7 +440,7 @@ public final class SessionPlayerConnector extends SessionPlayer { } reset(); - this.runPlayerCallableBlockingInternal( + this.runPlayerCallableBlocking( /* callable= */ () -> { player.close(); return null; @@ -504,7 +504,7 @@ public final class SessionPlayerConnector extends SessionPlayer { state = PLAYER_STATE_IDLE; mediaItemToBuffState.clear(); } - this.runPlayerCallableBlockingInternal( + this.runPlayerCallableBlocking( /* callable= */ () -> { player.reset(); return null; @@ -596,13 +596,6 @@ public final class SessionPlayerConnector extends SessionPlayer { } private T runPlayerCallableBlocking(Callable callable) { - synchronized (stateLock) { - Assertions.checkState(!closed); - } - return runPlayerCallableBlockingInternal(callable); - } - - private T runPlayerCallableBlockingInternal(Callable callable) { SettableFuture future = SettableFuture.create(); boolean success = taskHandler.postOrRun(