Skip to content

Commit 4c956d5

Browse files
feat: Add custom rewind and fast-forward buttons (#3272)
This commit adds custom rewind and fast-forward command buttons to the `MediaLibrarySession`. These buttons will be displayed in media controllers, such as Android Auto, providing users with explicit controls for seeking within the playback.
1 parent f56111b commit 4c956d5

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

core/playback/src/main/kotlin/voice/core/playback/di/PlaybackModule.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.media3.exoplayer.ExoPlayer
99
import androidx.media3.exoplayer.source.MediaSource
1010
import androidx.media3.exoplayer.source.ProgressiveMediaSource
1111
import androidx.media3.extractor.DefaultExtractorsFactory
12+
import androidx.media3.session.CommandButton
1213
import androidx.media3.session.MediaLibraryService
1314
import dev.zacsweers.metro.BindingContainer
1415
import dev.zacsweers.metro.ContributesTo
@@ -26,6 +27,7 @@ import voice.core.playback.playstate.PlayStateDelegatingListener
2627
import voice.core.playback.playstate.PositionUpdater
2728
import voice.core.playback.session.LibrarySessionCallback
2829
import voice.core.playback.session.PlaybackService
30+
import voice.core.strings.R as StringsR
2931

3032
@BindingContainer
3133
@ContributesTo(PlaybackScope::class)
@@ -82,9 +84,24 @@ open class PlaybackModule {
8284
player: VoicePlayer,
8385
callback: LibrarySessionCallback,
8486
mainActivityIntentProvider: MainActivityIntentProvider,
87+
context: Context,
8588
): MediaLibraryService.MediaLibrarySession {
8689
return MediaLibraryService.MediaLibrarySession.Builder(service, player, callback)
8790
.setSessionActivity(mainActivityIntentProvider.toCurrentBook())
91+
.setMediaButtonPreferences(
92+
listOf(
93+
CommandButton.Builder(CommandButton.ICON_SKIP_BACK)
94+
.setDisplayName(context.getString(StringsR.string.rewind))
95+
.setPlayerCommand(Player.COMMAND_SEEK_BACK)
96+
.setSlots(CommandButton.SLOT_BACK)
97+
.build(),
98+
CommandButton.Builder(CommandButton.ICON_SKIP_FORWARD)
99+
.setDisplayName(context.getString(StringsR.string.fast_forward))
100+
.setPlayerCommand(Player.COMMAND_SEEK_FORWARD)
101+
.setSlots(CommandButton.SLOT_FORWARD)
102+
.build(),
103+
),
104+
)
88105
.build()
89106
}
90107
}

0 commit comments

Comments
 (0)