Reverted to SeekBars for Card, Classic, Fit and Flat now playing theme

This commit is contained in:
Prathamesh More 2022-05-24 18:18:03 +05:30
parent f916a826b5
commit ca39b928bb
17 changed files with 136 additions and 137 deletions

View file

@ -277,7 +277,6 @@ abstract class AbsTagEditorActivity<VB : ViewBinding> : AbsBaseActivity() {
scaleY = 0f
isEnabled = false
setOnClickListener { save() }
TintHelper.setTintAuto(this, ThemeStore.accentColor(this@AbsTagEditorActivity), true)
}
}

View file

@ -23,6 +23,7 @@ import android.view.animation.AccelerateInterpolator
import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
import androidx.annotation.LayoutRes
import androidx.core.view.isVisible
@ -57,11 +58,12 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
var lastDisabledPlaybackControlsColor: Int = 0
var isSeeking = false
private set
private var isSeeking = false
open val progressSlider: Slider? = null
open val seekBar: SeekBar? = null
abstract val shuffleButton: ImageButton
abstract val repeatButton: ImageButton
@ -77,18 +79,34 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
private var progressAnimator: ObjectAnimator? = null
override fun onUpdateProgressViews(progress: Int, total: Int) {
progressSlider?.valueTo = total.toFloat()
if (seekBar == null) {
progressSlider?.valueTo = total.toFloat()
if (isSeeking) {
progressSlider?.value = progress.toFloat()
if (isSeeking) {
progressSlider?.value = progress.toFloat()
} else {
progressAnimator =
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
duration = SLIDER_ANIMATION_TIME
interpolator = LinearInterpolator()
start()
}
}
} else {
progressAnimator =
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
duration = SLIDER_ANIMATION_TIME
interpolator = LinearInterpolator()
start()
}
seekBar?.max = total
if (isSeeking) {
seekBar?.progress = progress
} else {
progressAnimator =
ObjectAnimator.ofInt(seekBar, "progress", progress).apply {
duration = SLIDER_ANIMATION_TIME
interpolator = LinearInterpolator()
start()
}
}
}
songTotalTime?.text = MusicUtil.getReadableDurationString(total.toLong())
songCurrentProgress?.text = MusicUtil.getReadableDurationString(progress.toLong())
@ -96,26 +114,49 @@ abstract class AbsPlayerControlsFragment(@LayoutRes layout: Int) : AbsMusicServi
private fun setUpProgressSlider() {
progressSlider?.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser ->
if (fromUser) {
onUpdateProgressViews(
value.toInt(),
MusicPlayerRemote.songDurationMillis
)
}
onProgressChange(value.toInt(), fromUser)
})
progressSlider?.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
isSeeking = true
progressViewUpdateHelper.stop()
progressAnimator?.cancel()
onStartTrackingTouch()
}
override fun onStopTrackingTouch(slider: Slider) {
isSeeking = false
MusicPlayerRemote.seekTo(slider.value.toInt())
progressViewUpdateHelper.start()
onStopTrackingTouch(slider.value.toInt())
}
})
seekBar?.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
onProgressChange(progress, fromUser)
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
onStartTrackingTouch()
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
onStopTrackingTouch(seekBar?.progress ?: 0)
}
})
}
private fun onProgressChange(value: Int, fromUser: Boolean) {
if (fromUser) {
onUpdateProgressViews(value, MusicPlayerRemote.songDurationMillis)
}
}
private fun onStartTrackingTouch() {
isSeeking = true
progressViewUpdateHelper.stop()
progressAnimator?.cancel()
}
private fun onStopTrackingTouch(value: Int) {
isSeeking = false
MusicPlayerRemote.seekTo(value)
progressViewUpdateHelper.start()
}
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper

View file

@ -124,7 +124,7 @@ class AdaptivePlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
accentColor()
}.ripAlpha()
TintHelper.setTintAuto(

View file

@ -18,7 +18,7 @@ import android.graphics.PorterDuff
import android.os.Bundle
import android.view.View
import android.widget.ImageButton
import com.google.android.material.slider.Slider
import android.widget.SeekBar
import android.widget.TextView
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
@ -42,7 +42,7 @@ class CardPlaybackControlsFragment :
private var _binding: FragmentCardPlayerPlaybackControlsBinding? = null
private val binding get() = _binding!!
override val progressSlider: Slider
override val seekBar: SeekBar
get() = binding.progressSlider
override val shuffleButton: ImageButton
@ -75,9 +75,6 @@ class CardPlaybackControlsFragment :
binding.text.setOnClickListener {
goToArtist(requireActivity())
}
binding.progressSlider.apply {
setCustomThumbDrawable(R.drawable.switch_square)
}
}
private fun updateSong() {
@ -138,7 +135,7 @@ class CardPlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext()).ripAlpha()
accentColor().ripAlpha()
}
binding.image.setColorFilter(colorFinal, PorterDuff.Mode.SRC_IN)
TintHelper.setTintAuto(

View file

@ -137,7 +137,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
}
private fun updatePrevNextColor() {
val accentColor = ThemeStore.accentColor(requireContext())
val accentColor = accentColor()
binding.nextButton.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN)
binding.previousButton.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN)
}
@ -145,7 +145,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
private fun setUpPlayPauseFab() {
TintHelper.setTintAuto(
binding.playPauseButton,
ThemeStore.accentColor(requireContext()),
accentColor(),
false
)
binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler())

