Update local config when shuffle, repeat mode is changed
This commit is contained in:
parent
f14972eb97
commit
197e143403
4 changed files with 40 additions and 15 deletions
|
@ -264,8 +264,7 @@ class TrackActivity : SimpleControllerActivity(), PlaybackSpeedListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupShuffleButton() {
|
private fun setupShuffleButton(isShuffleEnabled: Boolean = config.isShuffleEnabled) {
|
||||||
val isShuffleEnabled = config.isShuffleEnabled
|
|
||||||
activity_track_toggle_shuffle.apply {
|
activity_track_toggle_shuffle.apply {
|
||||||
applyColorFilter(if (isShuffleEnabled) getProperPrimaryColor() else getProperTextColor())
|
applyColorFilter(if (isShuffleEnabled) getProperPrimaryColor() else getProperTextColor())
|
||||||
alpha = if (isShuffleEnabled) 1f else MEDIUM_ALPHA
|
alpha = if (isShuffleEnabled) 1f else MEDIUM_ALPHA
|
||||||
|
@ -293,8 +292,7 @@ class TrackActivity : SimpleControllerActivity(), PlaybackSpeedListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupPlaybackSettingButton() {
|
private fun setupPlaybackSettingButton(playbackSetting: PlaybackSetting = config.playbackSetting) {
|
||||||
val playbackSetting = config.playbackSetting
|
|
||||||
activity_track_playback_setting.apply {
|
activity_track_playback_setting.apply {
|
||||||
contentDescription = getString(playbackSetting.contentDescriptionStringRes)
|
contentDescription = getString(playbackSetting.contentDescriptionStringRes)
|
||||||
setImageResource(playbackSetting.iconRes)
|
setImageResource(playbackSetting.iconRes)
|
||||||
|
@ -352,15 +350,13 @@ class TrackActivity : SimpleControllerActivity(), PlaybackSpeedListener {
|
||||||
return BitmapDrawable(resources, bitmapResized)
|
return BitmapDrawable(resources, bitmapResized)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPlaybackStateChanged(playbackState: Int) {
|
override fun onPlaybackStateChanged(playbackState: Int) = updatePlayerState()
|
||||||
super.onPlaybackStateChanged(playbackState)
|
|
||||||
updatePlayerState()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
override fun onIsPlayingChanged(isPlaying: Boolean) = updatePlayerState()
|
||||||
super.onIsPlayingChanged(isPlaying)
|
|
||||||
updatePlayerState()
|
override fun onRepeatModeChanged(repeatMode: Int) = setupPlaybackSettingButton(getPlaybackSetting(repeatMode))
|
||||||
}
|
|
||||||
|
override fun onShuffleModeEnabledChanged(shuffleModeEnabled: Boolean) = setupShuffleButton(shuffleModeEnabled)
|
||||||
|
|
||||||
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
||||||
super.onMediaItemTransition(mediaItem, reason)
|
super.onMediaItemTransition(mediaItem, reason)
|
||||||
|
@ -382,13 +378,16 @@ class TrackActivity : SimpleControllerActivity(), PlaybackSpeedListener {
|
||||||
private fun updatePlayerState() {
|
private fun updatePlayerState() {
|
||||||
withPlayer {
|
withPlayer {
|
||||||
val isPlaying = isReallyPlaying
|
val isPlaying = isReallyPlaying
|
||||||
activity_track_play_pause.updatePlayPauseIcon(isReallyPlaying, getProperTextColor())
|
|
||||||
updateProgress(currentPosition)
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
scheduleProgressUpdate()
|
scheduleProgressUpdate()
|
||||||
} else {
|
} else {
|
||||||
cancelProgressUpdate()
|
cancelProgressUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateProgress(currentPosition)
|
||||||
|
updatePlayPause(isPlaying)
|
||||||
|
setupShuffleButton(shuffleModeEnabled)
|
||||||
|
setupPlaybackSettingButton(getPlaybackSetting(repeatMode))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,4 +409,8 @@ class TrackActivity : SimpleControllerActivity(), PlaybackSpeedListener {
|
||||||
private fun updateProgress(currentPosition: Long) {
|
private fun updateProgress(currentPosition: Long) {
|
||||||
activity_track_progressbar.progress = currentPosition.milliseconds.inWholeSeconds.toInt()
|
activity_track_progressbar.progress = currentPosition.milliseconds.inWholeSeconds.toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updatePlayPause(isPlaying: Boolean) {
|
||||||
|
activity_track_play_pause.updatePlayPauseIcon(isPlaying, getProperTextColor())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import android.provider.MediaStore
|
||||||
import android.provider.MediaStore.Audio
|
import android.provider.MediaStore.Audio
|
||||||
import android.util.Size
|
import android.util.Size
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import androidx.media3.common.Player
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.DataSource
|
import com.bumptech.glide.load.DataSource
|
||||||
import com.bumptech.glide.load.engine.GlideException
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
|
@ -279,3 +280,12 @@ fun Context.getTrackFromUri(uri: Uri?, callback: (track: Track) -> Unit) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.isTabVisible(flag: Int) = config.showTabs and flag != 0
|
fun Context.isTabVisible(flag: Int) = config.showTabs and flag != 0
|
||||||
|
|
||||||
|
fun Context.getPlaybackSetting(repeatMode: @Player.RepeatMode Int): PlaybackSetting {
|
||||||
|
return when (repeatMode) {
|
||||||
|
Player.REPEAT_MODE_OFF -> PlaybackSetting.REPEAT_OFF
|
||||||
|
Player.REPEAT_MODE_ONE -> PlaybackSetting.REPEAT_TRACK
|
||||||
|
Player.REPEAT_MODE_ALL -> PlaybackSetting.REPEAT_PLAYLIST
|
||||||
|
else -> config.playbackSetting
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -118,7 +118,10 @@ fun Player.maybeForcePrevious(): Boolean {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function takes a list of media items and the current index in the playlist. It then
|
||||||
|
* adds the media items that come before and after the current index to the player's playlist.
|
||||||
|
*/
|
||||||
fun Player.addRemainingMediaItems(mediaItems: List<MediaItem>, currentIndex: Int) {
|
fun Player.addRemainingMediaItems(mediaItems: List<MediaItem>, currentIndex: Int) {
|
||||||
val itemsAtStart = mediaItems.take(currentIndex)
|
val itemsAtStart = mediaItems.take(currentIndex)
|
||||||
val itemsAtEnd = mediaItems.takeLast(mediaItems.lastIndex - currentIndex)
|
val itemsAtEnd = mediaItems.takeLast(mediaItems.lastIndex - currentIndex)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import androidx.media3.common.util.UnstableApi
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
import com.simplemobiletools.musicplayer.R
|
import com.simplemobiletools.musicplayer.R
|
||||||
import com.simplemobiletools.musicplayer.extensions.config
|
import com.simplemobiletools.musicplayer.extensions.config
|
||||||
|
import com.simplemobiletools.musicplayer.extensions.getPlaybackSetting
|
||||||
import com.simplemobiletools.musicplayer.helpers.PlaybackSetting
|
import com.simplemobiletools.musicplayer.helpers.PlaybackSetting
|
||||||
import com.simplemobiletools.musicplayer.playback.PlaybackService
|
import com.simplemobiletools.musicplayer.playback.PlaybackService
|
||||||
|
|
||||||
|
@ -43,4 +44,12 @@ internal fun PlaybackService.getPlayerListener() = object : Player.Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onRepeatModeChanged(repeatMode: Int) {
|
||||||
|
config.playbackSetting = getPlaybackSetting(repeatMode)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onShuffleModeEnabledChanged(shuffleModeEnabled: Boolean) {
|
||||||
|
config.isShuffleEnabled = shuffleModeEnabled
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue