@@ -12,6 +12,7 @@ import android.view.KeyEvent
1212import androidx.annotation.VisibleForTesting
1313import com.scribd.armadillo.ArmadilloConfiguration
1414import com.scribd.armadillo.Constants
15+ import com.scribd.armadillo.Constants.AUDIO_POSITION_SHIFT_IN_MS
1516import com.scribd.armadillo.Milliseconds
1617import com.scribd.armadillo.StateStore
1718import com.scribd.armadillo.actions.CustomMediaSessionAction
@@ -184,8 +185,20 @@ internal class MediaSessionCallback(private val onMediaSessionEventListener: OnM
184185 }
185186
186187 override fun onSeekTo (posInMilis : Long ) {
187- playbackEngine?.seekTo(posInMilis.milliseconds)
188- Log .v(TAG , " onSeekTo: $posInMilis " )
188+ // if the shift has been added, then it must have originated from app UI, because we added it
189+ val absolutePosition = if (posInMilis >= AUDIO_POSITION_SHIFT_IN_MS ) {
190+ posInMilis - AUDIO_POSITION_SHIFT_IN_MS // undo
191+ } else {
192+ // possibly from notification which sends position relative to chapter start
193+ // so, add chapter start time to make it absolute position
194+ val chapterStartTime = playbackInfo?.progress?.currentChapterIndex?.let { chapterIndex ->
195+ playbackInfo?.audioPlayable?.chapters?.getOrNull(chapterIndex)?.startTime?.longValue
196+ } ? : 0
197+ posInMilis + chapterStartTime
198+ }
199+
200+ playbackEngine?.seekTo(absolutePosition.milliseconds)
201+ Log .v(TAG , " onSeekTo: received $posInMilis , absolute $absolutePosition " )
189202 }
190203
191204 override fun onCustomAction (action : String? , extras : Bundle ? ) {
0 commit comments