View file

@ -22,6 +22,7 @@ import android.graphics.PorterDuff
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.SeekBar
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.commit
@ -44,17 +45,18 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetBehavior.from
import com.google.android.material.card.MaterialCardView
import com.google.android.material.shape.MaterialShapeDrawable
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.draggable.RecyclerViewDragDropManager
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager
@ -81,9 +83,6 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
private var playingQueueAdapter: PlayingQueueAdapter? = null
private lateinit var linearLayoutManager: LinearLayoutManager
private var progressAnimator: ObjectAnimator? = null
var isSeeking = false
private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() {
override fun onSlide(bottomSheet: View, slideOffset: Float) {
mainActivity.getBottomSheetBehavior().isDraggable = false
@ -100,8 +99,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
override fun onStateChanged(bottomSheet: View, newState: Int) {
when (newState) {
BottomSheetBehavior.STATE_EXPANDED,
BottomSheetBehavior.STATE_DRAGGING,
-> {
BottomSheetBehavior.STATE_DRAGGING -> {
mainActivity.getBottomSheetBehavior().isDraggable = false
}
BottomSheetBehavior.STATE_COLLAPSED -> {
@ -163,10 +161,6 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
binding.text.setOnClickListener {
goToArtist(requireActivity())
}
binding.playerControlsContainer.progressSlider.apply {
setCustomThumbDrawable(R.drawable.switch_square)
}
}
private fun hideVolumeIfAvailable() {
@ -292,8 +286,11 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
binding.playerControlsContainer.songCurrentProgress.setTextColor(lastPlaybackControlsColor)
binding.playerControlsContainer.songTotalTime.setTextColor(lastPlaybackControlsColor)
binding.playerControlsContainer.progressSlider.applyColor(color.primaryTextColor)
ViewUtil.setProgressDrawable(
binding.playerControlsContainer.progressSlider,
color.primaryTextColor,
true
)
volumeFragment?.setTintableColor(color.primaryTextColor)
TintHelper.setTintAuto(
@ -330,20 +327,16 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
}
override fun onUpdateProgressViews(progress: Int, total: Int) {
val progressSlider = binding.playerControlsContainer.progressSlider
progressSlider.valueTo = total.toFloat()
binding.playerControlsContainer.progressSlider.max = total
if (isSeeking) {
progressSlider.value = progress.toFloat()
} else {
progressAnimator =
ObjectAnimator.ofFloat(progressSlider, "value", progress.toFloat()).apply {
duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
interpolator = LinearInterpolator()
start()
}
}
val animator = ObjectAnimator.ofInt(
binding.playerControlsContainer.progressSlider,
"progress",
progress
)
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
animator.interpolator = LinearInterpolator()
animator.start()
binding.playerControlsContainer.songTotalTime.text =
MusicUtil.getReadableDurationString(total.toLong())
@ -423,25 +416,16 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
}
private fun setUpProgressSlider() {
val progressSlider = binding.playerControlsContainer.progressSlider
progressSlider.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser ->
if (fromUser) {
onUpdateProgressViews(
value.toInt(),
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()
binding.playerControlsContainer.progressSlider.setOnSeekBarChangeListener(object :
SimpleOnSeekbarChangeListener() {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
if (fromUser) {
MusicPlayerRemote.seekTo(progress)
onUpdateProgressViews(
MusicPlayerRemote.songProgressMillis,
MusicPlayerRemote.songDurationMillis
)
}
}
})
}
@ -553,7 +537,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
oldLeft: Int,
oldTop: Int,
oldRight: Int,
oldBottom: Int,
oldBottom: Int
) {
val height = binding.playerContainer.height
val width = binding.playerContainer.width

View file

@ -18,6 +18,7 @@ import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ColorUtil
@ -32,8 +33,6 @@ import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.google.android.material.slider.Slider
import java.lang.reflect.Field
class FitPlaybackControlsFragment :
AbsPlayerControlsFragment(R.layout.fragment_fit_playback_controls) {
@ -41,7 +40,7 @@ class FitPlaybackControlsFragment :
private var _binding: FragmentFitPlaybackControlsBinding? = null
private val binding get() = _binding!!
override val progressSlider: Slider
override val seekBar: SeekBar
get() = binding.progressSlider
override val shuffleButton: ImageButton
@ -76,18 +75,6 @@ class FitPlaybackControlsFragment :
binding.text.setOnClickListener {
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() {
@ -141,7 +128,7 @@ class FitPlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext()).ripAlpha()
accentColor().ripAlpha()
}
volumeFragment?.setTintable(colorFinal)

View file

@ -18,9 +18,8 @@ import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.widget.ImageButton
import com.google.android.material.slider.Slider
import android.widget.SeekBar
import android.widget.TextView
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
@ -43,7 +42,7 @@ class FlatPlaybackControlsFragment :
private var _binding: FragmentFlatPlayerPlaybackControlsBinding? = null
private val binding get() = _binding!!
override val progressSlider: Slider
override val seekBar: SeekBar
get() = binding.progressSlider
override val shuffleButton: ImageButton
@ -110,7 +109,7 @@ class FlatPlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext()).ripAlpha()
accentColor().ripAlpha()
}
updateTextColors(colorFinal)

View file

@ -94,7 +94,7 @@ class PlayerPlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
accentColor()
}.ripAlpha()
TintHelper.setTintAuto(

View file

@ -27,6 +27,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentPeekControlPlayerBinding
import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
@ -82,7 +83,7 @@ class PeekPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe
if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
accentColor()
}
binding.progressSlider.applyColor(controlsColor)
volumeFragment?.setTintableColor(controlsColor)

View file

@ -19,17 +19,13 @@ import android.view.View
import android.view.animation.DecelerateInterpolator
import android.widget.ImageButton
import android.widget.TextView
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentPlainControlsFragmentBinding
import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.extensions.getSongInfo
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.PreferenceUtil
@ -134,7 +130,7 @@ class PlainPlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
accentColor()
}
volumeFragment?.setTintable(colorFinal)
binding.progressSlider.applyColor(colorFinal)

View file

@ -18,13 +18,13 @@ import android.os.Bundle
import android.view.View
import android.view.animation.DecelerateInterpolator
import android.widget.ImageButton
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentSimpleControlsFragmentBinding
import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.getSongInfo
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
@ -154,7 +154,7 @@ class SimplePlaybackControlsFragment :
val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
color.primaryTextColor
} else {
ThemeStore.accentColor(requireContext())
accentColor()
}
volumeFragment?.setTintable(colorFinal)

View file

@ -26,25 +26,23 @@
android:textSize="12sp"
tools:text="@tools:sample/date/hhmmss" />
<com.google.android.material.slider.Slider
<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/progressSlider"
style="@style/Widget.Retro.Slider"
style="@style/MusicProgressSlider"
android:layout_width="0dp"
android:layout_height="match_parent"
app:haloRadius="0dp"
app:trackHeight="20dp"
android:layout_weight="1"/>
android:layout_weight="1" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/songTotalTime"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical|end"
android:paddingEnd="8dp"
android:paddingStart="0dp"
android:paddingRight="8dp"
android:singleLine="true"
android:textColor="?colorOnSecondary"
android:textSize="12sp"
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="@tools:sample/date/hhmmss" />
</LinearLayout>

View file

@ -44,13 +44,14 @@
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="@tools:sample/date/hhmmss" />
<com.google.android.material.slider.Slider
<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/progressSlider"
style="@style/Widget.Retro.Slider"
android:layout_width="0dp"
style="@style/MusicProgressSlider"
android:layout_height="match_parent"
android:layout_toStartOf="@id/songTotalTime"
android:layout_toEndOf="@id/songCurrentProgress" />
android:layout_toLeftOf="@id/songTotalTime"
android:layout_toRightOf="@id/songCurrentProgress"
android:paddingVertical="@dimen/seekbar_padding"
tools:ignore="RtlHardcoded,UnusedAttribute" />
</RelativeLayout>

View file

@ -31,19 +31,13 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="@tools:sample/date/hhmmss" />
<com.google.android.material.slider.Slider
<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/progressSlider"
style="@style/Widget.Retro.Slider"
style="@style/MusicProgressSlider"
android:layout_width="0dp"
android:layout_height="0dp"
android:foregroundGravity="center"
android:padding="0dp"
app:haloRadius="0dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_height="match_parent"
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
app:layout_constraintTop_toTopOf="parent"
app:trackHeight="@dimen/progress_container_height" />
app:layout_constraintStart_toEndOf="@id/songCurrentProgress" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/songTotalTime"
@ -215,4 +209,4 @@
app:layout_constraintBottom_toBottomOf="parent"
tools:background="@color/md_red_400"
tools:layout_height="52dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -21,12 +21,15 @@
app:layout_constraintTop_toTopOf="@id/progressSlider"
tools:text="@tools:sample/date/hhmmss" />
<com.google.android.material.slider.Slider
<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/progressSlider"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:thumbRadius="8dp"
style="@style/Widget.Retro.Slider"
android:maxHeight="2dp"
android:paddingVertical="@dimen/seekbar_padding"
android:progressDrawable="@drawable/color_progress_seek"
android:splitTrack="false"
android:thumb="@drawable/switch_square"
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
app:layout_constraintTop_toTopOf="parent"
@ -194,4 +197,4 @@
app:layout_constraintBottom_toBottomOf="parent"
tools:backgroundTint="@color/md_red_400"
tools:layout_height="52dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -29,11 +29,10 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:maxHeight="2dp"
android:progressDrawable="@drawable/color_progress_seek"
style="@style/Widget.Retro.Slider"
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlHardcoded,UnusedAttribute"
tools:progress="20" />
<com.google.android.material.textview.MaterialTextView