Changed Seekbar with Sliders
This commit is contained in:
parent
b9f0adc9c2
commit
2786d8abed
49 changed files with 314 additions and 282 deletions
|
@ -20,7 +20,6 @@ import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.animation.LinearInterpolator
|
import android.view.animation.LinearInterpolator
|
||||||
import android.widget.SeekBar
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity
|
import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity
|
||||||
|
@ -36,11 +35,11 @@ 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.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.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.repository.RealRepository
|
import code.name.monkey.retromusic.repository.RealRepository
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
import code.name.monkey.retromusic.service.MusicService
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
@ -113,17 +112,15 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpProgressSlider() {
|
private fun setUpProgressSlider() {
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
binding.progressSlider.addOnChangeListener { _: Slider, progress: Float, fromUser: Boolean ->
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
MusicPlayerRemote.seekTo(progress)
|
MusicPlayerRemote.seekTo(progress.toInt())
|
||||||
onUpdateProgressViews(
|
onUpdateProgressViews(
|
||||||
MusicPlayerRemote.songProgressMillis,
|
MusicPlayerRemote.songProgressMillis,
|
||||||
MusicPlayerRemote.songDurationMillis
|
MusicPlayerRemote.songDurationMillis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
|
@ -249,9 +246,9 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
binding.progressSlider.valueTo = total.toFloat()
|
||||||
|
|
||||||
val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress)
|
val animator = ObjectAnimator.ofFloat(binding.progressSlider, "value", progress.toFloat())
|
||||||
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
||||||
animator.interpolator = LinearInterpolator()
|
animator.interpolator = LinearInterpolator()
|
||||||
animator.start()
|
animator.start()
|
||||||
|
|
|
@ -163,6 +163,15 @@ fun SeekBar.applyColor(@ColorInt color: Int) {
|
||||||
progressBackgroundTintList = ColorStateList.valueOf(color)
|
progressBackgroundTintList = ColorStateList.valueOf(color)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Slider.applyColor(@ColorInt color: Int) {
|
||||||
|
ColorStateList.valueOf(color).run {
|
||||||
|
thumbTintList = this
|
||||||
|
trackActiveTintList = this
|
||||||
|
trackInactiveTintList = ColorStateList.valueOf(color.addAlpha(0.1f))
|
||||||
|
haloTintList = this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun ExtendedFloatingActionButton.accentColor() {
|
fun ExtendedFloatingActionButton.accentColor() {
|
||||||
if (materialYou) return
|
if (materialYou) return
|
||||||
val color = ThemeStore.accentColor(context)
|
val color = ThemeStore.accentColor(context)
|
||||||
|
@ -301,5 +310,9 @@ inline val @receiver:ColorInt Int.lighterColor
|
||||||
inline val @receiver:ColorInt Int.darkerColor
|
inline val @receiver:ColorInt Int.darkerColor
|
||||||
get() = ColorUtil.darkenColor(this)
|
get() = ColorUtil.darkenColor(this)
|
||||||
|
|
||||||
inline val Int.colorStateList : ColorStateList
|
inline val Int.colorStateList: ColorStateList
|
||||||
get() = ColorStateList.valueOf(this)
|
get() = ColorStateList.valueOf(this)
|
||||||
|
|
||||||
|
fun @receiver:ColorInt Int.addAlpha(alpha: Float): Int {
|
||||||
|
return ColorUtil.withAlpha(this, alpha)
|
||||||
|
}
|
|
@ -23,7 +23,6 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.annotation.LayoutRes
|
import androidx.annotation.LayoutRes
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
@ -35,11 +34,11 @@ 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.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.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
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hemanths on 24/09/17.
|
* Created by hemanths on 24/09/17.
|
||||||
|
@ -61,7 +60,7 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
|
||||||
var isSeeking = false
|
var isSeeking = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
open val progressSlider: SeekBar? = null
|
open val progressSlider: Slider? = null
|
||||||
|
|
||||||
abstract val shuffleButton: ImageButton
|
abstract val shuffleButton: ImageButton
|
||||||
|
|
||||||
|
@ -78,12 +77,13 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
|
||||||
private var progressAnimator: ObjectAnimator? = null
|
private var progressAnimator: ObjectAnimator? = null
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
progressSlider?.max = total
|
progressSlider?.valueTo = total.toFloat()
|
||||||
|
|
||||||
if (isSeeking) {
|
if (isSeeking) {
|
||||||
progressSlider?.progress = progress
|
progressSlider?.value = progress.toFloat()
|
||||||
} else {
|
} else {
|
||||||
progressAnimator = ObjectAnimator.ofInt(progressSlider, "progress", progress).apply {
|
progressAnimator =
|
||||||
|
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
|
||||||
duration = SLIDER_ANIMATION_TIME
|
duration = SLIDER_ANIMATION_TIME
|
||||||
interpolator = LinearInterpolator()
|
interpolator = LinearInterpolator()
|
||||||
start()
|
start()
|
||||||
|
@ -95,25 +95,24 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpProgressSlider() {
|
private fun setUpProgressSlider() {
|
||||||
progressSlider?.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
progressSlider?.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser ->
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
onUpdateProgressViews(
|
onUpdateProgressViews(
|
||||||
progress,
|
value.toInt(),
|
||||||
MusicPlayerRemote.songDurationMillis
|
MusicPlayerRemote.songDurationMillis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
progressSlider?.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
|
||||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
override fun onStartTrackingTouch(slider: Slider) {
|
||||||
isSeeking = true
|
isSeeking = true
|
||||||
progressViewUpdateHelper.stop()
|
progressViewUpdateHelper.stop()
|
||||||
progressAnimator?.cancel()
|
progressAnimator?.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
override fun onStopTrackingTouch(slider: Slider) {
|
||||||
isSeeking = false
|
isSeeking = false
|
||||||
MusicPlayerRemote.seekTo(seekBar.progress)
|
MusicPlayerRemote.seekTo(slider.value.toInt())
|
||||||
progressViewUpdateHelper.start()
|
progressViewUpdateHelper.start()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.SeekBar
|
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
|
@ -32,8 +31,9 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.volume.AudioVolumeObserver
|
import code.name.monkey.retromusic.volume.AudioVolumeObserver
|
||||||
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
|
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
|
|
||||||
class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolumeChangedListener,
|
class VolumeFragment : Fragment(), Slider.OnChangeListener, OnAudioVolumeChangedListener,
|
||||||
View.OnClickListener {
|
View.OnClickListener {
|
||||||
|
|
||||||
private var _binding: FragmentVolumeBinding? = null
|
private var _binding: FragmentVolumeBinding? = null
|
||||||
|
@ -47,7 +47,7 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?,
|
||||||
): View {
|
): View {
|
||||||
_binding = FragmentVolumeBinding.inflate(inflater, container, false)
|
_binding = FragmentVolumeBinding.inflate(inflater, container, false)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
@ -68,15 +68,17 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
|
||||||
audioVolumeObserver?.register(AudioManager.STREAM_MUSIC, this)
|
audioVolumeObserver?.register(AudioManager.STREAM_MUSIC, this)
|
||||||
|
|
||||||
val audioManager = audioManager
|
val audioManager = audioManager
|
||||||
binding.volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
|
binding.volumeSeekBar.valueTo =
|
||||||
binding.volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
|
audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC).toFloat()
|
||||||
binding.volumeSeekBar.setOnSeekBarChangeListener(this)
|
binding.volumeSeekBar.value =
|
||||||
|
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC).toFloat()
|
||||||
|
binding.volumeSeekBar.addOnChangeListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) {
|
override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) {
|
||||||
if (_binding != null) {
|
if (_binding != null) {
|
||||||
binding.volumeSeekBar.max = maxVolume
|
binding.volumeSeekBar.valueTo = maxVolume.toFloat()
|
||||||
binding.volumeSeekBar.progress = currentVolume
|
binding.volumeSeekBar.value = currentVolume.toFloat()
|
||||||
binding.volumeDown.setImageResource(if (currentVolume == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down)
|
binding.volumeDown.setImageResource(if (currentVolume == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,17 +89,11 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
|
||||||
_binding = null
|
_binding = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
|
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
|
||||||
val audioManager = audioManager
|
val audioManager = audioManager
|
||||||
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0)
|
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, value.toInt(), 0)
|
||||||
setPauseWhenZeroVolume(i < 1)
|
setPauseWhenZeroVolume(value < 1f)
|
||||||
binding.volumeDown.setImageResource(if (i == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down)
|
binding.volumeDown.setImageResource(if (value == 0f) R.drawable.ic_volume_off else R.drawable.ic_volume_down)
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(view: View) {
|
override fun onClick(view: View) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ package code.name.monkey.retromusic.fragments.player.adaptive
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -38,7 +38,7 @@ class AdaptivePlaybackControlsFragment :
|
||||||
private var _binding: FragmentAdaptivePlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentAdaptivePlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -19,7 +19,7 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
|
@ -43,7 +43,7 @@ class BlurPlaybackControlsFragment :
|
||||||
private var _binding: FragmentBlurPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentBlurPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -18,7 +18,7 @@ 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 android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -27,10 +27,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||||
import code.name.monkey.appthemehelper.util.TintHelper
|
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.FragmentCardPlayerPlaybackControlsBinding
|
import code.name.monkey.retromusic.databinding.FragmentCardPlayerPlaybackControlsBinding
|
||||||
import code.name.monkey.retromusic.extensions.getSongInfo
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.extensions.hide
|
|
||||||
import code.name.monkey.retromusic.extensions.ripAlpha
|
|
||||||
import code.name.monkey.retromusic.extensions.show
|
|
||||||
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
|
||||||
|
@ -45,7 +42,7 @@ class CardPlaybackControlsFragment :
|
||||||
private var _binding: FragmentCardPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentCardPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
@ -78,6 +75,9 @@ class CardPlaybackControlsFragment :
|
||||||
binding.text.setOnClickListener {
|
binding.text.setOnClickListener {
|
||||||
goToArtist(requireActivity())
|
goToArtist(requireActivity())
|
||||||
}
|
}
|
||||||
|
binding.progressSlider.apply {
|
||||||
|
setCustomThumbDrawable(R.drawable.switch_square)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSong() {
|
private fun updateSong() {
|
||||||
|
|
|
@ -19,7 +19,7 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -41,7 +41,7 @@ class CardBlurPlaybackControlsFragment :
|
||||||
private var _binding: FragmentCardBlurPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentCardBlurPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -25,7 +25,6 @@ import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
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 androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
|
@ -49,13 +48,13 @@ 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.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.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.ViewUtil
|
import code.name.monkey.retromusic.util.ViewUtil
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
import code.name.monkey.retromusic.volume.AudioVolumeObserver
|
import code.name.monkey.retromusic.volume.AudioVolumeObserver
|
||||||
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
|
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
import me.tankery.lib.circularseekbar.CircularSeekBar
|
import me.tankery.lib.circularseekbar.CircularSeekBar
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,6 +77,9 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
private var rotateAnimator: ObjectAnimator? = null
|
private var rotateAnimator: ObjectAnimator? = null
|
||||||
private var lastRequest: GlideRequest<Drawable>? = null
|
private var lastRequest: GlideRequest<Drawable>? = null
|
||||||
|
|
||||||
|
private var progressAnimator: ObjectAnimator? = null
|
||||||
|
var isSeeking = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
|
||||||
|
@ -113,11 +115,6 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
|
|
||||||
private fun setupViews() {
|
private fun setupViews() {
|
||||||
setUpProgressSlider()
|
setUpProgressSlider()
|
||||||
ViewUtil.setProgressDrawable(
|
|
||||||
binding.progressSlider,
|
|
||||||
ThemeStore.accentColor(requireContext()),
|
|
||||||
false
|
|
||||||
)
|
|
||||||
binding.volumeSeekBar.circleProgressColor = accentColor()
|
binding.volumeSeekBar.circleProgressColor = accentColor()
|
||||||
binding.volumeSeekBar.circleColor = ColorUtil.withAlpha(accentColor(), 0.25f)
|
binding.volumeSeekBar.circleColor = ColorUtil.withAlpha(accentColor(), 0.25f)
|
||||||
setUpPlayPauseFab()
|
setUpPlayPauseFab()
|
||||||
|
@ -135,7 +132,8 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
private fun setUpPrevNext() {
|
private fun setUpPrevNext() {
|
||||||
updatePrevNextColor()
|
updatePrevNextColor()
|
||||||
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
|
||||||
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), false))
|
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(),
|
||||||
|
false))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePrevNextColor() {
|
private fun updatePrevNextColor() {
|
||||||
|
@ -275,7 +273,11 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onProgressChanged(circularSeekBar: CircularSeekBar?, progress: Float, fromUser: Boolean) {
|
override fun onProgressChanged(
|
||||||
|
circularSeekBar: CircularSeekBar?,
|
||||||
|
progress: Float,
|
||||||
|
fromUser: Boolean,
|
||||||
|
) {
|
||||||
val audioManager = audioManager
|
val audioManager = audioManager
|
||||||
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress.toInt(), 0)
|
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress.toInt(), 0)
|
||||||
}
|
}
|
||||||
|
@ -288,26 +290,43 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
|
|
||||||
private fun setUpProgressSlider() {
|
private fun setUpProgressSlider() {
|
||||||
binding.progressSlider.applyColor(accentColor())
|
binding.progressSlider.applyColor(accentColor())
|
||||||
binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
val progressSlider = binding.progressSlider
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
progressSlider.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser ->
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
onUpdateProgressViews(
|
||||||
MusicPlayerRemote.songProgressMillis,
|
value.toInt(),
|
||||||
MusicPlayerRemote.songDurationMillis
|
MusicPlayerRemote.songDurationMillis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
progressSlider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
|
||||||
|
override fun onStartTrackingTouch(slider: Slider) {
|
||||||
|
isSeeking = true
|
||||||
|
progressViewUpdateHelper.stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStopTrackingTouch(slider: Slider) {
|
||||||
|
isSeeking = false
|
||||||
|
MusicPlayerRemote.seekTo(slider.value.toInt())
|
||||||
|
progressViewUpdateHelper.start()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.progressSlider.max = total
|
val progressSlider = binding.progressSlider
|
||||||
|
progressSlider.valueTo = total.toFloat()
|
||||||
|
|
||||||
val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress)
|
if (isSeeking) {
|
||||||
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
progressSlider.value = progress.toFloat()
|
||||||
animator.interpolator = LinearInterpolator()
|
} else {
|
||||||
animator.start()
|
progressAnimator =
|
||||||
|
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
|
||||||
|
duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
||||||
|
interpolator = LinearInterpolator()
|
||||||
|
start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong())
|
binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong())
|
||||||
binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong())
|
binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong())
|
||||||
|
|
|
@ -22,7 +22,6 @@ 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.SeekBar
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
|
@ -45,18 +44,17 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
||||||
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
|
||||||
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.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
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.ViewUtil
|
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.from
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.from
|
||||||
import com.google.android.material.card.MaterialCardView
|
import com.google.android.material.card.MaterialCardView
|
||||||
import com.google.android.material.shape.MaterialShapeDrawable
|
import com.google.android.material.shape.MaterialShapeDrawable
|
||||||
import com.google.android.material.shape.ShapeAppearanceModel
|
import com.google.android.material.shape.ShapeAppearanceModel
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator
|
import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager
|
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager
|
||||||
|
@ -83,6 +81,9 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
private var playingQueueAdapter: PlayingQueueAdapter? = null
|
private var playingQueueAdapter: PlayingQueueAdapter? = null
|
||||||
private lateinit var linearLayoutManager: LinearLayoutManager
|
private lateinit var linearLayoutManager: LinearLayoutManager
|
||||||
|
|
||||||
|
private var progressAnimator: ObjectAnimator? = null
|
||||||
|
var isSeeking = false
|
||||||
|
|
||||||
private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() {
|
private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() {
|
||||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||||
mainActivity.getBottomSheetBehavior().isDraggable = false
|
mainActivity.getBottomSheetBehavior().isDraggable = false
|
||||||
|
@ -99,7 +100,8 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
override fun onStateChanged(bottomSheet: View, newState: Int) {
|
override fun onStateChanged(bottomSheet: View, newState: Int) {
|
||||||
when (newState) {
|
when (newState) {
|
||||||
BottomSheetBehavior.STATE_EXPANDED,
|
BottomSheetBehavior.STATE_EXPANDED,
|
||||||
BottomSheetBehavior.STATE_DRAGGING -> {
|
BottomSheetBehavior.STATE_DRAGGING,
|
||||||
|
-> {
|
||||||
mainActivity.getBottomSheetBehavior().isDraggable = false
|
mainActivity.getBottomSheetBehavior().isDraggable = false
|
||||||
}
|
}
|
||||||
BottomSheetBehavior.STATE_COLLAPSED -> {
|
BottomSheetBehavior.STATE_COLLAPSED -> {
|
||||||
|
@ -161,6 +163,10 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
binding.text.setOnClickListener {
|
binding.text.setOnClickListener {
|
||||||
goToArtist(requireActivity())
|
goToArtist(requireActivity())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.playerControlsContainer.progressSlider.apply {
|
||||||
|
setCustomThumbDrawable(R.drawable.switch_square)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hideVolumeIfAvailable() {
|
private fun hideVolumeIfAvailable() {
|
||||||
|
@ -286,11 +292,8 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
binding.playerControlsContainer.songCurrentProgress.setTextColor(lastPlaybackControlsColor)
|
binding.playerControlsContainer.songCurrentProgress.setTextColor(lastPlaybackControlsColor)
|
||||||
binding.playerControlsContainer.songTotalTime.setTextColor(lastPlaybackControlsColor)
|
binding.playerControlsContainer.songTotalTime.setTextColor(lastPlaybackControlsColor)
|
||||||
|
|
||||||
ViewUtil.setProgressDrawable(
|
binding.playerControlsContainer.progressSlider.applyColor(color.primaryTextColor)
|
||||||
binding.playerControlsContainer.progressSlider,
|
|
||||||
color.primaryTextColor,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
volumeFragment?.setTintableColor(color.primaryTextColor)
|
volumeFragment?.setTintableColor(color.primaryTextColor)
|
||||||
|
|
||||||
TintHelper.setTintAuto(
|
TintHelper.setTintAuto(
|
||||||
|
@ -327,16 +330,20 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.playerControlsContainer.progressSlider.max = total
|
val progressSlider = binding.playerControlsContainer.progressSlider
|
||||||
|
progressSlider.valueTo = total.toFloat()
|
||||||
|
|
||||||
val animator = ObjectAnimator.ofInt(
|
if (isSeeking) {
|
||||||
binding.playerControlsContainer.progressSlider,
|
progressSlider.value = progress.toFloat()
|
||||||
"progress",
|
} else {
|
||||||
progress
|
progressAnimator =
|
||||||
)
|
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
|
||||||
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
||||||
animator.interpolator = LinearInterpolator()
|
interpolator = LinearInterpolator()
|
||||||
animator.start()
|
start()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
binding.playerControlsContainer.songTotalTime.text =
|
binding.playerControlsContainer.songTotalTime.text =
|
||||||
MusicUtil.getReadableDurationString(total.toLong())
|
MusicUtil.getReadableDurationString(total.toLong())
|
||||||
|
@ -416,16 +423,25 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpProgressSlider() {
|
private fun setUpProgressSlider() {
|
||||||
binding.playerControlsContainer.progressSlider.setOnSeekBarChangeListener(object :
|
val progressSlider = binding.playerControlsContainer.progressSlider
|
||||||
SimpleOnSeekbarChangeListener() {
|
progressSlider.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser ->
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
onUpdateProgressViews(
|
||||||
MusicPlayerRemote.songProgressMillis,
|
value.toInt(),
|
||||||
MusicPlayerRemote.songDurationMillis
|
MusicPlayerRemote.songDurationMillis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
progressSlider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
|
||||||
|
override fun onStartTrackingTouch(slider: Slider) {
|
||||||
|
isSeeking = true
|
||||||
|
progressViewUpdateHelper.stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStopTrackingTouch(slider: Slider) {
|
||||||
|
isSeeking = false
|
||||||
|
MusicPlayerRemote.seekTo(slider.value.toInt())
|
||||||
|
progressViewUpdateHelper.start()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -537,7 +553,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
|
||||||
oldLeft: Int,
|
oldLeft: Int,
|
||||||
oldTop: Int,
|
oldTop: Int,
|
||||||
oldRight: Int,
|
oldRight: Int,
|
||||||
oldBottom: Int
|
oldBottom: Int,
|
||||||
) {
|
) {
|
||||||
val height = binding.playerContainer.height
|
val height = binding.playerContainer.height
|
||||||
val width = binding.playerContainer.width
|
val width = binding.playerContainer.width
|
||||||
|
|
|
@ -22,7 +22,7 @@ import android.view.ViewAnimationUtils
|
||||||
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.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -46,7 +46,7 @@ class ColorPlaybackControlsFragment :
|
||||||
private var _binding: FragmentColorPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentColorPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -18,7 +18,6 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||||
|
@ -33,6 +32,8 @@ 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.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
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
|
import java.lang.reflect.Field
|
||||||
|
|
||||||
class FitPlaybackControlsFragment :
|
class FitPlaybackControlsFragment :
|
||||||
AbsPlayerControlsFragment(R.layout.fragment_fit_playback_controls) {
|
AbsPlayerControlsFragment(R.layout.fragment_fit_playback_controls) {
|
||||||
|
@ -40,7 +41,7 @@ class FitPlaybackControlsFragment :
|
||||||
private var _binding: FragmentFitPlaybackControlsBinding? = null
|
private var _binding: FragmentFitPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
@ -75,6 +76,18 @@ class FitPlaybackControlsFragment :
|
||||||
binding.text.setOnClickListener {
|
binding.text.setOnClickListener {
|
||||||
goToArtist(requireActivity())
|
goToArtist(requireActivity())
|
||||||
}
|
}
|
||||||
|
binding.progressSlider.apply {
|
||||||
|
setCustomThumbDrawable(R.drawable.switch_square)
|
||||||
|
}
|
||||||
|
val field: Field = Slider::class.java.superclass.getDeclaredField("trackSidePadding")
|
||||||
|
|
||||||
|
field.isAccessible = true
|
||||||
|
|
||||||
|
field.set(binding.progressSlider, 0)
|
||||||
|
|
||||||
|
binding.progressSlider.invalidate()
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSong() {
|
private fun updateSong() {
|
||||||
|
|
|
@ -18,7 +18,7 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -43,7 +43,7 @@ class FlatPlaybackControlsFragment :
|
||||||
private var _binding: FragmentFlatPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentFlatPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -23,7 +23,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.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.widget.PopupMenu
|
import androidx.appcompat.widget.PopupMenu
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
@ -62,7 +62,7 @@ class FullPlaybackControlsFragment :
|
||||||
private var _binding: FragmentFullPlayerControlsBinding? = null
|
private var _binding: FragmentFullPlayerControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -23,7 +23,6 @@ import android.graphics.drawable.AnimatedVectorDrawable
|
||||||
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.SeekBar
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.widget.PopupMenu
|
import androidx.appcompat.widget.PopupMenu
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
|
@ -50,13 +49,13 @@ import code.name.monkey.retromusic.fragments.other.VolumeFragment
|
||||||
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
|
||||||
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.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
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator
|
import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager
|
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager
|
||||||
|
@ -85,6 +84,9 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play
|
||||||
private var _binding: FragmentGradientPlayerBinding? = null
|
private var _binding: FragmentGradientPlayerBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
private var progressAnimator: ObjectAnimator? = null
|
||||||
|
var isSeeking = false
|
||||||
|
|
||||||
private val bottomSheetCallbackList = object : BottomSheetCallback() {
|
private val bottomSheetCallbackList = object : BottomSheetCallback() {
|
||||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||||
mainActivity.getBottomSheetBehavior().isDraggable = false
|
mainActivity.getBottomSheetBehavior().isDraggable = false
|
||||||
|
@ -544,30 +546,43 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpProgressSlider() {
|
private fun setUpProgressSlider() {
|
||||||
binding.playbackControlsFragment.progressSlider.setOnSeekBarChangeListener(object :
|
val progressSlider = binding.playbackControlsFragment.progressSlider
|
||||||
SimpleOnSeekbarChangeListener() {
|
progressSlider.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser ->
|
||||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
|
||||||
if (fromUser) {
|
if (fromUser) {
|
||||||
MusicPlayerRemote.seekTo(progress)
|
|
||||||
onUpdateProgressViews(
|
onUpdateProgressViews(
|
||||||
MusicPlayerRemote.songProgressMillis,
|
value.toInt(),
|
||||||
MusicPlayerRemote.songDurationMillis
|
MusicPlayerRemote.songDurationMillis
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
progressSlider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
|
||||||
|
override fun onStartTrackingTouch(slider: Slider) {
|
||||||
|
isSeeking = true
|
||||||
|
progressViewUpdateHelper.stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStopTrackingTouch(slider: Slider) {
|
||||||
|
isSeeking = false
|
||||||
|
MusicPlayerRemote.seekTo(slider.value.toInt())
|
||||||
|
progressViewUpdateHelper.start()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||||
binding.playbackControlsFragment.progressSlider.max = total
|
val progressSlider = binding.playbackControlsFragment.progressSlider
|
||||||
val animator = ObjectAnimator.ofInt(
|
progressSlider.valueTo = total.toFloat()
|
||||||
binding.playbackControlsFragment.progressSlider,
|
|
||||||
"progress",
|
if (isSeeking) {
|
||||||
progress
|
progressSlider.value = progress.toFloat()
|
||||||
)
|
} else {
|
||||||
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
progressAnimator =
|
||||||
animator.interpolator = LinearInterpolator()
|
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
|
||||||
animator.start()
|
duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
||||||
|
interpolator = LinearInterpolator()
|
||||||
|
start()
|
||||||
|
}
|
||||||
|
}
|
||||||
binding.playbackControlsFragment.songTotalTime.text =
|
binding.playbackControlsFragment.songTotalTime.text =
|
||||||
MusicUtil.getReadableDurationString(total.toLong())
|
MusicUtil.getReadableDurationString(total.toLong())
|
||||||
binding.playbackControlsFragment.songCurrentProgress.text =
|
binding.playbackControlsFragment.songCurrentProgress.text =
|
||||||
|
|
|
@ -18,7 +18,7 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -44,7 +44,7 @@ class LockScreenControlsFragment :
|
||||||
private var _binding: FragmentLockScreenPlaybackControlsBinding? = null
|
private var _binding: FragmentLockScreenPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -18,7 +18,7 @@ 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 android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||||
|
@ -44,7 +44,7 @@ class MaterialControlsFragment :
|
||||||
private var _binding: FragmentMaterialPlaybackControlsBinding? = null
|
private var _binding: FragmentMaterialPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -17,7 +17,7 @@ package code.name.monkey.retromusic.fragments.player.md3
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -40,7 +40,7 @@ class MD3PlaybackControlsFragment :
|
||||||
private var _binding: FragmentMd3PlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentMd3PlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -18,7 +18,7 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -41,7 +41,7 @@ class PlayerPlaybackControlsFragment :
|
||||||
private var _binding: FragmentPlayerPlaybackControlsBinding? = null
|
private var _binding: FragmentPlayerPlaybackControlsBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -19,7 +19,7 @@ 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 android.widget.ImageButton
|
||||||
import android.widget.SeekBar
|
import com.google.android.material.slider.Slider
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -43,7 +43,7 @@ class PeekPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe
|
||||||
private var _binding: FragmentPeekControlPlayerBinding? = null
|
private var _binding: FragmentPeekControlPlayerBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -18,7 +18,6 @@ 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.ImageButton
|
||||||
import android.widget.SeekBar
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
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
|
||||||
|
@ -35,6 +34,7 @@ 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.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
|
||||||
|
import com.google.android.material.slider.Slider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Hemanth S (h4h13).
|
* @author Hemanth S (h4h13).
|
||||||
|
@ -46,7 +46,7 @@ class PlainPlaybackControlsFragment :
|
||||||
private var _binding: FragmentPlainControlsFragmentBinding? = null
|
private var _binding: FragmentPlainControlsFragmentBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override val progressSlider: SeekBar
|
override val progressSlider: Slider
|
||||||
get() = binding.progressSlider
|
get() = binding.progressSlider
|
||||||
|
|
||||||
override val shuffleButton: ImageButton
|
override val shuffleButton: ImageButton
|
||||||
|
|
|
@ -29,17 +29,12 @@ import androidx.core.widget.doAfterTextChanged
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.transition.TransitionManager
|
import androidx.transition.TransitionManager
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.adapter.SearchAdapter
|
import code.name.monkey.retromusic.adapter.SearchAdapter
|
||||||
import code.name.monkey.retromusic.databinding.FragmentSearchBinding
|
import code.name.monkey.retromusic.databinding.FragmentSearchBinding
|
||||||
import code.name.monkey.retromusic.extensions.accentColor
|
import code.name.monkey.retromusic.extensions.*
|
||||||
import code.name.monkey.retromusic.extensions.dipToPix
|
|
||||||
import code.name.monkey.retromusic.extensions.focusAndShowKeyboard
|
|
||||||
import code.name.monkey.retromusic.extensions.showToast
|
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.views.addAlpha
|
|
||||||
import com.google.android.material.chip.Chip
|
import com.google.android.material.chip.Chip
|
||||||
import com.google.android.material.chip.ChipGroup
|
import com.google.android.material.chip.ChipGroup
|
||||||
import com.google.android.material.shape.MaterialShapeDrawable
|
import com.google.android.material.shape.MaterialShapeDrawable
|
||||||
|
@ -133,7 +128,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search),
|
||||||
|
|
||||||
val colors = intArrayOf(
|
val colors = intArrayOf(
|
||||||
android.R.color.transparent,
|
android.R.color.transparent,
|
||||||
ThemeStore.accentColor(requireContext()).addAlpha(0.5F)
|
accentColor().addAlpha(0.5F)
|
||||||
)
|
)
|
||||||
|
|
||||||
chips.forEach {
|
chips.forEach {
|
||||||
|
|
|
@ -166,7 +166,7 @@ class MediaSessionCallback(
|
||||||
|
|
||||||
override fun onSkipToPrevious() {
|
override fun onSkipToPrevious() {
|
||||||
super.onSkipToPrevious()
|
super.onSkipToPrevious()
|
||||||
musicService.back(true)
|
musicService.playPreviousSong(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
|
|
|
@ -204,8 +204,14 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
private val updateFavoriteReceiver = object : BroadcastReceiver() {
|
private val updateFavoriteReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
isCurrentFavorite { isFavorite ->
|
isCurrentFavorite { isFavorite ->
|
||||||
|
if (!isForeground) {
|
||||||
|
playingNotification?.updateMetadata(currentSong) {
|
||||||
|
playingNotification?.setPlaying(isPlaying)
|
||||||
playingNotification?.updateFavorite(isFavorite)
|
playingNotification?.updateFavorite(isFavorite)
|
||||||
startForegroundOrNotify()
|
startForegroundOrNotify()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
appWidgetCircle.notifyChange(this@MusicService, FAVORITE_STATE_CHANGED)
|
appWidgetCircle.notifyChange(this@MusicService, FAVORITE_STATE_CHANGED)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -676,6 +682,7 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
|
startForegroundOrNotify()
|
||||||
if (intent != null && intent.action != null) {
|
if (intent != null && intent.action != null) {
|
||||||
handleIntent(mediaSession, intent)
|
handleIntent(mediaSession, intent)
|
||||||
serviceScope.launch {
|
serviceScope.launch {
|
||||||
|
|
|
@ -21,6 +21,7 @@ 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
|
||||||
import code.name.monkey.appthemehelper.util.NavigationViewUtil
|
import code.name.monkey.appthemehelper.util.NavigationViewUtil
|
||||||
|
import code.name.monkey.retromusic.extensions.addAlpha
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import dev.chrisbanes.insetter.applyInsetter
|
import dev.chrisbanes.insetter.applyInsetter
|
||||||
|
@ -70,7 +71,3 @@ class BottomNavigationBarTinted @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Int.addAlpha(alpha: Float): Int {
|
|
||||||
return ColorUtil.withAlpha(this, alpha)
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
android:viewportWidth="24"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="24">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FFF"
|
||||||
android:pathData="M11.975,19.95Q13.3,19.95 14.513,19.538Q15.725,19.125 16.775,18.325Q15.225,17.75 13.613,16.575Q12,15.4 10.812,13.662Q9.625,11.925 9.1,9.65Q8.575,7.375 9.15,4.65Q6.85,5.525 5.45,7.525Q4.05,9.525 4.05,12Q4.05,15.325 6.35,17.637Q8.65,19.95 11.975,19.95ZM11.975,22.225Q9.85,22.225 7.988,21.425Q6.125,20.625 4.75,19.25Q3.375,17.875 2.575,16Q1.775,14.125 1.775,12Q1.775,8.125 4.213,5.325Q6.65,2.525 10.6,1.95Q11.375,1.825 11.725,2.325Q12.075,2.825 11.775,3.65Q11,5.8 11.2,7.912Q11.4,10.025 12.387,11.787Q13.375,13.55 15.062,14.825Q16.75,16.1 18.975,16.575Q19.85,16.75 20.1,17.3Q20.35,17.85 19.85,18.45Q18.4,20.225 16.375,21.225Q14.35,22.225 11.975,22.225ZM10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Z"/>
|
android:pathData="M11.975,19.95Q13.3,19.95 14.513,19.538Q15.725,19.125 16.775,18.325Q15.225,17.75 13.613,16.575Q12,15.4 10.812,13.662Q9.625,11.925 9.1,9.65Q8.575,7.375 9.15,4.65Q6.85,5.525 5.45,7.525Q4.05,9.525 4.05,12Q4.05,15.325 6.35,17.637Q8.65,19.95 11.975,19.95ZM11.975,22.225Q9.85,22.225 7.988,21.425Q6.125,20.625 4.75,19.25Q3.375,17.875 2.575,16Q1.775,14.125 1.775,12Q1.775,8.125 4.213,5.325Q6.65,2.525 10.6,1.95Q11.375,1.825 11.725,2.325Q12.075,2.825 11.775,3.65Q11,5.8 11.2,7.912Q11.4,10.025 12.387,11.787Q13.375,13.55 15.062,14.825Q16.75,16.1 18.975,16.575Q19.85,16.75 20.1,17.3Q20.35,17.85 19.85,18.45Q18.4,20.225 16.375,21.225Q14.35,22.225 11.975,22.225ZM10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Q10.425,12.3 10.425,12.3Z"/>
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -172,14 +172,12 @@
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
style="@style/Widget.MaterialComponents.LinearProgressIndicator"
|
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="8"
|
|
||||||
android:maxHeight="3dp"
|
android:maxHeight="3dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
android:progressTint="@color/md_white_1000"
|
android:progressTint="@color/md_white_1000"
|
||||||
android:splitTrack="false"
|
android:splitTrack="false"
|
||||||
|
@ -199,7 +197,6 @@
|
||||||
android:textColor="@color/md_white_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
||||||
app:layout_constraintStart_toStartOf="@id/repeatButton"
|
app:layout_constraintStart_toStartOf="@id/repeatButton"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
@ -211,7 +208,6 @@
|
||||||
android:textColor="@color/md_white_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
||||||
app:layout_constraintEnd_toEndOf="@id/shuffleButton"
|
app:layout_constraintEnd_toEndOf="@id/shuffleButton"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -178,11 +178,11 @@
|
||||||
app:layout_constraintTop_toBottomOf="@+id/titleContainer"
|
app:layout_constraintTop_toBottomOf="@+id/titleContainer"
|
||||||
tools:text="@tools:sample/lorem/random" />
|
tools:text="@tools:sample/lorem/random" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
app:layout_constraintBottom_toTopOf="@id/songInfo"
|
app:layout_constraintBottom_toTopOf="@id/songInfo"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -202,7 +202,6 @@
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/progressSlider"
|
app:layout_constraintStart_toEndOf="@id/progressSlider"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
@ -219,7 +218,6 @@
|
||||||
app:layout_constraintEnd_toStartOf="@id/progressSlider"
|
app:layout_constraintEnd_toStartOf="@id/progressSlider"
|
||||||
app:layout_constraintStart_toEndOf="@id/guideline"
|
app:layout_constraintStart_toEndOf="@id/guideline"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -177,17 +177,12 @@
|
||||||
tools:text="@tools:sample/lorem/random" />
|
tools:text="@tools:sample/lorem/random" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
style="@style/Widget.MaterialComponents.LinearProgressIndicator"
|
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxHeight="3dp"
|
android:maxHeight="3dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
|
||||||
android:progressTint="@color/md_white_1000"
|
|
||||||
android:splitTrack="false"
|
|
||||||
android:thumb="@drawable/switch_thumb_material"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/songCurrentProgress"
|
app:layout_constraintBottom_toTopOf="@id/songCurrentProgress"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -202,7 +197,6 @@
|
||||||
android:textColor="@color/md_white_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
@ -214,7 +208,6 @@
|
||||||
android:textColor="@color/md_white_1000"
|
android:textColor="@color/md_white_1000"
|
||||||
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -4,8 +4,7 @@
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical">
|
||||||
tools:ignore="MissingPrefix">
|
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/songCurrentProgress"
|
android:id="@+id/songCurrentProgress"
|
||||||
|
@ -19,16 +18,14 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
|
style="@style/Widget.Retro.Slider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
@ -45,7 +42,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageButton
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
|
|
|
@ -33,15 +33,14 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
android:splitTrack="false"
|
android:splitTrack="false"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
|
@ -60,7 +59,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
|
|
@ -48,12 +48,12 @@
|
||||||
tools:text="22.00" />
|
tools:text="22.00" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:paddingStart="20dp"
|
android:paddingStart="20dp"
|
||||||
android:paddingEnd="20dp"
|
android:paddingEnd="20dp"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
|
|
|
@ -26,24 +26,25 @@
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
style="@style/MusicProgressSlider"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
app:haloRadius="0dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding" />
|
app:trackHeight="20dp"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/songTotalTime"
|
android:id="@+id/songTotalTime"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="center_vertical|end"
|
android:gravity="center_vertical|end"
|
||||||
android:paddingRight="8dp"
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingStart="0dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="?colorOnSecondary"
|
android:textColor="?colorOnSecondary"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -169,11 +169,11 @@
|
||||||
app:layout_constraintTop_toBottomOf="@+id/volumeSeekBar" />
|
app:layout_constraintTop_toBottomOf="@+id/volumeSeekBar" />
|
||||||
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/songInfo"
|
app:layout_constraintBottom_toTopOf="@+id/songInfo"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -190,7 +190,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
@ -204,7 +203,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
|
|
@ -44,14 +44,13 @@
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
tools:ignore="RtlHardcoded,RtlSymmetry"
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
style="@style/MusicProgressSlider"
|
style="@style/Widget.Retro.Slider"
|
||||||
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_toLeftOf="@id/songTotalTime"
|
android:layout_toStartOf="@id/songTotalTime"
|
||||||
android:layout_toRightOf="@id/songCurrentProgress"
|
android:layout_toEndOf="@id/songCurrentProgress" />
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
|
||||||
tools:ignore="RtlHardcoded,UnusedAttribute" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
|
@ -19,16 +19,15 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -48,7 +47,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
@ -21,40 +21,42 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:gravity="center_vertical|left|end"
|
|
||||||
android:paddingStart="8dp"
|
android:paddingStart="8dp"
|
||||||
|
android:paddingEnd="0dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
style="@style/MusicProgressSlider"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="0dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
android:foregroundGravity="center"
|
||||||
|
android:padding="0dp"
|
||||||
|
app:haloRadius="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
tools:ignore="RtlHardcoded,UnusedAttribute" />
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:trackHeight="@dimen/progress_container_height" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/songTotalTime"
|
android:id="@+id/songTotalTime"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical|right|end"
|
|
||||||
android:paddingEnd="8dp"
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingStart="0dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
@ -165,7 +167,6 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="8dp"
|
android:layout_margin="8dp"
|
||||||
android:background="?attr/roundSelector"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/volumeFragmentContainer"
|
app:layout_constraintBottom_toTopOf="@+id/volumeFragmentContainer"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/nextButton"
|
app:layout_constraintEnd_toStartOf="@+id/nextButton"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
|
|
@ -19,16 +19,14 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
app:thumbRadius="8dp"
|
||||||
android:splitTrack="false"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:thumb="@drawable/switch_square"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
@ -46,7 +44,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -90,16 +90,15 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -120,7 +119,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -93,15 +93,14 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
app:layout_constraintTop_toBottomOf="@id/titleContainer"
|
app:layout_constraintTop_toBottomOf="@id/titleContainer"
|
||||||
|
@ -121,7 +120,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,16 +21,15 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -53,7 +52,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
@ -20,16 +20,15 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -49,7 +48,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,9 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -49,7 +48,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
@ -31,16 +31,15 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
|
@ -60,7 +59,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageButton
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
|
|
|
@ -19,10 +19,9 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -33,7 +32,7 @@
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:ignore="RtlHardcoded,UnusedAttribute"
|
tools:ignore="RtlHardcoded,UnusedAttribute"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
tools:progress="20" />
|
tools:progress="20" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
@ -48,7 +47,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@+id/progressSlider"
|
app:layout_constraintTop_toTopOf="@+id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageButton
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
|
|
|
@ -66,11 +66,12 @@
|
||||||
android:id="@+id/playerToolbar"
|
android:id="@+id/playerToolbar"
|
||||||
style="@style/Toolbar"
|
style="@style/Toolbar"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
|
app:title="@null"
|
||||||
|
tools:menu="@menu/menu_player"
|
||||||
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black"
|
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/playbackControlsFragment"
|
app:layout_constraintTop_toBottomOf="@id/playbackControlsFragment" />
|
||||||
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -19,16 +19,14 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
app:layout_constraintTop_toTopOf="@id/progressSlider"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/progressSlider"
|
android:id="@+id/progressSlider"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
|
||||||
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
@ -47,7 +45,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
app:layout_constraintBottom_toBottomOf="@+id/progressSlider"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:ignore="RtlHardcoded,RtlSymmetry"
|
|
||||||
tools:text="@tools:sample/date/hhmmss" />
|
tools:text="@tools:sample/date/hhmmss" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
|
|
@ -23,13 +23,13 @@
|
||||||
app:srcCompat="@drawable/ic_volume_down"
|
app:srcCompat="@drawable/ic_volume_down"
|
||||||
app:tint="?attr/colorControlNormal" />
|
app:tint="?attr/colorControlNormal" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<com.google.android.material.slider.Slider
|
||||||
android:id="@+id/volumeSeekBar"
|
android:id="@+id/volumeSeekBar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:maxHeight="2dp"
|
android:maxHeight="2dp"
|
||||||
android:paddingVertical="@dimen/seekbar_padding"
|
style="@style/Widget.Retro.Slider"
|
||||||
android:progressDrawable="@drawable/color_progress_seek"
|
android:progressDrawable="@drawable/color_progress_seek"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/volumeDown"
|
app:layout_constraintBottom_toBottomOf="@+id/volumeDown"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/volumeUp"
|
app:layout_constraintEnd_toStartOf="@+id/volumeUp"
|
||||||
|
|
|
@ -258,4 +258,10 @@
|
||||||
<style name="ShapeAppearance.Material3.Circle" parent="">
|
<style name="ShapeAppearance.Material3.Circle" parent="">
|
||||||
<item name="cornerSize">50%</item>
|
<item name="cornerSize">50%</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="Widget.Retro.Slider" parent="Widget.Material3.Slider">
|
||||||
|
<item name="labelBehavior">gone</item>
|
||||||
|
<item name="thumbRadius">6dp</item>
|
||||||
|
<item name="haloRadius">18dp</item>
|
||||||
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue