@@ -12,6 +12,7 @@ import android.view.KeyEvent
12
12
import androidx.annotation.VisibleForTesting
13
13
import com.scribd.armadillo.ArmadilloConfiguration
14
14
import com.scribd.armadillo.Constants
15
+ import com.scribd.armadillo.Constants.AUDIO_POSITION_SHIFT_IN_MS
15
16
import com.scribd.armadillo.Milliseconds
16
17
import com.scribd.armadillo.StateStore
17
18
import com.scribd.armadillo.actions.CustomMediaSessionAction
@@ -184,8 +185,20 @@ internal class MediaSessionCallback(private val onMediaSessionEventListener: OnM
184
185
}
185
186
186
187
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 " )
189
202
}
190
203
191
204
override fun onCustomAction (action : String? , extras : Bundle ? ) {
0 commit comments