Code Cleanup with abstract variables
This commit is contained in:
parent
5fba286afb
commit
f56000a8be
24 changed files with 461 additions and 1772 deletions
|
@ -14,15 +14,23 @@
|
||||||
*/
|
*/
|
||||||
package code.name.monkey.retromusic.fragments.base
|
package code.name.monkey.retromusic.fragments.base
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.graphics.PorterDuff
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.AccelerateInterpolator
|
import android.view.animation.AccelerateInterpolator
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
|
import android.widget.SeekBar
|
||||||
import androidx.annotation.LayoutRes
|
import androidx.annotation.LayoutRes
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
|
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
||||||
import code.name.monkey.retromusic.fragments.other.VolumeFragment
|
import code.name.monkey.retromusic.fragments.other.VolumeFragment
|
||||||
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
||||||
|
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
||||||
|
import code.name.monkey.retromusic.service.MusicService
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
|
||||||
|
@ -37,37 +45,74 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
|
||||||
|
|
||||||
protected abstract fun hide()
|
protected abstract fun hide()
|
||||||
|
|
||||||
protected abstract fun updateShuffleState()
|
|
||||||
|
|
||||||
protected abstract fun updateRepeatState()
|
|
||||||
|
|
||||||
protected abstract fun setUpProgressSlider()
|
|
||||||
|
|
||||||
abstract fun setColor(color: MediaNotificationProcessor)
|
abstract fun setColor(color: MediaNotificationProcessor)
|
||||||
|
|
||||||
fun showBounceAnimation(view: View) {
|
var lastPlaybackControlsColor: Int = 0
|
||||||
view.apply {
|
|
||||||
clearAnimation()
|
|
||||||
scaleX = 0.9f
|
|
||||||
scaleY = 0.9f
|
|
||||||
isVisible = true
|
|
||||||
pivotX = (view.width / 2).toFloat()
|
|
||||||
pivotY = (view.height / 2).toFloat()
|
|
||||||
|
|
||||||
animate().setDuration(200)
|
var lastDisabledPlaybackControlsColor: Int = 0
|
||||||
.setInterpolator(DecelerateInterpolator())
|
|
||||||
.scaleX(1.1f)
|
open val seekBar: SeekBar? = null
|
||||||
.scaleY(1.1f)
|
|
||||||
.withEndAction {
|
abstract val shuffleButton: ImageButton
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(AccelerateInterpolator())
|
abstract val repeatButton: ImageButton
|
||||||
.scaleX(1f)
|
|
||||||
.scaleY(1f)
|
open val nextButton: ImageButton? = null
|
||||||
.alpha(1f)
|
|
||||||
.start()
|
open val previousButton: ImageButton? = null
|
||||||
|
|
||||||
|
private fun setUpProgressSlider() {
|
||||||
|
seekBar?.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
||||||
|
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
||||||
|
if (fromUser) {
|
||||||
|
progressViewUpdateHelper.stop()
|
||||||
|
onUpdateProgressViews(
|
||||||
|
MusicPlayerRemote.songProgressMillis,
|
||||||
|
MusicPlayerRemote.songDurationMillis
|
||||||
|
)
|
||||||
}
|
}
|
||||||
.start()
|
}
|
||||||
}
|
|
||||||
|
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
||||||
|
super.onStopTrackingTouch(seekBar)
|
||||||
|
MusicPlayerRemote.seekTo(seekBar.progress)
|
||||||
|
onUpdateProgressViews(
|
||||||
|
MusicPlayerRemote.songProgressMillis,
|
||||||
|
MusicPlayerRemote.songDurationMillis
|
||||||
|
)
|
||||||
|
progressViewUpdateHelper.start()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun View.showBounceAnimation() {
|
||||||
|
clearAnimation()
|
||||||
|
scaleX = 0.9f
|
||||||
|
scaleY = 0.9f
|
||||||
|
isVisible = true
|
||||||
|
pivotX = (width / 2).toFloat()
|
||||||
|
pivotY = (height / 2).toFloat()
|
||||||
|
|
||||||
|
animate().setDuration(200)
|
||||||
|
.setInterpolator(DecelerateInterpolator())
|
||||||
|
.scaleX(1.1f)
|
||||||
|
.scaleY(1.1f)
|
||||||
|
.withEndAction {
|
||||||
|
animate().setDuration(200)
|
||||||
|
.setInterpolator(AccelerateInterpolator())
|
||||||
|
.scaleX(1f)
|
||||||
|
.scaleY(1f)
|
||||||
|
.alpha(1f)
|
||||||
|
.start()
|
||||||
|
}
|
||||||
|
.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
@ -75,6 +120,68 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
|
||||||
hideVolumeIfAvailable()
|
hideVolumeIfAvailable()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
setUpProgressSlider()
|
||||||
|
setUpPrevNext()
|
||||||
|
setUpShuffleButton()
|
||||||
|
setUpRepeatButton()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
|
private fun setUpPrevNext() {
|
||||||
|
nextButton?.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
||||||
|
previousButton?.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpShuffleButton() {
|
||||||
|
shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpRepeatButton() {
|
||||||
|
repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updatePrevNextColor() {
|
||||||
|
nextButton?.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
||||||
|
previousButton?.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateShuffleState() {
|
||||||
|
shuffleButton.setColorFilter(
|
||||||
|
when (MusicPlayerRemote.shuffleMode) {
|
||||||
|
MusicService.SHUFFLE_MODE_SHUFFLE -> lastPlaybackControlsColor
|
||||||
|
else -> lastDisabledPlaybackControlsColor
|
||||||
|
}, PorterDuff.Mode.SRC_IN
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateRepeatState() {
|
||||||
|
when (MusicPlayerRemote.repeatMode) {
|
||||||
|
MusicService.REPEAT_MODE_NONE -> {
|
||||||
|
repeatButton.setImageResource(R.drawable.ic_repeat)
|
||||||
|
repeatButton.setColorFilter(
|
||||||
|
lastDisabledPlaybackControlsColor,
|
||||||
|
PorterDuff.Mode.SRC_IN
|
||||||
|
)
|
||||||
|
}
|
||||||
|
MusicService.REPEAT_MODE_ALL -> {
|
||||||
|
repeatButton.setImageResource(R.drawable.ic_repeat)
|
||||||
|
repeatButton.setColorFilter(
|
||||||
|
lastPlaybackControlsColor,
|
||||||
|
PorterDuff.Mode.SRC_IN
|
||||||
|
)
|
||||||
|
}
|
||||||
|
MusicService.REPEAT_MODE_THIS -> {
|
||||||
|
repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
||||||
|
repeatButton.setColorFilter(
|
||||||
|
lastPlaybackControlsColor,
|
||||||
|
PorterDuff.Mode.SRC_IN
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected var volumeFragment: VolumeFragment? = null
|
protected var volumeFragment: VolumeFragment? = null
|
||||||
|
|
||||||
private fun hideVolumeIfAvailable() {
|
private fun hideVolumeIfAvailable() {
|
||||||
|
@ -83,10 +190,20 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
|
||||||
.replace(R.id.volumeFragmentContainer, VolumeFragment()).commit()
|
.replace(R.id.volumeFragmentContainer, VolumeFragment()).commit()
|
||||||
childFragmentManager.executePendingTransactions()
|
childFragmentManager.executePendingTransactions()
|
||||||
volumeFragment =
|
volumeFragment =
|
||||||
childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as VolumeFragment?
|
childFragmentManager.findFragmentById(R.id.volumeFragmentContainer) as? VolumeFragment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
progressViewUpdateHelper.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
progressViewUpdateHelper.stop()
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val SLIDER_ANIMATION_TIME: Long = 400
|
const val SLIDER_ANIMATION_TIME: Long = 400
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ import code.name.monkey.retromusic.adapter.Storage
|
||||||
import code.name.monkey.retromusic.adapter.StorageAdapter
|
import code.name.monkey.retromusic.adapter.StorageAdapter
|
||||||
import code.name.monkey.retromusic.adapter.StorageClickListener
|
import code.name.monkey.retromusic.adapter.StorageClickListener
|
||||||
import code.name.monkey.retromusic.databinding.FragmentFolderBinding
|
import code.name.monkey.retromusic.databinding.FragmentFolderBinding
|
||||||
|
import code.name.monkey.retromusic.databinding.FragmentPlayerPlaybackControlsBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
||||||
import code.name.monkey.retromusic.fragments.folder.FoldersFragment.ListPathsAsyncTask.OnPathsListedCallback
|
import code.name.monkey.retromusic.fragments.folder.FoldersFragment.ListPathsAsyncTask.OnPathsListedCallback
|
||||||
|
@ -93,14 +94,10 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var storageItems = ArrayList<Storage>()
|
private var storageItems = ArrayList<Storage>()
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
_binding = FragmentFolderBinding.inflate(inflater, container, false)
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
_binding = FragmentFolderBinding.bind(view)
|
||||||
|
|
||||||
mainActivity.addMusicServiceEventListener(libraryViewModel)
|
mainActivity.addMusicServiceEventListener(libraryViewModel)
|
||||||
mainActivity.setSupportActionBar(binding.toolbar)
|
mainActivity.setSupportActionBar(binding.toolbar)
|
||||||
mainActivity.supportActionBar?.title = null
|
mainActivity.supportActionBar?.title = null
|
||||||
|
|
|
@ -15,13 +15,10 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.adaptive
|
package code.name.monkey.retromusic.fragments.player.adaptive
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -31,13 +28,8 @@ import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerPlaybackControlsBinding
|
import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerPlaybackControlsBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -45,38 +37,29 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class AdaptivePlaybackControlsFragment :
|
class AdaptivePlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_adaptive_player_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_adaptive_player_playback_controls) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null
|
|
||||||
private var _binding: FragmentAdaptivePlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentAdaptivePlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val seekBar: SeekBar
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.progressSlider
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override val shuffleButton: ImageButton
|
||||||
inflater: LayoutInflater,
|
get() = binding.shuffleButton
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
override val repeatButton: ImageButton
|
||||||
): View {
|
get() = binding.repeatButton
|
||||||
_binding = FragmentAdaptivePlayerPlaybackControlsBinding.inflate(inflater, container, false)
|
|
||||||
return binding.root
|
override val nextButton: ImageButton
|
||||||
}
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
setUpMusicControllers()
|
_binding = FragmentAdaptivePlayerPlaybackControlsBinding.bind(view)
|
||||||
|
|
||||||
binding.playPauseButton.setOnClickListener {
|
setUpPlayPauseFab()
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
|
||||||
MusicPlayerRemote.pauseSong()
|
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.resumePlaying()
|
|
||||||
}
|
|
||||||
showBounceAnimation(binding.playPauseButton)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSong() {
|
private fun updateSong() {
|
||||||
|
@ -88,16 +71,6 @@ class AdaptivePlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper!!.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper!!.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPlayingMetaChanged() {
|
override fun onPlayingMetaChanged() {
|
||||||
super.onPlayingMetaChanged()
|
super.onPlayingMetaChanged()
|
||||||
updateSong()
|
updateSong()
|
||||||
|
@ -165,7 +138,14 @@ class AdaptivePlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
@ -176,92 +156,9 @@ class AdaptivePlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
override fun show() {}
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
override fun hide() {}
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun show() {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hide() {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
|
@ -15,14 +15,13 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.blur
|
package code.name.monkey.retromusic.fragments.player.blur
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.AccelerateInterpolator
|
import android.view.animation.AccelerateInterpolator
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
@ -34,15 +33,10 @@ import code.name.monkey.retromusic.databinding.FragmentBlurPlayerPlaybackControl
|
||||||
import code.name.monkey.retromusic.extensions.getSongInfo
|
import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -51,28 +45,26 @@ class BlurPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_blur_player_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_blur_player_playback_controls) {
|
||||||
private var _binding: FragmentBlurPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentBlurPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val seekBar: SeekBar
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.progressSlider
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val shuffleButton: ImageButton
|
||||||
|
get() = binding.shuffleButton
|
||||||
|
|
||||||
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentBlurPlayerPlaybackControlsBinding.bind(view)
|
_binding = FragmentBlurPlayerPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
|
|
||||||
binding.playPauseButton.setOnClickListener {
|
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
|
||||||
MusicPlayerRemote.pauseSong()
|
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.resumePlaying()
|
|
||||||
}
|
|
||||||
showBounceAnimation()
|
|
||||||
}
|
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
@ -96,16 +88,6 @@ class BlurPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper!!.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper!!.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
updateRepeatState()
|
updateRepeatState()
|
||||||
|
@ -162,7 +144,14 @@ class BlurPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
@ -173,73 +162,6 @@ class BlurPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -257,43 +179,6 @@ class BlurPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showBounceAnimation() {
|
|
||||||
binding.playPauseButton.apply {
|
|
||||||
clearAnimation()
|
|
||||||
scaleX = 0.9f
|
|
||||||
scaleY = 0.9f
|
|
||||||
isVisible = true
|
|
||||||
pivotX = (width / 2).toFloat()
|
|
||||||
pivotY = (height / 2).toFloat()
|
|
||||||
|
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(DecelerateInterpolator())
|
|
||||||
.scaleX(1.1f)
|
|
||||||
.scaleY(1.1f)
|
|
||||||
.withEndAction {
|
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(AccelerateInterpolator())
|
|
||||||
.scaleX(1f)
|
|
||||||
.scaleY(1f)
|
|
||||||
.alpha(1f).start()
|
|
||||||
}.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -96,11 +96,13 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayerToolbar() {
|
private fun setUpPlayerToolbar() {
|
||||||
binding.playerToolbar.inflateMenu(R.menu.menu_player)
|
binding.playerToolbar.apply {
|
||||||
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() }
|
inflateMenu(R.menu.menu_player)
|
||||||
binding.playerToolbar.setOnMenuItemClickListener(this)
|
setNavigationOnClickListener { requireActivity().onBackPressed() }
|
||||||
|
setOnMenuItemClickListener(this@CardFragment)
|
||||||
|
|
||||||
ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity)
|
ToolbarContentTintHelper.colorizeToolbar(this, Color.WHITE, activity)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.card
|
package code.name.monkey.retromusic.fragments.player.card
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -32,15 +32,10 @@ import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.ripAlpha
|
import code.name.monkey.retromusic.extensions.ripAlpha
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -48,31 +43,29 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class CardPlaybackControlsFragment :
|
class CardPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_card_player_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_card_player_playback_controls) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null
|
|
||||||
private var _binding: FragmentCardPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentCardPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val shuffleButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.mediaButton.shuffleButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.mediaButton.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.mediaButton.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.mediaButton.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentCardPlayerPlaybackControlsBinding.bind(view)
|
_binding = FragmentCardPlayerPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
|
|
||||||
binding.mediaButton.playPauseButton.setOnClickListener {
|
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
|
||||||
MusicPlayerRemote.pauseSong()
|
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.resumePlaying()
|
|
||||||
}
|
|
||||||
showBounceAnimation(binding.mediaButton.playPauseButton)
|
|
||||||
}
|
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
@ -96,16 +89,6 @@ class CardPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper!!.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper!!.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
updateRepeatState()
|
updateRepeatState()
|
||||||
|
@ -169,7 +152,14 @@ class CardPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
binding.mediaButton.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.mediaButton.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
@ -180,79 +170,6 @@ class CardPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.mediaButton.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.mediaButton.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.mediaButton.nextButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
binding.mediaButton.previousButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.mediaButton.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.mediaButton.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.mediaButton.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.mediaButton.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.mediaButton.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.mediaButton.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.mediaButton.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
@ -271,28 +188,9 @@ class CardPlaybackControlsFragment :
|
||||||
binding.songCurrentProgress.setTextColor(color)
|
binding.songCurrentProgress.setTextColor(color)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {}
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun hide() {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public override fun hide() {}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
|
|
|
@ -111,7 +111,8 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
|
||||||
setTitleTextColor(Color.WHITE)
|
setTitleTextColor(Color.WHITE)
|
||||||
setSubtitleTextColor(Color.WHITE)
|
setSubtitleTextColor(Color.WHITE)
|
||||||
ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity)
|
ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity)
|
||||||
}.setOnMenuItemClickListener(this)
|
setOnMenuItemClickListener(this@CardBlurFragment)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
|
|
|
@ -15,13 +15,12 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.cardblur
|
package code.name.monkey.retromusic.fragments.player.cardblur
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
import code.name.monkey.appthemehelper.util.TintHelper
|
import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
|
@ -31,13 +30,9 @@ import code.name.monkey.retromusic.extensions.applyColor
|
||||||
import code.name.monkey.retromusic.extensions.getSongInfo
|
import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -45,23 +40,29 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class CardBlurPlaybackControlsFragment :
|
class CardBlurPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_card_blur_player_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_card_blur_player_playback_controls) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
|
|
||||||
private var _binding: FragmentCardBlurPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentCardBlurPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val shuffleButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.mediaButton.shuffleButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.mediaButton.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.mediaButton.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.mediaButton.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentCardBlurPlayerPlaybackControlsBinding.bind(view)
|
_binding = FragmentCardBlurPlayerPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
|
binding.progressSlider.applyColor(Color.WHITE)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setColor(color: MediaNotificationProcessor) {
|
override fun setColor(color: MediaNotificationProcessor) {
|
||||||
|
@ -98,16 +99,6 @@ class CardBlurPlaybackControlsFragment :
|
||||||
binding.songInfo.setTextColor(color)
|
binding.songInfo.setTextColor(color)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
updateRepeatState()
|
updateRepeatState()
|
||||||
|
@ -141,89 +132,6 @@ class CardBlurPlaybackControlsFragment :
|
||||||
updateShuffleState()
|
updateShuffleState()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.mediaButton.nextButton.setOnTouchListener(
|
|
||||||
MusicSeekSkipTouchListener(
|
|
||||||
requireActivity(),
|
|
||||||
true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
binding.mediaButton.previousButton.setOnTouchListener(
|
|
||||||
MusicSeekSkipTouchListener(
|
|
||||||
requireActivity(),
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.mediaButton.nextButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
binding.mediaButton.previousButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.mediaButton.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.mediaButton.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.mediaButton.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.mediaButton.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.mediaButton.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.mediaButton.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.mediaButton.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.mediaButton.playPauseButton.animate()
|
binding.mediaButton.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -241,21 +149,6 @@ class CardBlurPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.applyColor(Color.WHITE)
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,7 @@ import android.graphics.drawable.ColorDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.animation.Animation
|
import android.view.animation.Animation
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
|
@ -79,17 +77,10 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
_binding = FragmentCirclePlayerBinding.inflate(inflater, container, false)
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
_binding = FragmentCirclePlayerBinding.bind(view)
|
||||||
|
|
||||||
setupViews()
|
setupViews()
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
|
|
@ -16,17 +16,14 @@ package code.name.monkey.retromusic.fragments.player.color
|
||||||
|
|
||||||
import android.animation.Animator
|
import android.animation.Animator
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewAnimationUtils
|
import android.view.ViewAnimationUtils
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.animation.AccelerateInterpolator
|
import android.view.animation.AccelerateInterpolator
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
import code.name.monkey.appthemehelper.util.TintHelper
|
import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
|
@ -36,15 +33,10 @@ import code.name.monkey.retromusic.extensions.applyColor
|
||||||
import code.name.monkey.retromusic.extensions.getSongInfo
|
import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -53,40 +45,29 @@ import kotlin.math.sqrt
|
||||||
class ColorPlaybackControlsFragment :
|
class ColorPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_adaptive_player_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_adaptive_player_playback_controls) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private var _binding: FragmentColorPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentColorPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val shuffleButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.shuffleButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override val repeatButton: ImageButton
|
||||||
inflater: LayoutInflater,
|
get() = binding.repeatButton
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
_binding = FragmentColorPlayerPlaybackControlsBinding.inflate(inflater, container, false)
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override val nextButton: ImageButton
|
||||||
super.onResume()
|
get() = binding.nextButton
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
override val previousButton: ImageButton
|
||||||
super.onPause()
|
get() = binding.previousButton
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
setUpMusicControllers()
|
_binding = FragmentColorPlayerPlaybackControlsBinding.bind(view)
|
||||||
|
|
||||||
|
setUpPlayPauseFab()
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
@ -157,81 +138,23 @@ class ColorPlaybackControlsFragment :
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
TintHelper.setTintAuto(binding.playPauseButton, Color.WHITE, true)
|
TintHelper.setTintAuto(binding.playPauseButton, Color.WHITE, true)
|
||||||
TintHelper.setTintAuto(binding.playPauseButton, Color.BLACK, false)
|
TintHelper.setTintAuto(binding.playPauseButton, Color.BLACK, false)
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
when {
|
binding.playPauseButton.setImageResource(
|
||||||
MusicPlayerRemote.isPlaying -> binding.playPauseButton.setImageResource(R.drawable.ic_pause)
|
when {
|
||||||
else -> binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow)
|
MusicPlayerRemote.isPlaying -> R.drawable.ic_pause
|
||||||
}
|
else -> R.drawable.ic_play_arrow
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
)
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
|
@ -251,20 +174,6 @@ class ColorPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,12 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.fit
|
package code.name.monkey.retromusic.fragments.player.fit
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.AccelerateInterpolator
|
import android.view.animation.AccelerateInterpolator
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
|
@ -31,38 +30,39 @@ import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentFitPlaybackControlsBinding
|
import code.name.monkey.retromusic.databinding.FragmentFitPlaybackControlsBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
|
||||||
class FitPlaybackControlsFragment :
|
class FitPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_fit_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_fit_playback_controls) {
|
||||||
|
|
||||||
private var _binding: FragmentFitPlaybackControlsBinding? = null
|
private var _binding: FragmentFitPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
override val shuffleButton: ImageButton
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
get() = binding.shuffleButton
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val repeatButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.repeatButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentFitPlaybackControlsBinding.bind(view)
|
_binding = FragmentFitPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
|
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
|
@ -73,15 +73,6 @@ class FitPlaybackControlsFragment :
|
||||||
binding.text.setOnClickListener {
|
binding.text.setOnClickListener {
|
||||||
goToArtist(requireActivity())
|
goToArtist(requireActivity())
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.playPauseButton.setOnClickListener {
|
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
|
||||||
MusicPlayerRemote.pauseSong()
|
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.resumePlaying()
|
|
||||||
}
|
|
||||||
showBounceAnimation()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSong() {
|
private fun updateSong() {
|
||||||
|
@ -96,16 +87,6 @@ class FitPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
updateRepeatState()
|
updateRepeatState()
|
||||||
|
@ -166,7 +147,14 @@ class FitPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
@ -177,73 +165,6 @@ class FitPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -261,43 +182,6 @@ class FitPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showBounceAnimation() {
|
|
||||||
binding.playPauseButton.apply {
|
|
||||||
clearAnimation()
|
|
||||||
scaleX = 0.9f
|
|
||||||
scaleY = 0.9f
|
|
||||||
isVisible = true
|
|
||||||
pivotX = (width / 2).toFloat()
|
|
||||||
pivotY = (height / 2).toFloat()
|
|
||||||
|
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(DecelerateInterpolator())
|
|
||||||
.scaleX(1.1f)
|
|
||||||
.scaleY(1.1f)
|
|
||||||
.withEndAction {
|
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(AccelerateInterpolator())
|
|
||||||
.scaleX(1f)
|
|
||||||
.scaleY(1f)
|
|
||||||
.alpha(1f).start()
|
|
||||||
}.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.flat
|
package code.name.monkey.retromusic.fragments.player.flat
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -33,11 +33,8 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
|
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -45,22 +42,28 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class FlatPlaybackControlsFragment :
|
class FlatPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_flat_player_playback_controls), Callback {
|
AbsPlayerControlsFragment(R.layout.fragment_flat_player_playback_controls), Callback {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private var _binding: FragmentFlatPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentFlatPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val shuffleButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.shuffleButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton?
|
||||||
|
get() = null
|
||||||
|
|
||||||
|
override val previousButton: ImageButton?
|
||||||
|
get() = null
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentFlatPlayerPlaybackControlsBinding.bind(view)
|
_binding = FragmentFlatPlayerPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
@ -71,16 +74,6 @@ class FlatPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -157,10 +150,6 @@ class FlatPlaybackControlsFragment :
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
binding.playPauseButton.setImageResource(R.drawable.ic_pause)
|
binding.playPauseButton.setImageResource(R.drawable.ic_pause)
|
||||||
|
@ -169,13 +158,6 @@ class FlatPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateSong() {
|
private fun updateSong() {
|
||||||
val song = MusicPlayerRemote.currentSong
|
val song = MusicPlayerRemote.currentSong
|
||||||
binding.title.text = song.title
|
binding.title.text = song.title
|
||||||
|
@ -196,67 +178,6 @@ class FlatPlaybackControlsFragment :
|
||||||
updateShuffleState()
|
updateShuffleState()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,9 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.full
|
package code.name.monkey.retromusic.fragments.player.full
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.graphics.drawable.AnimatedVectorDrawable
|
import android.graphics.drawable.AnimatedVectorDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
@ -27,6 +25,7 @@ import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.appcompat.widget.PopupMenu
|
import androidx.appcompat.widget.PopupMenu
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
@ -41,13 +40,11 @@ import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.ReloadType
|
import code.name.monkey.retromusic.fragments.ReloadType
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
@ -69,17 +66,24 @@ class FullPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_full_player_controls),
|
AbsPlayerControlsFragment(R.layout.fragment_full_player_controls),
|
||||||
PopupMenu.OnMenuItemClickListener {
|
PopupMenu.OnMenuItemClickListener {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private val libraryViewModel: LibraryViewModel by sharedViewModel()
|
private val libraryViewModel: LibraryViewModel by sharedViewModel()
|
||||||
private var _binding: FragmentFullPlayerControlsBinding? = null
|
private var _binding: FragmentFullPlayerControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val seekBar: SeekBar
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.progressSlider
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val shuffleButton: ImageButton
|
||||||
|
get() = binding.shuffleButton
|
||||||
|
|
||||||
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
@ -97,16 +101,6 @@ class FullPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -193,10 +187,6 @@ class FullPlaybackControlsFragment :
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
private fun setUpMusicControllers() {
|
||||||
setUpPlayPauseFab()
|
setUpPlayPauseFab()
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
setupFavourite()
|
setupFavourite()
|
||||||
setupMenu()
|
setupMenu()
|
||||||
}
|
}
|
||||||
|
@ -216,32 +206,6 @@ class FullPlaybackControlsFragment :
|
||||||
return (parentFragment as FullPlayerFragment).onMenuItemClick(item!!)
|
return (parentFragment as FullPlayerFragment).onMenuItemClick(item!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
@ -262,53 +226,6 @@ class FullPlaybackControlsFragment :
|
||||||
updateShuffleState()
|
updateShuffleState()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupFavourite() {
|
private fun setupFavourite() {
|
||||||
binding.songFavourite.setOnClickListener {
|
binding.songFavourite.setOnClickListener {
|
||||||
toggleFavorite(MusicPlayerRemote.currentSong)
|
toggleFavorite(MusicPlayerRemote.currentSong)
|
||||||
|
|
|
@ -37,7 +37,6 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player),
|
||||||
private var _binding: FragmentHomePlayerBinding? = null
|
private var _binding: FragmentHomePlayerBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
||||||
|
|
|
@ -15,12 +15,11 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.lockscreen
|
package code.name.monkey.retromusic.fragments.player.lockscreen
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
|
@ -31,13 +30,9 @@ import code.name.monkey.retromusic.databinding.FragmentLockScreenPlaybackControl
|
||||||
import code.name.monkey.retromusic.extensions.applyColor
|
import code.name.monkey.retromusic.extensions.applyColor
|
||||||
import code.name.monkey.retromusic.extensions.ripAlpha
|
import code.name.monkey.retromusic.extensions.ripAlpha
|
||||||
import code.name.monkey.retromusic.extensions.textColorSecondary
|
import code.name.monkey.retromusic.extensions.textColorSecondary
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -48,23 +43,28 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class LockScreenControlsFragment :
|
class LockScreenControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_lock_screen_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_lock_screen_playback_controls) {
|
||||||
|
|
||||||
private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
|
|
||||||
private var _binding: FragmentLockScreenPlaybackControlsBinding? = null
|
private var _binding: FragmentLockScreenPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val shuffleButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.shuffleButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentLockScreenPlaybackControlsBinding.bind(view)
|
_binding = FragmentLockScreenPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,16 +74,6 @@ class LockScreenControlsFragment :
|
||||||
binding.text.text = String.format("%s - %s", song.artistName, song.albumName)
|
binding.text.text = String.format("%s - %s", song.artistName, song.albumName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper?.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper?.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
updateRepeatState()
|
updateRepeatState()
|
||||||
|
@ -159,73 +149,6 @@ class LockScreenControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpProgressSlider()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpRepeatButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -243,20 +166,6 @@ class LockScreenControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.material
|
package code.name.monkey.retromusic.fragments.player.material
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -27,15 +27,11 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentMaterialPlaybackControlsBinding
|
import code.name.monkey.retromusic.databinding.FragmentMaterialPlaybackControlsBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -46,22 +42,29 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class MaterialControlsFragment :
|
class MaterialControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_material_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_material_playback_controls) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private var _binding: FragmentMaterialPlaybackControlsBinding? = null
|
private var _binding: FragmentMaterialPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val shuffleButton: ImageButton
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.shuffleButton
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentMaterialPlaybackControlsBinding.bind(view)
|
_binding = FragmentMaterialPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
@ -85,16 +88,6 @@ class MaterialControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
updateRepeatState()
|
updateRepeatState()
|
||||||
|
@ -177,92 +170,9 @@ class MaterialControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
public override fun show() {}
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
public override fun hide() {}
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_sharp)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_sharp)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one_sharp)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun hide() {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
|
@ -29,6 +29,7 @@ import code.name.monkey.retromusic.SNOWFALL
|
||||||
import code.name.monkey.retromusic.databinding.FragmentPlayerBinding
|
import code.name.monkey.retromusic.databinding.FragmentPlayerBinding
|
||||||
import code.name.monkey.retromusic.extensions.colorControlNormal
|
import code.name.monkey.retromusic.extensions.colorControlNormal
|
||||||
import code.name.monkey.retromusic.extensions.drawAboveSystemBars
|
import code.name.monkey.retromusic.extensions.drawAboveSystemBars
|
||||||
|
import code.name.monkey.retromusic.extensions.isColorLight
|
||||||
import code.name.monkey.retromusic.extensions.surfaceColor
|
import code.name.monkey.retromusic.extensions.surfaceColor
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
||||||
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
||||||
|
@ -167,7 +168,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player),
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun startOrStopSnow(isSnowFalling: Boolean) {
|
private fun startOrStopSnow(isSnowFalling: Boolean) {
|
||||||
if (isSnowFalling) {
|
if (isSnowFalling && !surfaceColor().isColorLight) {
|
||||||
binding.snowfallView.isVisible = true
|
binding.snowfallView.isVisible = true
|
||||||
binding.snowfallView.restartFalling()
|
binding.snowfallView.restartFalling()
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -15,12 +15,11 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.normal
|
package code.name.monkey.retromusic.fragments.player.normal
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -30,15 +29,10 @@ import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentPlayerPlaybackControlsBinding
|
import code.name.monkey.retromusic.databinding.FragmentPlayerPlaybackControlsBinding
|
||||||
import code.name.monkey.retromusic.extensions.*
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -46,29 +40,29 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class PlayerPlaybackControlsFragment :
|
class PlayerPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_player_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_player_playback_controls) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private var _binding: FragmentPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val seekBar: SeekBar
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.progressSlider
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
override val shuffleButton: ImageButton
|
||||||
|
get() = binding.shuffleButton
|
||||||
|
|
||||||
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentPlayerPlaybackControlsBinding.bind(view)
|
_binding = FragmentPlayerPlaybackControlsBinding.bind(view)
|
||||||
setUpMusicControllers()
|
|
||||||
binding.playPauseButton.setOnClickListener {
|
setUpPlayPauseFab()
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
|
||||||
MusicPlayerRemote.pauseSong()
|
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.resumePlaying()
|
|
||||||
}
|
|
||||||
showBounceAnimation(binding.playPauseButton)
|
|
||||||
}
|
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.isSelected = true
|
binding.text.isSelected = true
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
|
@ -128,15 +122,6 @@ class PlayerPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
|
@ -163,7 +148,14 @@ class PlayerPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
@ -174,73 +166,6 @@ class PlayerPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -258,20 +183,6 @@ class PlayerPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,12 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.peak
|
package code.name.monkey.retromusic.fragments.player.peak
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -29,13 +29,9 @@ import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentPeakControlPlayerBinding
|
import code.name.monkey.retromusic.databinding.FragmentPeakControlPlayerBinding
|
||||||
import code.name.monkey.retromusic.extensions.applyColor
|
import code.name.monkey.retromusic.extensions.applyColor
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -46,26 +42,23 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
|
||||||
class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_peak_control_player) {
|
class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_peak_control_player) {
|
||||||
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private var _binding: FragmentPeakControlPlayerBinding? = null
|
private var _binding: FragmentPeakControlPlayerBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override val seekBar: SeekBar
|
||||||
super.onCreate(savedInstanceState)
|
get() = binding.progressSlider
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override val shuffleButton: ImageButton
|
||||||
super.onResume()
|
get() = binding.shuffleButton
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
override val repeatButton: ImageButton
|
||||||
super.onPause()
|
get() = binding.repeatButton
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onViewCreated(
|
override fun onViewCreated(
|
||||||
view: View,
|
view: View,
|
||||||
|
@ -73,14 +66,12 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe
|
||||||
) {
|
) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentPeakControlPlayerBinding.bind(view)
|
_binding = FragmentPeakControlPlayerBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun show() {
|
override fun show() {}
|
||||||
}
|
|
||||||
|
|
||||||
override fun hide() {
|
override fun hide() {}
|
||||||
}
|
|
||||||
|
|
||||||
override fun setColor(color: MediaNotificationProcessor) {
|
override fun setColor(color: MediaNotificationProcessor) {
|
||||||
val controlsColor =
|
val controlsColor =
|
||||||
|
@ -118,40 +109,6 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener {
|
|
||||||
MusicPlayerRemote.toggleShuffleMode()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener {
|
|
||||||
MusicPlayerRemote.cycleRepeatMode()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
@ -170,57 +127,6 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPlayStateChanged() {
|
override fun onPlayStateChanged() {
|
||||||
super.onPlayStateChanged()
|
super.onPlayStateChanged()
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
|
|
|
@ -15,15 +15,12 @@
|
||||||
package code.name.monkey.retromusic.fragments.player.plain
|
package code.name.monkey.retromusic.fragments.player.plain
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.AccelerateInterpolator
|
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.core.view.isVisible
|
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
|
@ -35,13 +32,8 @@ import code.name.monkey.retromusic.extensions.applyColor
|
||||||
import code.name.monkey.retromusic.extensions.getSongInfo
|
import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -53,12 +45,24 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
class PlainPlaybackControlsFragment :
|
class PlainPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_plain_controls_fragment) {
|
AbsPlayerControlsFragment(R.layout.fragment_plain_controls_fragment) {
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
private var _binding: FragmentPlainControlsFragmentBinding? = null
|
private var _binding: FragmentPlainControlsFragmentBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val seekBar: SeekBar
|
||||||
|
get() = binding.progressSlider
|
||||||
|
|
||||||
|
override val shuffleButton: ImageButton
|
||||||
|
get() = binding.shuffleButton
|
||||||
|
|
||||||
|
override val repeatButton: ImageButton
|
||||||
|
get() = binding.repeatButton
|
||||||
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onPlayStateChanged() {
|
override fun onPlayStateChanged() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
}
|
}
|
||||||
|
@ -92,60 +96,23 @@ class PlainPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentPlainControlsFragmentBinding.bind(view)
|
_binding = FragmentPlainControlsFragmentBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpPlayPauseFab() {
|
||||||
binding.playPauseButton.setOnClickListener {
|
binding.playPauseButton.setOnClickListener {
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
MusicPlayerRemote.pauseSong()
|
MusicPlayerRemote.pauseSong()
|
||||||
} else {
|
} else {
|
||||||
MusicPlayerRemote.resumePlaying()
|
MusicPlayerRemote.resumePlaying()
|
||||||
}
|
}
|
||||||
showBounceAnimation()
|
it.showBounceAnimation()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setColor(color: MediaNotificationProcessor) {
|
override fun setColor(color: MediaNotificationProcessor) {
|
||||||
val colorBg = ATHUtil.resolveColor(requireContext(), android.R.attr.colorBackground)
|
val colorBg = ATHUtil.resolveColor(requireContext(), android.R.attr.colorBackground)
|
||||||
if (ColorUtil.isColorLight(colorBg)) {
|
if (ColorUtil.isColorLight(colorBg)) {
|
||||||
|
@ -183,53 +150,6 @@ class PlainPlaybackControlsFragment :
|
||||||
updatePrevNextColor()
|
updatePrevNextColor()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun show() {
|
public override fun show() {
|
||||||
binding.playPauseButton.animate()
|
binding.playPauseButton.animate()
|
||||||
.scaleX(1f)
|
.scaleX(1f)
|
||||||
|
@ -247,29 +167,6 @@ class PlainPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showBounceAnimation() {
|
|
||||||
binding.playPauseButton.apply {
|
|
||||||
clearAnimation()
|
|
||||||
scaleX = 0.9f
|
|
||||||
scaleY = 0.9f
|
|
||||||
isVisible = true
|
|
||||||
pivotX = (width / 2).toFloat()
|
|
||||||
pivotY = (height / 2).toFloat()
|
|
||||||
|
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(DecelerateInterpolator())
|
|
||||||
.scaleX(1.1f)
|
|
||||||
.scaleY(1.1f)
|
|
||||||
.withEndAction {
|
|
||||||
animate().setDuration(200)
|
|
||||||
.setInterpolator(AccelerateInterpolator())
|
|
||||||
.scaleX(1f)
|
|
||||||
.scaleY(1f)
|
|
||||||
.alpha(1f).start()
|
|
||||||
}.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
binding.playPauseButton.setImageResource(R.drawable.ic_pause)
|
binding.playPauseButton.setImageResource(R.drawable.ic_pause)
|
||||||
|
@ -278,20 +175,6 @@ class PlainPlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
|
||||||
MusicPlayerRemote.songProgressMillis,
|
|
||||||
MusicPlayerRemote.songDurationMillis
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.max = total
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
*/
|
*/
|
||||||
package code.name.monkey.retromusic.fragments.player.simple
|
package code.name.monkey.retromusic.fragments.player.simple
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
|
import android.widget.ImageButton
|
||||||
|
import android.widget.SeekBar
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
|
@ -29,14 +29,10 @@ import code.name.monkey.retromusic.databinding.FragmentSimpleControlsFragmentBin
|
||||||
import code.name.monkey.retromusic.extensions.getSongInfo
|
import code.name.monkey.retromusic.extensions.getSongInfo
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
import code.name.monkey.retromusic.extensions.hide
|
||||||
import code.name.monkey.retromusic.extensions.show
|
import code.name.monkey.retromusic.extensions.show
|
||||||
import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
|
||||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
@ -51,10 +47,17 @@ class SimplePlaybackControlsFragment :
|
||||||
private var _binding: FragmentSimpleControlsFragmentBinding? = null
|
private var _binding: FragmentSimpleControlsFragmentBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
override val shuffleButton: ImageButton
|
||||||
|
get() = binding.shuffleButton
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
override val repeatButton: ImageButton
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
get() = binding.repeatButton
|
||||||
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
|
|
||||||
|
override val nextButton: ImageButton
|
||||||
|
get() = binding.nextButton
|
||||||
|
|
||||||
|
override val previousButton: ImageButton
|
||||||
|
get() = binding.previousButton
|
||||||
|
|
||||||
override fun onPlayStateChanged() {
|
override fun onPlayStateChanged() {
|
||||||
updatePlayPauseDrawableState()
|
updatePlayPauseDrawableState()
|
||||||
|
@ -75,37 +78,15 @@ class SimplePlaybackControlsFragment :
|
||||||
updateSong()
|
updateSong()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
progressViewUpdateHelper.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
progressViewUpdateHelper.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentSimpleControlsFragmentBinding.bind(view)
|
_binding = FragmentSimpleControlsFragmentBinding.bind(view)
|
||||||
setUpMusicControllers()
|
setUpPlayPauseFab()
|
||||||
binding.title.isSelected = true
|
binding.title.isSelected = true
|
||||||
binding.text.setOnClickListener {
|
binding.text.setOnClickListener {
|
||||||
goToArtist(requireActivity())
|
goToArtist(requireActivity())
|
||||||
}
|
}
|
||||||
binding.playPauseButton.setOnClickListener {
|
|
||||||
if (MusicPlayerRemote.isPlaying) {
|
|
||||||
MusicPlayerRemote.pauseSong()
|
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.resumePlaying()
|
|
||||||
}
|
|
||||||
showBounceAnimation(binding.playPauseButton)
|
|
||||||
}
|
|
||||||
binding.title.setOnClickListener {
|
binding.title.setOnClickListener {
|
||||||
goToAlbum(requireActivity())
|
goToAlbum(requireActivity())
|
||||||
}
|
}
|
||||||
|
@ -114,73 +95,6 @@ class SimplePlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpPlayPauseFab()
|
|
||||||
setUpPrevNext()
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
|
||||||
private fun setUpPrevNext() {
|
|
||||||
updatePrevNextColor()
|
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
|
||||||
binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.shuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.repeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateSong() {
|
private fun updateSong() {
|
||||||
val song = MusicPlayerRemote.currentSong
|
val song = MusicPlayerRemote.currentSong
|
||||||
binding.title.text = song.title
|
binding.title.text = song.title
|
||||||
|
@ -216,9 +130,6 @@ class SimplePlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.songCurrentProgress.text = String.format(
|
binding.songCurrentProgress.text = String.format(
|
||||||
"%s / %s",
|
"%s / %s",
|
||||||
|
@ -266,7 +177,14 @@ class SimplePlaybackControlsFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpPlayPauseFab() {
|
private fun setUpPlayPauseFab() {
|
||||||
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())
|
binding.playPauseButton.setOnClickListener {
|
||||||
|
if (MusicPlayerRemote.isPlaying) {
|
||||||
|
MusicPlayerRemote.pauseSong()
|
||||||
|
} else {
|
||||||
|
MusicPlayerRemote.resumePlaying()
|
||||||
|
}
|
||||||
|
it.showBounceAnimation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
|
|
@ -14,15 +14,13 @@
|
||||||
*/
|
*/
|
||||||
package code.name.monkey.retromusic.fragments.player.tiny
|
package code.name.monkey.retromusic.fragments.player.tiny
|
||||||
|
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.ImageButton
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.FragmentTinyControlsFragmentBinding
|
import code.name.monkey.retromusic.databinding.FragmentTinyControlsFragmentBinding
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
|
||||||
class TinyPlaybackControlsFragment :
|
class TinyPlaybackControlsFragment :
|
||||||
|
@ -30,14 +28,15 @@ class TinyPlaybackControlsFragment :
|
||||||
private var _binding: FragmentTinyControlsFragmentBinding? = null
|
private var _binding: FragmentTinyControlsFragmentBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun show() {
|
override val shuffleButton: ImageButton
|
||||||
}
|
get() = binding.shuffleButton
|
||||||
|
|
||||||
override fun hide() {
|
override val repeatButton: ImageButton
|
||||||
}
|
get() = binding.repeatButton
|
||||||
|
|
||||||
override fun setUpProgressSlider() {
|
override fun show() {}
|
||||||
}
|
|
||||||
|
override fun hide() {}
|
||||||
|
|
||||||
override fun setColor(color: MediaNotificationProcessor) {
|
override fun setColor(color: MediaNotificationProcessor) {
|
||||||
lastPlaybackControlsColor = color.secondaryTextColor
|
lastPlaybackControlsColor = color.secondaryTextColor
|
||||||
|
@ -50,66 +49,9 @@ class TinyPlaybackControlsFragment :
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private var lastPlaybackControlsColor: Int = 0
|
|
||||||
private var lastDisabledPlaybackControlsColor: Int = 0
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
_binding = FragmentTinyControlsFragmentBinding.bind(view)
|
_binding = FragmentTinyControlsFragmentBinding.bind(view)
|
||||||
setUpMusicControllers()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpMusicControllers() {
|
|
||||||
setUpRepeatButton()
|
|
||||||
setUpShuffleButton()
|
|
||||||
setUpProgressSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpShuffleButton() {
|
|
||||||
binding.playerShuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setUpRepeatButton() {
|
|
||||||
binding.playerRepeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateShuffleState() {
|
|
||||||
when (MusicPlayerRemote.shuffleMode) {
|
|
||||||
MusicService.SHUFFLE_MODE_SHUFFLE -> binding.playerShuffleButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
else -> binding.playerShuffleButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateRepeatState() {
|
|
||||||
when (MusicPlayerRemote.repeatMode) {
|
|
||||||
MusicService.REPEAT_MODE_NONE -> {
|
|
||||||
binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.playerRepeatButton.setColorFilter(
|
|
||||||
lastDisabledPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_ALL -> {
|
|
||||||
binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat)
|
|
||||||
binding.playerRepeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MusicService.REPEAT_MODE_THIS -> {
|
|
||||||
binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_one)
|
|
||||||
binding.playerRepeatButton.setColorFilter(
|
|
||||||
lastPlaybackControlsColor,
|
|
||||||
PorterDuff.Mode.SRC_IN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
|
|
|
@ -59,11 +59,9 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player),
|
||||||
return binding.playerToolbar
|
return binding.playerToolbar
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onShow() {
|
override fun onShow() {}
|
||||||
}
|
|
||||||
|
|
||||||
override fun onHide() {
|
override fun onHide() {}
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBackPressed(): Boolean {
|
override fun onBackPressed(): Boolean {
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageButton
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
android:id="@+id/playerRepeatButton"
|
android:id="@+id/repeatButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/roundSelector"
|
android:background="?attr/roundSelector"
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
tools:tint="@color/md_black_1000" />
|
tools:tint="@color/md_black_1000" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageButton
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
android:id="@+id/playerShuffleButton"
|
android:id="@+id/shuffleButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/roundSelector"
|
android:background="?attr/roundSelector"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue