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

141 lines
4.8 KiB
Kotlin
Raw Normal View History

2020-10-06 08:46:04 +00:00
/*
* Copyright (c) 2020 Hemanth Savarla.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
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.View
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
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
2020-06-06 18:57:28 +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
import kotlinx.android.synthetic.main.fragment_player_album_cover.*
2018-11-30 01:06:16 +00:00
class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_player_album_cover),
ViewPager.OnPageChangeListener {
2020-08-11 21:31:09 +00:00
2018-11-30 01:06:16 +00:00
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)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewPager.addOnPageChangeListener(this)
2020-06-06 18:57:28 +00:00
val nps = PreferenceUtil.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()
if (nps == Full || nps == Classic || nps == Fit || nps == Gradient) {
viewPager.offscreenPageLimit = 2
2020-06-06 18:57:28 +00:00
} else if (PreferenceUtil.isCarouselEffect) {
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)
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
viewPager.setPageTransformer(
true,
2020-06-06 18:57:28 +00:00
PreferenceUtil.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
}
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
}
}