From 87e59ae1bdc05738f6a665f2a1ca58d96b8a6570 Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Thu, 21 May 2020 03:00:13 +0530 Subject: [PATCH] Remove Material Slidr --- .../retromusic/extensions/ViewExtensions.kt | 10 +++ .../retromusic/fragments/VolumeFragment.kt | 62 ++++++++++-------- .../player/adaptive/AdaptiveFragment.kt | 2 - .../AdaptivePlaybackControlsFragment.kt | 61 +++++++++-------- .../blur/BlurPlaybackControlsFragment.kt | 51 ++++++++++---- .../CardBlurPlaybackControlsFragment.kt | 46 ++++++++----- .../player/circle/CirclePlayerFragment.kt | 55 ++++++++++------ .../color/ColorPlaybackControlsFragment.kt | 43 +++++++----- .../flat/FlatPlaybackControlsFragment.kt | 55 +++++++++------- .../full/FullPlaybackControlsFragment.kt | 45 ++++++++----- .../player/gradient/GradientPlayerFragment.kt | 51 ++++++++------ .../LockScreenPlayerControlsFragment.kt | 45 ++++++++----- .../material/MaterialControlsFragment.kt | 51 +++++++------- .../normal/PlayerPlaybackControlsFragment.kt | 43 +++++++----- .../player/peak/PeakPlayerControlFragment.kt | 45 ++++++++----- .../plain/PlainPlaybackControlsFragment.kt | 47 +++++++------ .../player/tiny/TinyPlayerFragment.kt | 42 ++++++------ .../name/monkey/retromusic/util/ViewUtil.kt | 3 +- .../volume/AudioVolumeContentObserver.java | 4 +- .../volume/OnAudioVolumeChangedListener.kt | 2 +- .../main/res/drawable-xxxhdpi/np_tiny.webp | Bin 14122 -> 18108 bytes .../layout-land/fragment_circle_player.xml | 5 +- .../fragment_player_playback_controls.xml | 4 +- ...ment_adaptive_player_playback_controls.xml | 9 +-- ...fragment_blur_player_playback_controls.xml | 16 ++--- ...ent_card_blur_player_playback_controls.xml | 11 +--- .../res/layout/fragment_circle_player.xml | 9 +-- ...ragment_color_player_playback_controls.xml | 5 +- ...fragment_flat_player_playback_controls.xml | 5 +- .../layout/fragment_full_player_controls.xml | 9 +-- .../res/layout/fragment_gradient_controls.xml | 10 +-- ...fragment_lock_screen_playback_controls.xml | 2 +- .../fragment_material_playback_controls.xml | 5 +- .../layout/fragment_peak_control_player.xml | 6 +- .../fragment_plain_controls_fragment.xml | 5 +- .../fragment_player_playback_controls.xml | 8 +-- app/src/main/res/layout/fragment_volume.xml | 7 +- 37 files changed, 489 insertions(+), 390 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index d9a3cb502..5d6b2e62b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -14,10 +14,13 @@ package code.name.monkey.retromusic.extensions +import android.content.res.ColorStateList import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.EditText +import android.widget.SeekBar +import androidx.annotation.ColorInt import androidx.annotation.LayoutRes import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper @@ -51,4 +54,11 @@ fun Slider.setRange(progress: Float, to: Float) { valueFrom = 0F valueTo = to value = progress +} + + +fun SeekBar.applyColor(@ColorInt color: Int) { + thumbTintList = ColorStateList.valueOf(color) + progressTintList = ColorStateList.valueOf(color) + progressBackgroundTintList = ColorStateList.valueOf(color) } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt index e19b84aab..b0dc0b91b 100755 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt @@ -8,21 +8,20 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.SeekBar import androidx.fragment.app.Fragment import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.extensions.setRange +import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.volume.AudioVolumeObserver import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener -import com.google.android.material.slider.Slider - import kotlinx.android.synthetic.main.fragment_volume.* -class VolumeFragment : Fragment(), OnAudioVolumeChangedListener, - View.OnClickListener, Slider.OnChangeListener { +class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolumeChangedListener, + View.OnClickListener { private var audioVolumeObserver: AudioVolumeObserver? = null @@ -51,23 +50,20 @@ class VolumeFragment : Fragment(), OnAudioVolumeChangedListener, val audioManager = audioManager if (audioManager != null) { - volumeSeekBar.valueTo = - audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC).toFloat() - volumeSeekBar.value = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC).toFloat() + volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) } - volumeSeekBar.addOnChangeListener(this) + volumeSeekBar.setOnSeekBarChangeListener(this) } - override fun onAudioVolumeChanged(currentVolume: Float, maxVolume: Float) { + override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) { if (volumeSeekBar == null) { return } - if (maxVolume <= 0.0f) { - setPauseWhenZeroVolume(currentVolume < 1) - return - } - volumeSeekBar.setRange(currentVolume, maxVolume) - volumeDown.setImageResource(if (currentVolume == 0.0f) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) + + volumeSeekBar.max = maxVolume + volumeSeekBar.progress = currentVolume + volumeDown.setImageResource(if (currentVolume == 0) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) } override fun onDestroyView() { @@ -77,6 +73,19 @@ class VolumeFragment : Fragment(), OnAudioVolumeChangedListener, } } + override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) { + val audioManager = audioManager + audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0) + setPauseWhenZeroVolume(i < 1) + volumeDown?.setImageResource(if (i == 0) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) + } + + override fun onStartTrackingTouch(seekBar: SeekBar) { + } + + override fun onStopTrackingTouch(seekBar: SeekBar) { + } + override fun onClick(view: View) { val audioManager = audioManager when (view.id) { @@ -98,11 +107,17 @@ class VolumeFragment : Fragment(), OnAudioVolumeChangedListener, } fun setTintable(color: Int) { - ViewUtil.setProgressDrawable(volumeSeekBar, color, true) + volumeSeekBar.applyColor(color) + } + + fun removeThumb() { + volumeSeekBar.thumb = null } private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) { - if (PreferenceUtil.getInstance(requireContext()).pauseOnZeroVolume()) if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) { + if (PreferenceUtil.getInstance(requireContext()) + .pauseOnZeroVolume() + ) if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) { MusicPlayerRemote.pauseSong() } } @@ -110,6 +125,7 @@ class VolumeFragment : Fragment(), OnAudioVolumeChangedListener, fun setTintableColor(color: Int) { volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN) volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN) + //TintHelper.setTint(volumeSeekBar, color, false) ViewUtil.setProgressDrawable(volumeSeekBar, color, true) } @@ -119,14 +135,4 @@ class VolumeFragment : Fragment(), OnAudioVolumeChangedListener, return VolumeFragment() } } - - override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) { - if (value <= 0) { - return - } - val audioManager = audioManager - audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, value.toInt(), 0) - setPauseWhenZeroVolume(value < 1.0f) - volumeDown.setImageResource(if (value == 0.0f) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt index 70b193c1a..eb73da8ab 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt @@ -207,11 +207,9 @@ class AdaptiveFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Call } override fun onShow() { - playbackControlsFragment.show() } override fun onHide() { - playbackControlsFragment.hide() onBackPressed() } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt index aec2e4a89..3046f80b5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt @@ -1,16 +1,20 @@ package code.name.monkey.retromusic.fragments.player.adaptive +import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.SeekBar 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.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show @@ -18,11 +22,10 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.SliderReadTimeLabelFormatter -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.* @@ -139,7 +142,7 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() { false ) TintHelper.setTintAuto(playPauseButton, colorFinal, true) - ViewUtil.setProgressDrawable(progressSlider, colorFinal, true) + progressSlider.applyColor(colorFinal) volumeFragment?.setTintable(colorFinal) } @@ -182,6 +185,14 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() { shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } + override fun show() { + + } + + override fun hide() { + + } + override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( @@ -219,31 +230,29 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - public override fun show() { - //Ignore - } - - public override fun hide() { - //Ignore - } - - override fun setUpProgressSlider() { - progressSlider.setLabelFormatter(SliderReadTimeLabelFormatter()) - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt index 2203a82f2..977c2311a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.fragments.player.blur +import android.animation.ObjectAnimator import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle @@ -8,6 +9,8 @@ import android.view.View import android.view.ViewGroup import android.view.animation.AccelerateInterpolator import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper @@ -19,11 +22,24 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.* +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.nextButton +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.playPauseButton +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.previousButton +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.progressSlider +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.repeatButton +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.shuffleButton +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.songCurrentProgress +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.songInfo +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.songTotalTime +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.text +import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.title +import kotlinx.android.synthetic.main.fragment_player_playback_controls.* class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() { @@ -252,22 +268,29 @@ class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt index 23c2feac5..8e15b1274 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.fragments.player.cardblur +import android.animation.ObjectAnimator import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle @@ -7,20 +8,22 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar 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.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_card_blur_player_playback_controls.* import kotlinx.android.synthetic.main.media_button.* @@ -62,7 +65,6 @@ class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment() { updatePrevNextColor() updateProgressTextColor() - ViewUtil.setProgressDrawable(progressSlider, Color.WHITE, true) volumeFragment?.tintWhiteColor() } @@ -82,7 +84,7 @@ class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment() { } private fun updateProgressTextColor() { - val color = MaterialValueHelper.getPrimaryTextColor(context, false) + val color = Color.WHITE songTotalTime.setTextColor(color) songCurrentProgress.setTextColor(color) songInfo.setTextColor(color) @@ -210,22 +212,30 @@ class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.applyColor(Color.WHITE) + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt index e6e2d7d8c..dde68dfe4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt @@ -14,6 +14,7 @@ package code.name.monkey.retromusic.fragments.player.circle +import android.animation.ObjectAnimator import android.content.Context import android.graphics.Color import android.graphics.PorterDuff @@ -22,6 +23,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.SeekBar import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil @@ -29,13 +32,17 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.accentColor +import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil @@ -98,9 +105,8 @@ class CirclePlayerFragment : AbsPlayerFragment(), Callback, OnAudioVolumeChanged ThemeStore.accentColor(requireContext()), false ) - volumeSeekBar.progressColor = ThemeStore.accentColor(requireContext()) - volumeSeekBar.arcColor = ColorUtil - .withAlpha(ThemeStore.accentColor(requireContext()), 0.25f) + volumeSeekBar.progressColor = accentColor() + volumeSeekBar.arcColor = ColorUtil.withAlpha(accentColor(), 0.25f) setUpPlayPauseFab() setUpPrevNext() setUpPlayerToolbar() @@ -204,13 +210,12 @@ class CirclePlayerFragment : AbsPlayerFragment(), Callback, OnAudioVolumeChanged } } - override fun onAudioVolumeChanged(currentVolume: Float, maxVolume: Float) { + override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) { if (volumeSeekBar == null) { return } - - volumeSeekBar.max = maxVolume.toInt() - volumeSeekBar.progress = currentVolume.toInt() + volumeSeekBar.max = maxVolume + volumeSeekBar.progress = currentVolume } override fun onDestroyView() { @@ -231,22 +236,30 @@ class CirclePlayerFragment : AbsPlayerFragment(), Callback, OnAudioVolumeChanged override fun onStopTrackingTouch(seekArc: SeekArc?) { } + fun setUpProgressSlider() { + progressSlider.applyColor(accentColor()) + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt index 038fee581..1b0ed49c7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.fragments.player.color +import android.animation.ObjectAnimator import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle @@ -7,19 +8,22 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_color_player_playback_controls.* @@ -99,11 +103,11 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() { override fun setColor(color: MediaNotificationProcessor) { TintHelper.setTintAuto(playPauseButton, color.primaryTextColor, true) TintHelper.setTintAuto(playPauseButton, color.backgroundColor, false) + progressSlider.applyColor(color.primaryTextColor) title.setTextColor(color.primaryTextColor) text.setTextColor(color.secondaryTextColor) songInfo.setTextColor(color.secondaryTextColor) - ViewUtil.setProgressDrawable(progressSlider, color.primaryTextColor, true) songCurrentProgress.setTextColor(color.secondaryTextColor) songTotalTime.setTextColor(color.secondaryTextColor) volumeFragment?.setTintableColor(color.primaryTextColor) @@ -206,22 +210,29 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt index 568597ea6..ac604dc4d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt @@ -1,17 +1,21 @@ package code.name.monkey.retromusic.fragments.player.flat +import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar 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.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show @@ -20,10 +24,10 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_flat_player_playback_controls.* @@ -99,9 +103,7 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback { updateTextColors(colorFinal) volumeFragment?.setTintable(colorFinal) - - ViewUtil.setProgressDrawable(progressSlider, colorFinal, true) - + progressSlider.applyColor(colorFinal) updateRepeatState() updateShuffleState() } @@ -171,25 +173,6 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback { } } - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) - } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } - override fun onRepeatModeChanged() { updateRepeatState() } @@ -238,4 +221,30 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback { ) } } + + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + + override fun onUpdateProgressViews(progress: Int, total: Int) { + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index 7619fb024..3dd842520 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.fragments.player.full +import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.content.res.ColorStateList import android.graphics.Color @@ -11,21 +12,24 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator import android.widget.PopupMenu +import android.widget.SeekBar import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment 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 kotlinx.android.synthetic.main.fragment_full_player_controls.* @@ -97,7 +101,7 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment(), playerMenu.imageTintList = tintList songFavourite.imageTintList = tintList volumeFragment?.setTintableColor(color.primaryTextColor) - ViewUtil.setProgressDrawable(progressSlider, color.primaryTextColor, true) + progressSlider.applyColor(color.primaryTextColor) title.setTextColor(color.primaryTextColor) text.setTextColor(color.secondaryTextColor) songInfo.setTextColor(color.secondaryTextColor) @@ -194,23 +198,30 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment(), previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) } - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } + override fun onUpdateProgressViews(progress: Int, total: Int) { + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } override fun onRepeatModeChanged() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index 0eee1ce0c..e32242c9f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.fragments.player.gradient +import android.animation.ObjectAnimator import android.content.res.ColorStateList import android.graphics.Color import android.graphics.PorterDuff @@ -8,7 +9,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.animation.LinearInterpolator import android.widget.PopupMenu +import android.widget.SeekBar import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.constraintlayout.widget.ConstraintLayout @@ -26,10 +29,12 @@ 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.VolumeFragment +import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment 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 @@ -305,24 +310,6 @@ class GradientPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelpe } } - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) - } - - fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } private fun setUpPlayPauseFab() { playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) @@ -469,7 +456,33 @@ class GradientPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelpe linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } - fun updateFavorite() { + fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + + override fun onUpdateProgressViews(progress: Int, total: Int) { + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + private fun updateFavorite() { if (updateIsFavoriteTask != null) { updateIsFavoriteTask?.cancel(false) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt index 8adaf6fdf..0243cd58f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt @@ -14,27 +14,31 @@ package code.name.monkey.retromusic.fragments.player.lockscreen +import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar 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.extensions.applyColor import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.textColorSecondary import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_lock_screen_playback_controls.* @@ -124,11 +128,11 @@ class LockScreenPlayerControlsFragment : AbsPlayerControlsFragment() { val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) { color.primaryTextColor } else { - textColorSecondary( ) + textColorSecondary() }.ripAlpha() volumeFragment?.setTintable(colorFinal) - ViewUtil.setProgressDrawable(progressSlider, colorFinal, true) + progressSlider.applyColor(colorFinal) updateRepeatState() updateShuffleState() @@ -236,22 +240,29 @@ class LockScreenPlayerControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt index ad815b9db..f786f24ef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt @@ -1,25 +1,25 @@ package code.name.monkey.retromusic.fragments.player.material +import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.SeekBar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R -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.extensions.textColorSecondary +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.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_material_playback_controls.* @@ -104,7 +104,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() { MaterialValueHelper.getPrimaryTextColor(requireContext(), false) lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false) - }else{ + } else { lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(requireContext(), true) lastDisabledPlaybackControlsColor = @@ -116,11 +116,11 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() { val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) { lastPlaybackControlsColor } else { - textColorSecondary( ) + textColorSecondary() }.ripAlpha() text.setTextColor(colorFinal) - ViewUtil.setProgressDrawable(progressSlider, colorFinal, true) + progressSlider.applyColor(colorFinal) volumeFragment?.setTintable(colorFinal) @@ -212,22 +212,29 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() { public override fun hide() { } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt index e54565abf..51ca41282 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt @@ -1,17 +1,21 @@ package code.name.monkey.retromusic.fragments.player.normal +import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar 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.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show @@ -19,10 +23,10 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_player_playback_controls.* @@ -88,7 +92,7 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { false ) TintHelper.setTintAuto(playPauseButton, colorFinal, true) - ViewUtil.setProgressDrawable(progressSlider, colorFinal, true) + progressSlider.applyColor(colorFinal) volumeFragment?.setTintable(colorFinal) updateRepeatState() updateShuffleState() @@ -233,22 +237,29 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt index b6c2eacf4..8f71d9082 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt @@ -14,25 +14,29 @@ package code.name.monkey.retromusic.fragments.player.peak +import android.animation.ObjectAnimator import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.SeekBar import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil 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.extensions.applyColor import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_peak_control_player.* @@ -90,7 +94,7 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment() { } else { ThemeStore.accentColor(requireContext()) } - ViewUtil.setProgressDrawable(progressSlider, controlsColor, true) + progressSlider.applyColor(controlsColor) volumeFragment?.setTintableColor(controlsColor) playPauseButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) nextButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) @@ -139,23 +143,30 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment() { } } - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) } - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } + override fun onUpdateProgressViews(progress: Int, total: Int) { + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } private fun setUpPlayPauseFab() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt index 36159e839..bd9b7bec8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.fragments.player.plain +import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater @@ -7,25 +8,27 @@ import android.view.View import android.view.ViewGroup import android.view.animation.AccelerateInterpolator import android.view.animation.DecelerateInterpolator +import android.view.animation.LinearInterpolator +import android.widget.SeekBar 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.extensions.applyColor 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.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.songInfo +import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.* import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.nextButton import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.playPauseButton import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.previousButton @@ -159,6 +162,7 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() { ThemeStore.accentColor(requireContext()) } volumeFragment?.setTintable(colorFinal) + progressSlider.applyColor(colorFinal) TintHelper.setTintAuto( playPauseButton, @@ -170,8 +174,6 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() { ) TintHelper.setTintAuto(playPauseButton, colorFinal, true) - ViewUtil.setProgressDrawable(progressSlider, colorFinal.ripAlpha(), true) - updateRepeatState() updateShuffleState() updatePrevNextColor() @@ -268,22 +270,29 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() { } } + override fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews( + MusicPlayerRemote.songProgressMillis, + MusicPlayerRemote.songDurationMillis + ) + } + } + }) + } + override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.valueTo = total.toFloat() - progressSlider.value = progress.toFloat() + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } - - override fun setUpProgressSlider() { - progressSlider.addOnChangeListener { _, value, fromUser -> - if (fromUser) { - MusicPlayerRemote.seekTo(value.toInt()) - onUpdateProgressViews( - MusicPlayerRemote.songProgressMillis, - MusicPlayerRemote.songDurationMillis - ) - } - } - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt index 0071fc043..bdd7ddf68 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt @@ -25,26 +25,11 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.android.synthetic.main.fragment_tiny_player.* -import kotlinx.android.synthetic.main.fragment_tiny_player.playerToolbar class TinyPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Callback { - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressBar.max = total + private var lastColor: Int = 0 + private var toolbarColor: Int = 0 - val animator = ObjectAnimator.ofInt(progressBar, "progress", progress) - - val animatorSet = AnimatorSet() - animatorSet.playSequentially(animator) - - animatorSet.duration = 1500 - animatorSet.interpolator = LinearInterpolator() - animatorSet.start() - - playerSongTotalTime.text = String.format( - "%s/%s", MusicUtil.getReadableDurationString(total.toLong()), - MusicUtil.getReadableDurationString(progress.toLong()) - ) - } override fun playerToolbar(): Toolbar { return playerToolbar @@ -61,10 +46,9 @@ class TinyPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Ca } override fun toolbarIconColor(): Int { - return lastColor + return toolbarColor } - private var lastColor: Int = 0 override val paletteColor: Int get() = lastColor @@ -72,6 +56,7 @@ class TinyPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Ca override fun onColorChanged(color: MediaNotificationProcessor) { lastColor = color.backgroundColor + toolbarColor = color.secondaryTextColor controlsFragment.setColor(color) callbacks?.onPaletteColorChanged() @@ -81,7 +66,6 @@ class TinyPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Ca songInfo.setTextColor(color.secondaryTextColor) ViewUtil.setProgressDrawable(progressBar, color.backgroundColor) - Handler().post { ToolbarContentTintHelper.colorizeToolbar( playerToolbar, @@ -176,4 +160,22 @@ class TinyPlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Ca super.onPlayingMetaChanged() updateSong() } + + override fun onUpdateProgressViews(progress: Int, total: Int) { + progressBar.max = total + + val animator = ObjectAnimator.ofInt(progressBar, "progress", progress) + + val animatorSet = AnimatorSet() + animatorSet.playSequentially(animator) + + animatorSet.duration = 1500 + animatorSet.interpolator = LinearInterpolator() + animatorSet.start() + + playerSongTotalTime.text = String.format( + "%s/%s", MusicUtil.getReadableDurationString(total.toLong()), + MusicUtil.getReadableDurationString(progress.toLong()) + ) + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt index d20338fbf..b256915d9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt @@ -41,8 +41,7 @@ object ViewUtil { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) { val layerDrawable = progressSlider.progressDrawable as LayerDrawable val progressDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress) - progressDrawable.colorFilter = - BlendModeColorFilterCompat.createBlendModeColorFilterCompat(newColor, SRC_IN) + progressDrawable.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(newColor, SRC_IN) } else { progressSlider.progressTintList = ColorStateList.valueOf(newColor) } diff --git a/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java b/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java index 2378cc36f..7e1ec7c3b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java +++ b/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java @@ -48,8 +48,8 @@ public class AudioVolumeContentObserver extends ContentObserver { @Override public void onChange(boolean selfChange, Uri uri) { if (mAudioManager != null && mListener != null) { - float maxVolume = mAudioManager.getStreamMaxVolume(mAudioStreamType); - float currentVolume = mAudioManager.getStreamVolume(mAudioStreamType); + int maxVolume = mAudioManager.getStreamMaxVolume(mAudioStreamType); + int currentVolume = mAudioManager.getStreamVolume(mAudioStreamType); if (currentVolume != mLastVolume) { mLastVolume = currentVolume; mListener.onAudioVolumeChanged(currentVolume, maxVolume); diff --git a/app/src/main/java/code/name/monkey/retromusic/volume/OnAudioVolumeChangedListener.kt b/app/src/main/java/code/name/monkey/retromusic/volume/OnAudioVolumeChangedListener.kt index 3fb91db0a..948cd7432 100644 --- a/app/src/main/java/code/name/monkey/retromusic/volume/OnAudioVolumeChangedListener.kt +++ b/app/src/main/java/code/name/monkey/retromusic/volume/OnAudioVolumeChangedListener.kt @@ -14,5 +14,5 @@ package code.name.monkey.retromusic.volume interface OnAudioVolumeChangedListener { - fun onAudioVolumeChanged(currentVolume: Float, maxVolume: Float) + fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/np_tiny.webp b/app/src/main/res/drawable-xxxhdpi/np_tiny.webp index b2ec68aad93a6a0739403c90ba684650a224294a..2374fccaa4d68eafec801c87e04c11e76401b9b6 100644 GIT binary patch literal 18108 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 E3rGt5WdHyG literal 14122 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 diff --git a/app/src/main/res/layout-land/fragment_circle_player.xml b/app/src/main/res/layout-land/fragment_circle_player.xml index 48954b926..0795e18e9 100644 --- a/app/src/main/res/layout-land/fragment_circle_player.xml +++ b/app/src/main/res/layout-land/fragment_circle_player.xml @@ -157,17 +157,14 @@ app:layout_constraintTop_toBottomOf="@+id/titleContainer" tools:text="@tools:sample/lorem/random" /> - - diff --git a/app/src/main/res/layout/fragment_adaptive_player_playback_controls.xml b/app/src/main/res/layout/fragment_adaptive_player_playback_controls.xml index a8f13005b..6d1325340 100644 --- a/app/src/main/res/layout/fragment_adaptive_player_playback_controls.xml +++ b/app/src/main/res/layout/fragment_adaptive_player_playback_controls.xml @@ -8,7 +8,6 @@ android:orientation="vertical" tools:ignore="MissingPrefix"> - - + app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintTop_toTopOf="parent" /> - - + app:layout_constraintTop_toBottomOf="@+id/volumeSeekBar" /> - diff --git a/app/src/main/res/layout/fragment_flat_player_playback_controls.xml b/app/src/main/res/layout/fragment_flat_player_playback_controls.xml index 5fb011b55..4ff9048e7 100644 --- a/app/src/main/res/layout/fragment_flat_player_playback_controls.xml +++ b/app/src/main/res/layout/fragment_flat_player_playback_controls.xml @@ -23,19 +23,16 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - diff --git a/app/src/main/res/layout/fragment_full_player_controls.xml b/app/src/main/res/layout/fragment_full_player_controls.xml index 0caaa93b9..a9e08e5bb 100644 --- a/app/src/main/res/layout/fragment_full_player_controls.xml +++ b/app/src/main/res/layout/fragment_full_player_controls.xml @@ -89,21 +89,14 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - diff --git a/app/src/main/res/layout/fragment_gradient_controls.xml b/app/src/main/res/layout/fragment_gradient_controls.xml index 386b6511c..b1d8b047f 100644 --- a/app/src/main/res/layout/fragment_gradient_controls.xml +++ b/app/src/main/res/layout/fragment_gradient_controls.xml @@ -92,21 +92,14 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - @@ -145,6 +138,7 @@ android:id="@+id/playPauseButton" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="16dp" android:background="?attr/roundSelector" app:layout_constraintBottom_toTopOf="@+id/volumeFragmentContainer" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/fragment_lock_screen_playback_controls.xml b/app/src/main/res/layout/fragment_lock_screen_playback_controls.xml index f0d211989..e9fb0545d 100644 --- a/app/src/main/res/layout/fragment_lock_screen_playback_controls.xml +++ b/app/src/main/res/layout/fragment_lock_screen_playback_controls.xml @@ -25,7 +25,7 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - - diff --git a/app/src/main/res/layout/fragment_peak_control_player.xml b/app/src/main/res/layout/fragment_peak_control_player.xml index 06acd1410..a83259f17 100644 --- a/app/src/main/res/layout/fragment_peak_control_player.xml +++ b/app/src/main/res/layout/fragment_peak_control_player.xml @@ -34,17 +34,14 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - @@ -67,6 +64,7 @@ android:id="@+id/playPauseButton" android:layout_width="72dp" android:layout_height="72dp" + android:layout_marginTop="16dp" android:background="?attr/roundSelector" android:padding="8dp" android:scaleType="fitCenter" diff --git a/app/src/main/res/layout/fragment_plain_controls_fragment.xml b/app/src/main/res/layout/fragment_plain_controls_fragment.xml index 4aa78589c..a74e7b006 100644 --- a/app/src/main/res/layout/fragment_plain_controls_fragment.xml +++ b/app/src/main/res/layout/fragment_plain_controls_fragment.xml @@ -22,17 +22,14 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - diff --git a/app/src/main/res/layout/fragment_player_playback_controls.xml b/app/src/main/res/layout/fragment_player_playback_controls.xml index 2a78b51a0..13ac8b44a 100755 --- a/app/src/main/res/layout/fragment_player_playback_controls.xml +++ b/app/src/main/res/layout/fragment_player_playback_controls.xml @@ -24,17 +24,13 @@ tools:ignore="RtlHardcoded,RtlSymmetry" tools:text="00:22" /> - @@ -108,8 +104,8 @@ android:ellipsize="end" android:gravity="center" android:maxLines="2" - android:paddingBottom="8dp" android:paddingHorizontal="16dp" + android:paddingBottom="8dp" android:textColor="?android:attr/textColorSecondary" android:textSize="12sp" app:layout_constraintBottom_toTopOf="@+id/playPauseButton" diff --git a/app/src/main/res/layout/fragment_volume.xml b/app/src/main/res/layout/fragment_volume.xml index dabf109a7..183044d25 100755 --- a/app/src/main/res/layout/fragment_volume.xml +++ b/app/src/main/res/layout/fragment_volume.xml @@ -24,21 +24,18 @@ app:srcCompat="@drawable/ic_volume_down_white_24dp" app:tint="?attr/colorControlNormal" /> - + app:layout_constraintTop_toTopOf="@+id/volumeDown" />