2019-08-19 16:50:33 +02:00
|
|
|
package com.github.apognu.otter.fragments
|
|
|
|
|
2020-05-29 21:40:01 +02:00
|
|
|
import android.content.Context
|
2019-11-05 21:23:29 +01:00
|
|
|
import android.graphics.Bitmap
|
2019-08-19 16:50:33 +02:00
|
|
|
import android.os.Bundle
|
2019-11-05 21:23:29 +01:00
|
|
|
import android.util.DisplayMetrics
|
|
|
|
import android.view.Gravity
|
2019-08-19 16:50:33 +02:00
|
|
|
import android.view.View
|
|
|
|
import android.view.animation.AccelerateDecelerateInterpolator
|
2020-05-30 14:12:04 +02:00
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
2019-11-05 21:23:29 +01:00
|
|
|
import androidx.core.graphics.drawable.toDrawable
|
2019-08-19 16:50:33 +02:00
|
|
|
import androidx.core.os.bundleOf
|
2020-05-29 21:40:01 +02:00
|
|
|
import androidx.fragment.app.Fragment
|
2019-08-19 16:50:33 +02:00
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
|
|
import androidx.transition.Fade
|
|
|
|
import androidx.transition.Slide
|
|
|
|
import com.github.apognu.otter.R
|
|
|
|
import com.github.apognu.otter.activities.MainActivity
|
|
|
|
import com.github.apognu.otter.adapters.AlbumsAdapter
|
|
|
|
import com.github.apognu.otter.repositories.AlbumsRepository
|
2019-10-22 21:56:33 +02:00
|
|
|
import com.github.apognu.otter.utils.*
|
2019-08-19 16:50:33 +02:00
|
|
|
import com.squareup.picasso.Picasso
|
|
|
|
import kotlinx.android.synthetic.main.fragment_albums.*
|
2019-11-05 21:23:29 +01:00
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
import kotlinx.coroutines.GlobalScope
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
import kotlinx.coroutines.withContext
|
2019-08-19 16:50:33 +02:00
|
|
|
|
|
|
|
class AlbumsFragment : FunkwhaleFragment<Album, AlbumsAdapter>() {
|
|
|
|
override val viewRes = R.layout.fragment_albums
|
|
|
|
override val recycler: RecyclerView get() = albums
|
|
|
|
|
|
|
|
var artistId = 0
|
|
|
|
var artistName = ""
|
|
|
|
var artistArt = ""
|
|
|
|
|
|
|
|
companion object {
|
2020-05-29 21:40:01 +02:00
|
|
|
fun new(artist: Artist, art: String? = null): AlbumsFragment {
|
|
|
|
val art = art ?: if (artist.albums?.isNotEmpty() == true) artist.albums[0].cover.original else ""
|
|
|
|
|
2019-08-19 16:50:33 +02:00
|
|
|
return AlbumsFragment().apply {
|
|
|
|
arguments = bundleOf(
|
|
|
|
"artistId" to artist.id,
|
|
|
|
"artistName" to artist.name,
|
2020-05-29 21:40:01 +02:00
|
|
|
"artistArt" to art
|
2019-08-19 16:50:33 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
2020-05-29 21:40:01 +02:00
|
|
|
|
|
|
|
fun openTracks(context: Context?, album: Album, fragment: Fragment? = null) {
|
|
|
|
(context as? MainActivity)?.let { activity ->
|
|
|
|
fragment?.let { fragment ->
|
|
|
|
fragment.onViewPager {
|
|
|
|
exitTransition = Fade().apply {
|
|
|
|
duration = AppContext.TRANSITION_DURATION
|
|
|
|
interpolator = AccelerateDecelerateInterpolator()
|
|
|
|
|
|
|
|
view?.let {
|
|
|
|
addTarget(it)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-05-30 14:12:04 +02:00
|
|
|
}
|
2020-05-29 21:40:01 +02:00
|
|
|
|
2020-05-30 14:12:04 +02:00
|
|
|
(context as? AppCompatActivity)?.let { activity ->
|
2020-05-29 21:40:01 +02:00
|
|
|
val fragment = TracksFragment.new(album).apply {
|
|
|
|
enterTransition = Slide().apply {
|
|
|
|
duration = AppContext.TRANSITION_DURATION
|
|
|
|
interpolator = AccelerateDecelerateInterpolator()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
activity.supportFragmentManager
|
|
|
|
.beginTransaction()
|
|
|
|
.replace(R.id.container, fragment)
|
|
|
|
.addToBackStack(null)
|
|
|
|
.commit()
|
|
|
|
}
|
|
|
|
}
|
2019-08-19 16:50:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
|
|
|
|
arguments?.apply {
|
|
|
|
artistId = getInt("artistId")
|
|
|
|
artistName = getString("artistName") ?: ""
|
|
|
|
artistArt = getString("artistArt") ?: ""
|
|
|
|
}
|
|
|
|
|
|
|
|
adapter = AlbumsAdapter(context, OnAlbumClickListener())
|
|
|
|
repository = AlbumsRepository(context, artistId)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
|
2019-11-05 21:23:29 +01:00
|
|
|
cover?.let { cover ->
|
|
|
|
Picasso.get()
|
|
|
|
.maybeLoad(maybeNormalizeUrl(artistArt))
|
|
|
|
.noFade()
|
|
|
|
.fit()
|
|
|
|
.centerCrop()
|
|
|
|
.into(cover)
|
|
|
|
}
|
|
|
|
|
|
|
|
cover_background?.let {
|
|
|
|
activity?.let { activity ->
|
|
|
|
GlobalScope.launch(Dispatchers.IO) {
|
|
|
|
val width = DisplayMetrics().apply {
|
|
|
|
activity.windowManager.defaultDisplay.getMetrics(this)
|
|
|
|
}.widthPixels
|
|
|
|
|
|
|
|
val backgroundCover = Picasso.get()
|
|
|
|
.maybeLoad(maybeNormalizeUrl(artistArt))
|
|
|
|
.get()
|
|
|
|
.run { Bitmap.createScaledBitmap(this, width, width, false) }
|
|
|
|
.run { Bitmap.createBitmap(this, 0, 0, width, cover_background.height).toDrawable(resources) }
|
|
|
|
.apply {
|
|
|
|
alpha = 20
|
|
|
|
gravity = Gravity.CENTER
|
|
|
|
}
|
|
|
|
|
|
|
|
withContext(Dispatchers.Main) {
|
|
|
|
cover_background.background = backgroundCover
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-08-19 16:50:33 +02:00
|
|
|
|
|
|
|
artist.text = artistName
|
|
|
|
}
|
|
|
|
|
|
|
|
inner class OnAlbumClickListener : AlbumsAdapter.OnAlbumClickListener {
|
2019-10-21 11:51:32 +02:00
|
|
|
override fun onClick(view: View?, album: Album) {
|
2020-05-29 21:40:01 +02:00
|
|
|
openTracks(context, album, fragment = this@AlbumsFragment)
|
2019-08-19 16:50:33 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|