Added CrossFade effect to Blur, Blur Card & Circle player
This commit is contained in:
parent
4d31c4ccc3
commit
c919033a2c
4 changed files with 84 additions and 44 deletions
|
@ -16,6 +16,7 @@ package code.name.monkey.retromusic.fragments.player.blur
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
|
@ -27,18 +28,18 @@ import code.name.monkey.retromusic.databinding.FragmentBlurBinding
|
||||||
import code.name.monkey.retromusic.extensions.drawAboveSystemBars
|
import code.name.monkey.retromusic.extensions.drawAboveSystemBars
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
||||||
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
||||||
import code.name.monkey.retromusic.glide.BlurTransformation
|
import code.name.monkey.retromusic.glide.*
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
|
||||||
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
|
||||||
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
|
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount
|
import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount
|
||||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||||
|
|
||||||
|
|
||||||
class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
|
class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
private var lastRequest: GlideRequest<Drawable>? = null
|
||||||
|
|
||||||
override fun playerToolbar(): Toolbar {
|
override fun playerToolbar(): Toolbar {
|
||||||
return binding.playerToolbar
|
return binding.playerToolbar
|
||||||
}
|
}
|
||||||
|
@ -111,23 +112,21 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
|
||||||
get() = lastColor
|
get() = lastColor
|
||||||
|
|
||||||
private fun updateBlur() {
|
private fun updateBlur() {
|
||||||
binding.colorBackground.clearColorFilter()
|
// https://github.com/bumptech/glide/issues/527#issuecomment-148840717
|
||||||
GlideApp.with(requireActivity()).asBitmapPalette()
|
GlideApp.with(this)
|
||||||
.songCoverOptions(MusicPlayerRemote.currentSong)
|
|
||||||
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
|
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
|
||||||
.dontAnimate()
|
.songCoverOptions(MusicPlayerRemote.currentSong).apply {
|
||||||
.transform(
|
thumbnail(lastRequest)
|
||||||
BlurTransformation.Builder(requireContext())
|
.crossfadeListener()
|
||||||
.blurRadius(blurAmount.toFloat())
|
.transform(
|
||||||
.build()
|
BlurTransformation.Builder(requireContext())
|
||||||
)
|
.blurRadius(blurAmount.toFloat())
|
||||||
.into(object : RetroMusicColoredTarget(binding.colorBackground) {
|
.build()
|
||||||
override fun onColorReady(colors: MediaNotificationProcessor) {
|
)
|
||||||
if (colors.backgroundColor == defaultFooterColor) {
|
.into(binding.colorBackground)
|
||||||
binding.colorBackground.setColorFilter(colors.backgroundColor)
|
lastRequest = this
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onServiceConnected() {
|
override fun onServiceConnected() {
|
||||||
|
|
|
@ -16,6 +16,7 @@ package code.name.monkey.retromusic.fragments.player.cardblur
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
|
@ -28,10 +29,7 @@ import code.name.monkey.retromusic.extensions.drawAboveSystemBars
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
||||||
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
||||||
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
|
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
|
||||||
import code.name.monkey.retromusic.glide.BlurTransformation
|
import code.name.monkey.retromusic.glide.*
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
|
||||||
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
|
||||||
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
|
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount
|
import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount
|
||||||
|
@ -50,6 +48,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
|
||||||
|
|
||||||
private var _binding: FragmentCardBlurPlayerBinding? = null
|
private var _binding: FragmentCardBlurPlayerBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
private var lastRequest: GlideRequest<Drawable>? = null
|
||||||
|
|
||||||
override fun onShow() {
|
override fun onShow() {
|
||||||
playbackControlsFragment.show()
|
playbackControlsFragment.show()
|
||||||
|
@ -136,22 +135,20 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateBlur() {
|
private fun updateBlur() {
|
||||||
binding.colorBackground.clearColorFilter()
|
// https://github.com/bumptech/glide/issues/527#issuecomment-148840717
|
||||||
GlideApp.with(requireActivity()).asBitmapPalette()
|
GlideApp.with(this)
|
||||||
.songCoverOptions(MusicPlayerRemote.currentSong)
|
|
||||||
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
|
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
|
||||||
.dontAnimate()
|
.songCoverOptions(MusicPlayerRemote.currentSong).apply {
|
||||||
.transform(
|
thumbnail(lastRequest)
|
||||||
BlurTransformation.Builder(requireContext()).blurRadius(blurAmount.toFloat())
|
.crossfadeListener()
|
||||||
.build()
|
.transform(
|
||||||
)
|
BlurTransformation.Builder(requireContext())
|
||||||
.into(object : RetroMusicColoredTarget(binding.colorBackground) {
|
.blurRadius(blurAmount.toFloat())
|
||||||
override fun onColorReady(colors: MediaNotificationProcessor) {
|
.build()
|
||||||
if (colors.backgroundColor == defaultFooterColor) {
|
)
|
||||||
binding.colorBackground.setColorFilter(colors.backgroundColor)
|
.into(binding.colorBackground)
|
||||||
}
|
lastRequest = this
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
|
|
@ -19,6 +19,7 @@ import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -37,8 +38,7 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
||||||
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
import code.name.monkey.retromusic.fragments.base.goToAlbum
|
||||||
import code.name.monkey.retromusic.fragments.base.goToArtist
|
import code.name.monkey.retromusic.fragments.base.goToArtist
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
import code.name.monkey.retromusic.glide.*
|
||||||
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
||||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
|
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
|
||||||
|
@ -70,6 +70,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private var rotateAnimator: ObjectAnimator? = null
|
private var rotateAnimator: ObjectAnimator? = null
|
||||||
|
private var lastRequest: GlideRequest<Drawable>? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -241,9 +242,15 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
binding.songInfo.hide()
|
binding.songInfo.hide()
|
||||||
}
|
}
|
||||||
GlideApp.with(this)
|
GlideApp.with(this)
|
||||||
.load(RetroGlideExtension.getSongModel(song))
|
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
|
||||||
.songCoverOptions(song)
|
.songCoverOptions(MusicPlayerRemote.currentSong).apply {
|
||||||
.into(binding.albumCover)
|
thumbnail(lastRequest)
|
||||||
|
.crossfadeListener()
|
||||||
|
.fitCenter()
|
||||||
|
.into(binding.albumCover)
|
||||||
|
lastRequest = this
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePlayPauseDrawableState() {
|
private fun updatePlayPauseDrawableState() {
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package code.name.monkey.retromusic.glide
|
package code.name.monkey.retromusic.glide
|
||||||
|
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
import androidx.core.graphics.drawable.toDrawable
|
||||||
import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
|
import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
|
||||||
import code.name.monkey.appthemehelper.util.TintHelper
|
import code.name.monkey.appthemehelper.util.TintHelper
|
||||||
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.App.Companion.getContext
|
import code.name.monkey.retromusic.App.Companion.getContext
|
||||||
import code.name.monkey.retromusic.Constants.USER_BANNER
|
import code.name.monkey.retromusic.Constants.USER_BANNER
|
||||||
import code.name.monkey.retromusic.Constants.USER_PROFILE
|
import code.name.monkey.retromusic.Constants.USER_PROFILE
|
||||||
|
@ -23,9 +25,15 @@ import com.bumptech.glide.RequestBuilder
|
||||||
import com.bumptech.glide.annotation.GlideExtension
|
import com.bumptech.glide.annotation.GlideExtension
|
||||||
import com.bumptech.glide.annotation.GlideOption
|
import com.bumptech.glide.annotation.GlideOption
|
||||||
import com.bumptech.glide.annotation.GlideType
|
import com.bumptech.glide.annotation.GlideType
|
||||||
|
import com.bumptech.glide.load.DataSource
|
||||||
import com.bumptech.glide.load.Key
|
import com.bumptech.glide.load.Key
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
import com.bumptech.glide.request.BaseRequestOptions
|
import com.bumptech.glide.request.BaseRequestOptions
|
||||||
|
import com.bumptech.glide.request.RequestListener
|
||||||
|
import com.bumptech.glide.request.target.Target
|
||||||
|
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory
|
||||||
|
import com.bumptech.glide.request.transition.Transition
|
||||||
import com.bumptech.glide.signature.MediaStoreSignature
|
import com.bumptech.glide.signature.MediaStoreSignature
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
@ -194,4 +202,33 @@ object RetroGlideExtension {
|
||||||
fun <TranscodeType> getDefaultTransition(): GenericTransitionOptions<TranscodeType> {
|
fun <TranscodeType> getDefaultTransition(): GenericTransitionOptions<TranscodeType> {
|
||||||
return GenericTransitionOptions<TranscodeType>().transition(DEFAULT_ANIMATION)
|
return GenericTransitionOptions<TranscodeType>().transition(DEFAULT_ANIMATION)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/bumptech/glide/issues/527#issuecomment-148840717
|
||||||
|
fun GlideRequest<Drawable>.crossfadeListener(): GlideRequest<Drawable> {
|
||||||
|
return listener(object : RequestListener<Drawable> {
|
||||||
|
override fun onLoadFailed(
|
||||||
|
e: GlideException?,
|
||||||
|
model: Any?,
|
||||||
|
target: Target<Drawable>?,
|
||||||
|
isFirstResource: Boolean
|
||||||
|
): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResourceReady(
|
||||||
|
resource: Drawable?,
|
||||||
|
model: Any?,
|
||||||
|
target: Target<Drawable>?,
|
||||||
|
dataSource: DataSource?,
|
||||||
|
isFirstResource: Boolean
|
||||||
|
): Boolean {
|
||||||
|
return if (isFirstResource) {
|
||||||
|
false // thumbnail was not shown, do as usual
|
||||||
|
} else DrawableCrossFadeFactory.Builder()
|
||||||
|
.setCrossFadeEnabled(true).build()
|
||||||
|
.build(dataSource, isFirstResource)
|
||||||
|
.transition(resource, target as Transition.ViewAdapter)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue