From 491ac8f0669bf3184944f3a3d657b2bdccc2128b Mon Sep 17 00:00:00 2001 From: bachinger Date: Wed, 19 Jan 2022 14:08:00 +0000 Subject: [PATCH] Estimate content position when playWhenReady never has changed This change closes an edge case when an app is connecting a controller to a session that is already playing. In such a case `MediaControllerImplBase.getContentPosition()` keeps returning the first estimation for every call until `playWhenReady` changes for the first time. Reproduction: Launch the demo-session app and start audio playback. Put the activity to the background and then to the foreground again. Go to the playlist view and `PlayerActivity` without interrupting playback and try to seek in the timebar. The position is stuck and snaps back. PiperOrigin-RevId: 422795360 --- .../java/androidx/media3/session/MediaControllerImplBase.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java index c2fd9f81a9..c856873c1e 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java @@ -677,8 +677,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; @Override public long getContentPosition() { boolean receivedUpdatedPositionInfo = - lastSetPlayWhenReadyCalledTimeMs != C.TIME_UNSET - && lastSetPlayWhenReadyCalledTimeMs < playerInfo.sessionPositionInfo.eventTimeMs; + lastSetPlayWhenReadyCalledTimeMs < playerInfo.sessionPositionInfo.eventTimeMs; if (!playerInfo.isPlaying || playerInfo.sessionPositionInfo.isPlayingAd) { if (receivedUpdatedPositionInfo || lastReturnedContentPositionMs == C.TIME_UNSET) { lastReturnedContentPositionMs =