2019-04-20 05:29:45 +00:00
|
|
|
package code.name.monkey.retromusic.fragments.player
|
2018-11-30 01:06:16 +00:00
|
|
|
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import androidx.viewpager.widget.ViewPager
|
2019-07-30 18:30:19 +00:00
|
|
|
import code.name.monkey.retromusic.R
|
2019-04-20 05:29:45 +00:00
|
|
|
import code.name.monkey.retromusic.adapter.album.AlbumCoverPagerAdapter
|
2019-07-30 18:30:19 +00:00
|
|
|
import code.name.monkey.retromusic.adapter.album.AlbumCoverPagerAdapter.AlbumCoverFragment
|
2020-02-26 16:49:24 +00:00
|
|
|
import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
|
2019-04-20 05:29:45 +00:00
|
|
|
import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment
|
2019-07-30 18:30:19 +00:00
|
|
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
|
|
|
import code.name.monkey.retromusic.transform.CarousalPagerTransformer
|
|
|
|
import code.name.monkey.retromusic.transform.ParallaxPagerTransformer
|
2018-11-30 01:06:16 +00:00
|
|
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
2020-05-05 19:55:15 +00:00
|
|
|
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
2020-02-26 16:49:24 +00:00
|
|
|
import kotlinx.android.synthetic.main.fragment_player_album_cover.*
|
2018-11-30 01:06:16 +00:00
|
|
|
|
2020-05-11 23:00:22 +00:00
|
|
|
|
2018-11-30 01:06:16 +00:00
|
|
|
class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChangeListener {
|
|
|
|
private var callbacks: Callbacks? = null
|
|
|
|
private var currentPosition: Int = 0
|
2019-07-30 18:30:19 +00:00
|
|
|
private val colorReceiver = object : AlbumCoverFragment.ColorReceiver {
|
2020-05-05 19:55:15 +00:00
|
|
|
override fun onColorReady(color: MediaNotificationProcessor, request: Int) {
|
2018-11-30 01:06:16 +00:00
|
|
|
if (currentPosition == request) {
|
|
|
|
notifyColorChange(color)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun removeSlideEffect() {
|
2019-07-30 18:30:19 +00:00
|
|
|
val transformer = ParallaxPagerTransformer(R.id.player_image)
|
2018-11-30 01:06:16 +00:00
|
|
|
transformer.setSpeed(0.3f)
|
|
|
|
viewPager.setPageTransformer(true, transformer)
|
|
|
|
}
|
|
|
|
|
2020-01-24 16:54:08 +00:00
|
|
|
override fun onCreateView(
|
|
|
|
inflater: LayoutInflater, container: ViewGroup?,
|
|
|
|
savedInstanceState: Bundle?
|
|
|
|
): View? {
|
2019-07-30 18:30:19 +00:00
|
|
|
return inflater.inflate(R.layout.fragment_player_album_cover, container, false)
|
2018-11-30 01:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
viewPager.addOnPageChangeListener(this)
|
2020-05-05 22:20:15 +00:00
|
|
|
val nps = PreferenceUtil.getInstance(requireContext()).nowPlayingScreen
|
2020-01-24 16:54:08 +00:00
|
|
|
|
2020-05-11 23:00:22 +00:00
|
|
|
val metrics = resources.displayMetrics
|
|
|
|
val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat()
|
|
|
|
|
|
|
|
|
2020-05-14 15:27:42 +00:00
|
|
|
if (nps == Full || nps == Classic || nps == Fit) {
|
2020-05-05 22:20:15 +00:00
|
|
|
viewPager.offscreenPageLimit = 2
|
|
|
|
} else if (PreferenceUtil.getInstance(requireContext()).carouselEffect()) {
|
2018-12-09 06:38:34 +00:00
|
|
|
viewPager.clipToPadding = false
|
2020-05-11 23:00:22 +00:00
|
|
|
val padding =
|
|
|
|
if (ratio >= 1.777f) {
|
|
|
|
40
|
|
|
|
} else {
|
|
|
|
100
|
|
|
|
}
|
|
|
|
viewPager.setPadding(padding, 0, padding, 0)
|
2019-07-31 05:19:28 +00:00
|
|
|
viewPager.pageMargin = 0
|
2019-07-30 18:30:19 +00:00
|
|
|
viewPager.setPageTransformer(false, CarousalPagerTransformer(requireContext()))
|
2020-05-07 06:57:24 +00:00
|
|
|
} else {
|
2018-12-09 06:38:34 +00:00
|
|
|
viewPager.offscreenPageLimit = 2
|
2020-02-26 16:49:24 +00:00
|
|
|
viewPager.setPageTransformer(
|
|
|
|
true,
|
|
|
|
PreferenceUtil.getInstance(requireContext()).albumCoverTransform
|
|
|
|
)
|
2018-12-08 03:33:02 +00:00
|
|
|
}
|
2018-11-30 01:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDestroyView() {
|
|
|
|
super.onDestroyView()
|
|
|
|
viewPager.removeOnPageChangeListener(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onServiceConnected() {
|
|
|
|
updatePlayingQueue()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPlayingMetaChanged() {
|
|
|
|
viewPager.currentItem = MusicPlayerRemote.position
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onQueueChanged() {
|
|
|
|
updatePlayingQueue()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun updatePlayingQueue() {
|
|
|
|
viewPager.apply {
|
2020-01-24 16:54:08 +00:00
|
|
|
adapter = AlbumCoverPagerAdapter(childFragmentManager, MusicPlayerRemote.playingQueue)
|
2018-11-30 01:06:16 +00:00
|
|
|
viewPager.adapter!!.notifyDataSetChanged()
|
|
|
|
viewPager.currentItem = MusicPlayerRemote.position
|
|
|
|
onPageSelected(MusicPlayerRemote.position)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPageSelected(position: Int) {
|
|
|
|
currentPosition = position
|
|
|
|
if (viewPager.adapter != null) {
|
|
|
|
(viewPager.adapter as AlbumCoverPagerAdapter).receiveColor(colorReceiver, position)
|
|
|
|
}
|
|
|
|
if (position != MusicPlayerRemote.position) {
|
|
|
|
MusicPlayerRemote.playSongAt(position)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPageScrollStateChanged(state: Int) {
|
|
|
|
}
|
|
|
|
|
2020-05-05 19:55:15 +00:00
|
|
|
private fun notifyColorChange(color: MediaNotificationProcessor) {
|
2020-01-24 16:54:08 +00:00
|
|
|
callbacks?.onColorChanged(color)
|
2018-11-30 01:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fun setCallbacks(listener: Callbacks) {
|
|
|
|
callbacks = listener
|
|
|
|
}
|
|
|
|
|
|
|
|
fun removeEffect() {
|
|
|
|
viewPager.setPageTransformer(false, null)
|
|
|
|
}
|
|
|
|
|
|
|
|
interface Callbacks {
|
|
|
|
|
2020-05-05 19:55:15 +00:00
|
|
|
fun onColorChanged(color: MediaNotificationProcessor)
|
2018-11-30 01:06:16 +00:00
|
|
|
|
|
|
|
fun onFavoriteToggled()
|
|
|
|
}
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
val TAG: String = PlayerAlbumCoverFragment::class.java.simpleName
|
|
|
|
}
|
|
|
|
}
|