Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,19 @@ class MediaSessionFactory @Inject constructor(
}
}

private val pauseAtEndOfMediaItemsListener = object : Player.Listener {
override fun onEvents(player: Player, events: Player.Events) {
if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED, Player.EVENT_SHUFFLE_MODE_ENABLED_CHANGED)) {
(player as? ExoPlayer)?.updatePauseAtEndOfMediaItems()
}
}
}

fun create(): MediaSession {
val player = createPlayer()
player.updatePauseAtEndOfMediaItems()
player.addListener(resumptionPlayerListener)
player.addListener(pauseAtEndOfMediaItemsListener)
return MediaSession
.Builder(context, player)
.setBitmapLoader(bitmapLoader)
Expand All @@ -51,13 +61,17 @@ class MediaSessionFactory @Inject constructor(
.build()
}

private fun createPlayer(): Player = ExoPlayer.Builder(context)
private fun createPlayer(): ExoPlayer = ExoPlayer.Builder(context)
.setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory))
.setAudioAttributes(AudioAttributes.DEFAULT, true)
.setHandleAudioBecomingNoisy(true)
.setSeekForwardIncrementMs(SEEK_FORWARD_INCREMENT_IN_MILLISECONDS)
.build()

private fun ExoPlayer.updatePauseAtEndOfMediaItems() {
pauseAtEndOfMediaItems = repeatMode == Player.REPEAT_MODE_OFF && !shuffleModeEnabled
}

private fun createCustomLayout(): List<CommandButton> = listOf(
CommandButton
.Builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@ class PlaybackSettings @Inject constructor(context: Context) {
private const val PREFERENCES_FILE_NAME = "playback_settings"
private const val REPEAT_MODE_ID_KEY = "repeat_mode_id"
private const val SHUFFLE_KEY = "shuffle"
private val DEFAULT_REPEAT_MODE = RepeatMode.ALL
private val DEFAULT_REPEAT_MODE = RepeatMode.OFF
}

private val preferences = context.getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE)

val repeatMode: RepeatMode
get() = preferences.getInt(REPEAT_MODE_ID_KEY, -1)
.let { id -> RepeatMode.entries.firstOrNull { it.id == id } }
?.takeUnless { it == RepeatMode.ALL }
?: DEFAULT_REPEAT_MODE

val isShuffle: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ class PlayerControlView @JvmOverloads constructor(
// Repeat and Random are mutually exclusive
playbackModel.setShuffle(false)

playbackModel.setRepeatMode(if (repeatSingle) RepeatMode.SINGLE else RepeatMode.ALL)
playbackModel.setRepeatMode(if (repeatSingle) RepeatMode.SINGLE else RepeatMode.OFF)
}

binding.ivRandom.setOnClickListener {
Expand Down
Loading