PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/PlayerAlbumCoverFragment.kt

132 lines
4.3 KiB
Kotlin
Raw Normal View History

2018-11-30 01:06:16 +00:00
package code.name.monkey.retromusic.ui.fragments.player
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.viewpager.widget.ViewPager
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
2018-12-08 03:33:02 +00:00
import code.name.monkey.retromusic.transform.CarousalPagerTransformer
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.transform.ParallaxPagerTransformer
import code.name.monkey.retromusic.ui.adapter.album.AlbumCoverPagerAdapter
2018-12-08 03:33:02 +00:00
import code.name.monkey.retromusic.ui.fragments.NowPlayingScreen
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.ui.fragments.base.AbsMusicServiceFragment
import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.android.synthetic.main.fragment_player_album_cover.*
class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChangeListener {
private var callbacks: Callbacks? = null
private var currentPosition: Int = 0
private val colorReceiver = object : AlbumCoverPagerAdapter.AlbumCoverFragment.ColorReceiver {
override fun onColorReady(color: Int, request: Int) {
if (currentPosition == request) {
notifyColorChange(color)
}
}
}
fun removeSlideEffect() {
val transformer = ParallaxPagerTransformer(R.id.player_image)
transformer.setSpeed(0.3f)
viewPager.setPageTransformer(true, transformer)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_player_album_cover, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewPager.addOnPageChangeListener(this)
2018-12-08 03:33:02 +00:00
//noinspection ConstantConditions
2018-12-09 06:38:34 +00:00
if (PreferenceUtil.getInstance().carouselEffect() &&
2019-01-28 10:45:51 +00:00
!((PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.FULL) ||
(PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.ADAPTIVE)
2018-12-09 06:38:34 +00:00
|| (PreferenceUtil.getInstance().nowPlayingScreen == NowPlayingScreen.FIT))) {
viewPager.clipToPadding = false
viewPager.setPadding(96, 0, 96, 0)
viewPager.pageMargin = 18
viewPager.setPageTransformer(false, CarousalPagerTransformer(context!!))
2018-12-08 03:33:02 +00:00
} else {
2018-12-09 06:38:34 +00:00
viewPager.offscreenPageLimit = 2
viewPager.setPageTransformer(true, PreferenceUtil.getInstance().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 {
adapter = AlbumCoverPagerAdapter(fragmentManager!!, MusicPlayerRemote.playingQueue)
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) {
}
private fun notifyColorChange(color: Int) {
if (callbacks != null) {
callbacks!!.onColorChanged(color)
}
}
fun setCallbacks(listener: Callbacks) {
callbacks = listener
}
fun removeEffect() {
viewPager.setPageTransformer(false, null)
}
interface Callbacks {
fun onColorChanged(color: Int)
fun onFavoriteToggled()
}
companion object {
val TAG: String = PlayerAlbumCoverFragment::class.java.simpleName
}
}