Skip to content

Commit 8e65327

Browse files
authored
Add argument to set Player.getMaxSeekToPreviousPosition when creating a PillarboxExoPlayer (#659)
1 parent 7804a9a commit 8e65327

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

pillarbox-core-business/src/main/java/ch/srgssr/pillarbox/core/business/DefaultPillarbox.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package ch.srgssr.pillarbox.core.business
66

77
import android.content.Context
88
import androidx.annotation.VisibleForTesting
9+
import androidx.media3.common.Player
910
import androidx.media3.common.util.Clock
1011
import androidx.media3.exoplayer.DefaultLoadControl
1112
import androidx.media3.exoplayer.LoadControl
@@ -14,10 +15,12 @@ import ch.srgssr.pillarbox.core.business.integrationlayer.service.MediaCompositi
1415
import ch.srgssr.pillarbox.core.business.source.SRGAssetLoader
1516
import ch.srgssr.pillarbox.core.business.tracker.DefaultMediaItemTrackerRepository
1617
import ch.srgssr.pillarbox.player.PillarboxExoPlayer
18+
import ch.srgssr.pillarbox.player.PillarboxExoPlayer.Companion.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION
1719
import ch.srgssr.pillarbox.player.PillarboxLoadControl
1820
import ch.srgssr.pillarbox.player.SeekIncrement
1921
import ch.srgssr.pillarbox.player.source.PillarboxMediaSourceFactory
2022
import ch.srgssr.pillarbox.player.tracker.MediaItemTrackerProvider
23+
import kotlin.time.Duration
2124
import kotlin.time.Duration.Companion.seconds
2225

2326
/**
@@ -31,6 +34,7 @@ object DefaultPillarbox {
3134
*
3235
* @param context The context.
3336
* @param seekIncrement The seek increment.
37+
* @param maxSeekToPreviousPosition The [Player.getMaxSeekToPreviousPosition] value.
3438
* @param mediaItemTrackerRepository The provider of MediaItemTracker, by default [DefaultMediaItemTrackerRepository].
3539
* @param mediaCompositionService The [MediaCompositionService] to use, by default [HttpMediaCompositionService].
3640
* @param loadControl The load control, by default [PillarboxLoadControl].
@@ -39,13 +43,15 @@ object DefaultPillarbox {
3943
operator fun invoke(
4044
context: Context,
4145
seekIncrement: SeekIncrement = defaultSeekIncrement,
46+
maxSeekToPreviousPosition: Duration = DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION,
4247
mediaItemTrackerRepository: MediaItemTrackerProvider = DefaultMediaItemTrackerRepository(),
4348
mediaCompositionService: MediaCompositionService = HttpMediaCompositionService(),
4449
loadControl: LoadControl = PillarboxLoadControl(),
4550
): PillarboxExoPlayer {
4651
return DefaultPillarbox(
4752
context = context,
4853
seekIncrement = seekIncrement,
54+
maxSeekToPreviousPosition = maxSeekToPreviousPosition,
4955
mediaItemTrackerRepository = mediaItemTrackerRepository,
5056
mediaCompositionService = mediaCompositionService,
5157
loadControl = loadControl,
@@ -58,6 +64,7 @@ object DefaultPillarbox {
5864
*
5965
* @param context The context.
6066
* @param seekIncrement The seek increment.
67+
* @param maxSeekToPreviousPosition The [Player.getMaxSeekToPreviousPosition] value.
6168
* @param mediaItemTrackerRepository The provider of MediaItemTracker, by default [DefaultMediaItemTrackerRepository].
6269
* @param loadControl The load control, by default [DefaultLoadControl].
6370
* @param mediaCompositionService The [MediaCompositionService] to use, by default [HttpMediaCompositionService].
@@ -68,6 +75,7 @@ object DefaultPillarbox {
6875
operator fun invoke(
6976
context: Context,
7077
seekIncrement: SeekIncrement = defaultSeekIncrement,
78+
maxSeekToPreviousPosition: Duration = DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION,
7179
mediaItemTrackerRepository: MediaItemTrackerProvider = DefaultMediaItemTrackerRepository(),
7280
loadControl: LoadControl = DefaultLoadControl(),
7381
mediaCompositionService: MediaCompositionService = HttpMediaCompositionService(),
@@ -76,6 +84,7 @@ object DefaultPillarbox {
7684
return PillarboxExoPlayer(
7785
context = context,
7886
seekIncrement = seekIncrement,
87+
maxSeekToPreviousPosition = maxSeekToPreviousPosition,
7988
mediaSourceFactory = PillarboxMediaSourceFactory(context).apply {
8089
addAssetLoader(SRGAssetLoader(context, mediaCompositionService))
8190
},

pillarbox-player/src/main/java/ch/srgssr/pillarbox/player/PillarboxExoPlayer.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package ch.srgssr.pillarbox.player
66

77
import android.content.Context
88
import androidx.annotation.VisibleForTesting
9+
import androidx.media3.common.C
910
import androidx.media3.common.MediaItem
1011
import androidx.media3.common.PlaybackException
1112
import androidx.media3.common.PlaybackParameters
@@ -33,6 +34,8 @@ import ch.srgssr.pillarbox.player.tracker.MediaItemTrackerProvider
3334
import ch.srgssr.pillarbox.player.tracker.MediaItemTrackerRepository
3435
import ch.srgssr.pillarbox.player.tracker.TimeRangeTracker
3536
import ch.srgssr.pillarbox.player.utils.PillarboxEventLogger
37+
import kotlin.time.Duration
38+
import kotlin.time.Duration.Companion.milliseconds
3639

3740
/**
3841
* Pillarbox player
@@ -123,13 +126,15 @@ class PillarboxExoPlayer internal constructor(
123126
mediaSourceFactory: PillarboxMediaSourceFactory = PillarboxMediaSourceFactory(context),
124127
loadControl: LoadControl = PillarboxLoadControl(),
125128
mediaItemTrackerProvider: MediaItemTrackerProvider = MediaItemTrackerRepository(),
126-
seekIncrement: SeekIncrement = SeekIncrement()
129+
seekIncrement: SeekIncrement = SeekIncrement(),
130+
maxSeekToPreviousPosition: Duration = DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION,
127131
) : this(
128132
context = context,
129133
mediaSourceFactory = mediaSourceFactory,
130134
loadControl = loadControl,
131135
mediaItemTrackerProvider = mediaItemTrackerProvider,
132136
seekIncrement = seekIncrement,
137+
maxSeekToPreviousPosition = maxSeekToPreviousPosition,
133138
clock = Clock.DEFAULT,
134139
)
135140

@@ -140,13 +145,15 @@ class PillarboxExoPlayer internal constructor(
140145
loadControl: LoadControl = PillarboxLoadControl(),
141146
mediaItemTrackerProvider: MediaItemTrackerProvider = MediaItemTrackerRepository(),
142147
seekIncrement: SeekIncrement = SeekIncrement(),
148+
maxSeekToPreviousPosition: Duration = DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION,
143149
clock: Clock,
144150
analyticsCollector: PillarboxAnalyticsCollector = PillarboxAnalyticsCollector(clock),
145151
) : this(
146152
ExoPlayer.Builder(context)
147153
.setClock(clock)
148154
.setUsePlatformDiagnostics(false)
149155
.setSeekIncrements(seekIncrement)
156+
.setMaxSeekToPreviousPositionMs(maxSeekToPreviousPosition.inWholeMilliseconds)
150157
.setRenderersFactory(
151158
DefaultRenderersFactory(context)
152159
.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF)
@@ -405,6 +412,13 @@ class PillarboxExoPlayer internal constructor(
405412
}
406413
}
407414
}
415+
416+
companion object {
417+
/**
418+
* A default maximum position for which a seek to previous will seek to the previous window.
419+
*/
420+
val DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION = C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS.milliseconds
421+
}
408422
}
409423

410424
/**
@@ -426,7 +440,7 @@ fun Player.isPlaybackSpeedPossibleAtPosition(position: Long, speed: Float, windo
426440

427441
internal fun Window.isPlaybackSpeedPossibleAtPosition(positionMs: Long, playbackSpeed: Float): Boolean {
428442
return when {
429-
!isLive() || playbackSpeed == NormalSpeed -> true
443+
!isLive || playbackSpeed == NormalSpeed -> true
430444
!isSeekable -> false
431445
isAtDefaultPosition(positionMs) && playbackSpeed > NormalSpeed -> false
432446
else -> true

0 commit comments

Comments
 (0)